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.