Ao usar o openssl 0.9.8 para criar uma nova chave cert + auto-assinada, há um parâmetro -nodes
que pode ser usado para dizer ao openssl para não criptografar a chave privada que ele cria. Por exemplo:
openssl req -x509 -nodes -days 365 \
-subj '/C=US/ST=Florida/L=Jupiter/CN=test.com' \
-newkey rsa:1024 -keyout mykey.pem -out mycert.pem
Mas com o novo openssl v1.0.1, parece que o parâmetro -nodes
é ignorado. Pelo que posso dizer, a chave privada é sempre criptografada. Estou usando o openssl errado? Existe um parâmetro diferente que eu deveria estar usando em vez disso?
O parâmetro -nodes
está documentado como:
if this option is specified then if a private
key is created it will not be encrypted
Fonte: link
Mais detalhes como solicitado:
Com o openssl 0.9.8, a chave + cert pode ser importada diretamente para outros dispositivos de terceiros que temos que esperam chaves e certificados não criptografados. Isso funciona sem nenhum problema.
Mas ao usar o openssl 1.0.1, esses dispositivos de terceiros reclamam que a chave é inválida. A mensagem de erro exata é:
ERROR: Private key for 'My Cert' does not appear to be a valid
RSA private key in PEM format.
Este é um sistema de código fechado e não fornece detalhes adicionais. O que eu descobri ao brincar com isso hoje é se eu executar a chave privada v1.0.1 através deste comando:
openssl rsa -in mykey.pem -out decryptedkey.pem
... então, nesse ponto, o sistema de terceiros não tem problemas para importar o certificado e a chave descriptografada. E quando eu executo este comando na chave v1.0.1:
openssl rsa -text -in mykey.pem
... o texto da chave privada não é o mesmo que está no arquivo v1.0.1 mykey.pem. É por isso que achei que a chave estava de alguma forma criptografada.