Usando o OpenSSL para gerar chave de criptografia para usuários do Outlook

1

Um aplicativo da Web privado precisa receber e-mails criptografados de talvez 20 usuários conhecidos. Como posso usar o OpenSSL para gerar um certificado de criptografia válido que os usuários do Outlook podem importar e usar para criptografar e-mails que podem ser descriptografados depois de serem recebidos por um endereço de e-mail conectado ao meu aplicativo?

Para esse fim, comecei a usar o código de @ resposta do logicscope a esta outra postagem , que vou resumir aqui da seguinte forma:

$ openssl genrsa -aes128 -out email.key 2048
$ openssl req -new -key email.key -out email.csr -config email.cnf
$ openssl x509 -req -days 365 -in email.csr -CA ca.crt -CAkey ca.key -set_serial 10 -out email.crt
$ openssl pkcs12 -export -in email.crt -inkey email.key -out email.pfx  

Em que email.cnf é criado antes das etapas anteriores como:

[ req ]
default_bits           = 2048
distinguished_name     = req_distinguished_name
prompt                 = no

[ req_distinguished_name ]
C                      = {Country}
ST                     = {Provice/State}
L                      = {City}
O                      = {Org}
OU                     = {Org Unit}
CN                     = [email protected]
emailAddress           = [email protected]  

O problema é que o código acima não sabe onde procurar ca.crt . Portanto, a linha openssl x509 -req -days 365 -in email.csr -CA ca.crt -CAkey ca.key -set_serial 10 -out email.crt resulta no seguinte:

Signature ok
subject=/C=US/ST=CA/L=MyCity/O=MyOrganization/OU=MyUnit/[email protected]/[email protected]
Error opening CA Certificate ca.crt
140570916620192:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('ca.crt','r')
140570916620192:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:
unable to load certificate

Como posso gerar um ca.crt válido de modo a permitir que usuários do Outlook usem email.pfx para criptografar e-mails que meu aplicativo pode descriptografar após o recebimento? Preciso comprar um certificado? Isso é apenas para um servidor de desenvolvimento no momento. Seria bom ter algo para trabalhar que seja gratuito. Por exemplo, os usuários do Thunderbird podem enviar e-mails criptografados com uma chave GPG que meu aplicativo pode descriptografar.

Meu devbox está executando o Windows 7 e o Outlook 2010.

    
por CodeMed 25.02.2015 / 00:58

1 resposta

1

O script abaixo cria uma autoridade de certificação (CA) e um certificado de email. O certificado de email é assinado pela CA criada. Eu usei o modelo para email.cnf que você forneceu acima. Observe que atualizei a criptografia para chaves RSA de 4096 bits, SHA256 e AES256. Além disso, todos os lugares em que você precisa alterar itens são cercados por < > Ele pedirá as senhas locais ao executar o script.

#!/bin/sh
RSA_size=4096
Certauth_key=ca.key 
Certauth_crt=ca.crt
Key_name=email.key
CSR_name=email.csr
Config_file=email.cnf
Lifespan_in_days=365
Serial_number_CA=<Serial number you want to use>
Serial_number_leaf=<Serial number you want to use>
CRT_name=email.crt
Email_PFX_name=email.p12
Frendily_name=MyEmailKey
Passphrase=<password you want to use>
PasswordPhrase=pass:$Passphrase

echo openssl genrsa -aes256 -out $Certauth_key $RSA_size
openssl genrsa -aes256 -out $Certauth_key $RSA_size

echo openssl req -new -x509 -set_serial $Serial_number_CA -days $Lifespan_in_days -config $Config_file -key $Certauth_key -out $Certauth_crt
openssl req -new -x509 -set_serial $Serial_number_CA -days $Lifespan_in_days -config $Config_file -key $Certauth_key -out $Certauth_crt



echo openssl genrsa -aes256 -out $Key_name $RSA_size
openssl genrsa -aes256 -out $Key_name $RSA_size 

echo openssl req -new -key $Key_name -out $CSR_name -config $Config_file 
openssl req -new -key $Key_name -out $CSR_name -config $Config_file 

echo openssl x509 -req -sha256 -days $Lifespan_in_days -in $CSR_name -CA $Certauth_crt -CAkey $Certauth_key -set_serial $Serial_number_leaf -out $CRT_name -setalias $Frendily_name -clrtrust -addtrust emailProtection -addreject clientAuth -addreject serverAuth -trustout
openssl x509 -req -sha256 -days $Lifespan_in_days -in $CSR_name -CA $Certauth_crt -CAkey $Certauth_key -set_serial $Serial_number_leaf -out $CRT_name -setalias $Frendily_name -clrtrust -addtrust emailProtection -addreject clientAuth -addreject serverAuth -trustout

echo openssl pkcs12 -export -aes256 -in $CRT_name -inkey $Key_name -out $Email_PFX_name -name $Frendily_name -passout $PasswordPhrase
openssl pkcs12 -export -aes256 -in $CRT_name -inkey $Key_name -out $Email_PFX_name -name $Frendily_name -passout $PasswordPhrase 

No Thunderbid, primeiro você precisa importar a CA para suas autoridades confiáveis e, em seguida, importar o certificado de e-mail com seus certificados para assinatura. Isso também é verdadeiro ao tentar enviar uma resposta criptografada a um email assinado, se esse certificado não encadear para uma CA confiável. Portanto, se a outra parte estiver usando o Thunderbird, você precisará enviá-los ao seu ca.crt. Se você estiver criptografando e-mail para outra pessoa, precisará do .crt (qualquer um dos ceramistas da cadeia) antes de receber permissão para enviar uma mensagem. Isso não foi necessário ao responder a um email assinado no Outlook, se você confiar explicitamente no certificado.

Ainda estou recebendo um erro estranho se colocar a chave na caixa Assinatura digital e Criptografia no Thunderbird. Apesar disso, posso enviar mensagens assinadas e criptografadas com outra conta, mas não as duas ao mesmo tempo. Além disso, ao carregar a CA no Thunderbird, ela informa que a CA pode ser usada para assinatura SSL. Em algum momento no futuro, preciso descobrir por que o rótulo diz isso.

Este código foi usado no OpenSSL 1.0.2d 9 de julho de 2015 sob o Cygwin 2.2.1 (0.289 / 5/3) em execução no Windows 10 build 1057. Eu testei isso com uma conta do Gmail usando o Thunderbird (38.8.0) enviando criptografado e assinou mensagens para um serviço de troca hospedado pela Microsoft usando o Outlook 15.0.4.4753.1002.

    
por 04.10.2015 / 12:17