Certificados de criptografia
(a wirelesspt.net suporta e encoraja a utilização de criptografia a todos os seus utilizadores e membros dentro dos limites legais da lei em vigor)
Este artigo visa em explicar de forma simples na linha de comandos como criar certificados de criptografia rsa para email, ficheiros locais, administração remota, navegar na internet, utilizar uma sala de chat entre outros; com openssl, openssh, gnutls e openpgp que se encontram disponíveis gratuitamente para linux, unix e windows a fim de assegurar a privacidade dos seus criadores e utilizadores. Recomenda-se ainda que para a criação de certificados digitais, que se utilize um sistema operativo em que se confia e nunca maquinas remotas ou serviços alojados por outros. Utilize sempre software de código aberto: opensource
Openssl
Certificado auto assinado com openssl que poderá ser utilizado em serviços como irc, http, ftp, etc. A opção (-days 365) cria um prazo de expiração e é opcional.
openssl req -x509 -nodes -days <dias> -utf8 -newkey <tipo>:<bits>-sha512 -keyout <nome_do_serviço>.key -out <nome_do_serviço>.crt
Exemplo na linha de comandos:
openssl req -x509 -nodes -days 365 -utf8 -newkey rsa:4096 -sha512 -keyout servidor_http.key -out servidor_http.crt
Será apresentado o seguinte e que devemos preencher de acordo:
Generating a 4096 bit RSA private key ..............................................................++ ....................................................................................++ writing new private key to 'nome.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank. For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:<domínio do país> State or Province Name (full name) [Some-State]: <província ou estado> Locality Name (eg, city) []: <localidade> Organization Name (eg, company) [Internet Widgits Pty Ltd]: <descrição do projecto> Organizational Unit Name (eg, section) []: <nome do projecto ou organização> Common Name (e.g. server FQDN or YOUR name) []: <endereço na internet ou nome do administrador> Email Address []: <email do projecto ou administrador>
Para testar o certificado basta digitar:
openssl s_client -connect ip:porta
Exemplo:
openssl s_client -connect wirelesspt.net:443 openssl s_client -connect wirelesspt.net:6697
Para mais detalhes de como alterar a criação do certificado basta digitar na linha de comandos:
openssl -h man openssl
Gnutls
Certificado auto assinado com gnutls que poderá ser utilizado em serviços como irc, http, ftp, etc.
certtool --generate-privkey --bits 4096 --outfile <nome_do_serviço>.key certtool --generate-self-signed --load-privkey <nome_do_serviço>.key --outfile <nome_do_serviço>.crt certtool --generate-dh-params --bits 4096 --outfile <nome_do_serviço>.pem
Exemplo na linha de comandos:
certtool --generate-privkey --bits 4096 --outfile servidor_irc.key certtool --generate-self-signed --load-privkey servidor_irc.key --outfile servidor_irc.crt certtool --generate-dh-params --bits 4096 --outfile servidor_irc.pem
Serão apresentas várias perguntas e que devemos preencher de acordo como o que se pretende:
Para mais detalhes de como alterar a criação do certificado basta digitar na linha de comandos:
certtool -h man certtool
Mumble
Embora o mumble forneça o seu próprio método de criação de certificados de criptografia este método permite criar um certificado personalizado para o cliente quer seja com SSL ou TLS e para tal devemos antes de mais criar um certificado com umas das ferramentas disponíveis. Neste exemplo usaremos openssl. A opção (-days 365) cria um prazo de expiração e é opcional.
Criar o certificado inicial:
openssl req -x509 -nodes -days 365 -utf8 -newkey rsa:4096 -keyout nome_da_pessoa.key -out nome_da_pessoa.crt
Exemplo:
Country Name (2 letter code) [AU]:PT State or Province Name (full name) [Some-State]:Ribatejo Locality Name (eg, city) []:Moitas Venda Organization Name (eg, company) [Internet Widgits Pty Ltd]:Mesh Organizational Unit Name (eg, section) []:Network Common Name (e.g. server FQDN or YOUR name) []:wirelesspt.net Email Address []:nome_da_pessoa@wirelesspt.net
Converter para formato .p12 utilizado pelo mumble:
openssl pkcs12 -export -inkey nome_da_pessoa.key -in nome_da_pessoa.crt -name nome_da_pessoa -out nome_da_pessoa.p12
Senha de segurança privada para exportar o certificado que será utilizada no cliente mumble:
Enter Export Password: Verifying - Enter Export Password:
Para a criação de certificados de criptografia para o servidor não é necessário converter o certificado para formato .p12.
Openssh
Certificado de criptografia autenticação em serviço de ssh.
ssh-keygen -t rsa -b 4096 -f <nome_da_chave_ssh>
Será questionado por uma palavra passe que é opcional mas altamente recomendada.
Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): <palavara passe> Enter same passphrase again: <palavara passe> Your identification has been saved in chave_ssh. Your public key has been saved in chave_ssh.pub. The key fingerprint is: c8:b3:12:eb:21:7f:dc:42:6a:18:3f:19:b5:a9:c5:23 id@shell The key's randomart image is: +--[ RSA 4090]----+ | | | | | | | ... | | .o+oS | | . EoBo | | .++X.o | | .+Bo+ . | | .oo . | +-----------------+
No final serão criado 2 ficheiros sendo um deles para entrega pública e o outro exclusivamente para uso privado do dono da chave que será usado para estabelecer ligação à chave publica quando usada por terceiros.
Chave privada: chave_ssh Chave pública: chave_ssh.pub
Para mais detalhes de como alterar a criação do certificado basta digitar na linha de comandos:
ssh-keygen --help man ssh-keygen
Tinc vpn
Onde se lê cmsv representa o nome/hostname do computador utilizado:
mkdir -p /etc/tinc/cmsv cd /etc/tinc/cmsv/ tincd -n cmsv -K
Generating 2048 bits keys: .......+++ p .....+++ q Done. Please enter a file to save private RSA key to [/etc/tinc/cmsv/rsa_key.priv]: Please enter a file to save public RSA key to [/etc/tinc/cmsv/rsa_key.pub]:
Ou para gerar um certificado mais forte e seguro:
tincd -n cmsv -K --generate-keys=4096
Para mais detalhes de como alterar a criação do certificado basta digitar na linha de comandos:
tincd --h
Java keytool
Utilizando o aplicativo Java JDK (and JRE) da SUN podemos gerar um certificado de criptografia da seguinte forma utilizando a sua keytool e executar o seguinte comando:
keytool -keystore mySrvKeystore -genkey -keyalg RSA -alias mycert
Caso o comando keytool não esteja disponível pode ser localizado da seguinte forma:
find /opt/sun-jdk* -iname keytool
ou
locate keytool
A keytool fará perguntas sobre vários tipos de informação e pedirá uma senha secreta á escolha do utilizador que não deverá ser esquecida.
Openpgp
Certificado openpgp para criptografia em ficheiros ou serviços como email e ou assinatura em ficheiros pessoais.
gpg --cert-digest-algo=SHA256
ou (recomendado)
gpg --cert-digest-algo=SHA256 --default-preference-list="h10 h8 h9 h11 s9 s8 s7 s3 z2 z3 z1 z0" --gen-key
Devemos escolher o tipo de chave. Recomenda-se rsa.
Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only)
Chaves identificadas como (sign only) não podem ser usadas para encriptar informação. Servem apenas para certificar e identificar o seu autor.
Tamanho da chave em bits sendo 4096 o recomendado.
What keysize do you want? (2048)
Devemos escolher o número de dias que pretendemos que a chave seja válida ou não expire confirmando com a tecla y a data de expiração.
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)
Se for escolhido 0; a chave nunca expirará e para a invalidar quando pretender será necessário um certificado de revogação.
Ser á necessário ou nome, email e comentário opcional. O nome e email não tem de ser real. Para encriptar email com openpgp deve-se inserir o endereço de email que será realmente utilizado no campo “Email address”.
You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Político (fdp) <lixando@portugal.pt>"
Real name: Politico Português Email address: lixando@portugal.pt Comment: Mais para mim, menos para o resto
Devemos prosseguir como pretendemos.
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
Neste próximo passo necessitamos de palavra chave à nossa escolha:
You need a Passphrase to protect your secret key. Enter passphrase:
Recomenda-se que durante este próximo passo se faça bastante actividade no computador para ajudar a gerar o certificado de forma mais aleatória possível.
We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy.
Exemplo final:
gpg: /cmsv/.gnupg/trustdb.gpg: trustdb created
gpg: key 88AB9C87 marked as ultimately trusted
public and secret key created and signed.
gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2014-07-16
pub 2048R/88AB9C87 2014-07-11 [expires: 2014-07-16]
Key fingerprint = 4D14 D2BD C294 184F 8F86 C4C5 CE9E DE8F 88AB 9C87
uid político (fdp) <lixando@portugal.pt>
sub 2048R/9B35CC64 2014-07-11 [expires: 2014-07-16]
Para ver as chaves existentes basta digitar:
gpg --list-keys
Para mais detalhes de como alterar a criação do certificado basta digitar na linha de comandos:
gpg -h man gpg
Verificar certificados
Existem várias ferramentas para verificação de certificados sendo uma delas o net-analyzer/sslscan com os seguintes exemplos:
openssl s_client -connect wirelesspt.net:443 openssl s_client -connect wirelesspt.net:6697 sslscan localhost sslscan | grep accepted sslscan ip:porta sslscan wirelesspt:443 | grep accepted
Para mais opções:
man sslscan
Wirelesspt
Por motivos associados a necessidades de segurança específicos o projecto wirelesspt.net utiliza certificados de criptografia certificados por autoridades de certificação reconhecidas como a globalSign assim como certificados de segurança intencionalmente auto assinados pelo próprio projecto.
Os certificados fornecidos e validados por autoridades de certificação reconhecidas contam com chaves rsa de 2048 bits e algoritmo sha256 com rsa ou superior. Certificados de segurança auto assinados pelo próprio projecto contam com chaves rsa de 4096 bits e algoritmo sha512 com rsa ou superior. Ambos os tipos de certificados asseguram total privacidade e segurança aos seus utilizadores independentemente de como o software do utilizador reconhece os certificados e os aceita. Certificados auto assinados necessitam de ser aceites e confirmados manualmente pelo software do cliente e em caso de dúvida deve-se contactar um administrador wirelesspt.net.
O projecto wirelesspt.net suporta apenas criptografia tls a partir da versão 1.0 sendo o seu padrão a ultima versão em vigor e todos os certificados utilizados pelo projecto obtém o mais alto nível de segurança A+ atribuído pela sllabs.com sendo o seu nível de segurança de chave 100%.
Certificados ou métodos de segurança inferiores a tls como ssl v1, v2 e v3 não são suportados devido a vulnerabilidades de segurança conhecidas. Todos os utilizadores wirelesspt.net devem assegurar-se que o seu software utiliza apenas segurança baseada em tls.
Links externos
- Analise sllabs.com ao certificado wirelesspt.net
- SSL server test
- SSL Scanner
- Openssl para linux/unix
- Openssl para windows
- Openssl para solaris
- Openssh para linux/unix
- Openssh para windows
- Openpgp para linux/unix
- Gpg4win para windows com interface gráfico
- Tinc vpn para windows e linux
- SSL TLS Deployment & best pratices
- Testando cifras criptográficas
- Autoridade de Certificação de certificados