Evite a solicitação de senha para as chaves e solicita informações de DN

85

Estou usando o seguinte código para gerar chaves:

apt-get -qq -y install openssl;
mkdir -p /etc/apache2/ssl;
openssl genrsa -des3 -out server.key 1024;
openssl req -new -key server.key -out server.csr;
cp server.key server.key.org;
openssl rsa -in server.key.org -out server.key;
openssl x509 -req -days 12000 -in server.csr -signkey server.key -out server.crt;
mv server.crt  /etc/apache2/ssl/cert.pem;
mv server.key  /etc/apache2/ssl/cert.key;
rm -f server.key.orig;
rm -f server.csr

Eu tenho duas perguntas:

  1. Como posso ignorar a solicitação da frase secreta? Seria razoavelmente seguro para mim fazer isso? (como em não deve ser absolutamente tolo como alguém deve ser capaz de hackear o certificado)

  2. Como evito a solicitação do nome do país, organização, etc. Espero poder fornecê-los no prompt de comando (a página do manual mostra apenas as opções de nível superior do OpenSSL)

por jww 27.12.2010 / 18:39

5 respostas

139

Editar: Essa é de longe a minha resposta mais popular, e já faz alguns anos, então adicionei uma variante ECDSA. Se você puder usar o ECDSA, você deve.

Você pode fornecer todas essas informações na linha de comando.

Geração de certificado sem senha autoassinado de uma etapa:

Versão RSA

openssl req \
    -new \
    -newkey rsa:4096 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

Versão do ECDSA

openssl req \
    -new \
    -newkey ec \
    -pkeyopt ec_paramgen_curve:prime256v1 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

Todos os subcomandos openssl têm sua própria página man. Veja man req .

Responda especificamente às suas perguntas e seja mais explícito sobre exatamente quais opções estão em vigor:

  1. A -nodes sinaliza para não criptografar a chave, portanto, você não precisa de uma senha. Você também pode usar o sinalizador -passout arg . Veja PASS PHRASE ARGUMENTS na página openssl(1) man para saber como formatar o argumento.

  2. Usando o sinalizador -subj , você pode especificar o assunto (o exemplo está acima).

por 27.12.2010 / 20:44
8

A opção -passin não faz o truque para você?

Com o file:pathname , você pode estar seguro com as permissões 600 para esse arquivo.

    
por 27.12.2010 / 20:54
3

A resposta aceita precisa de algumas pequenas correções. Linhas de EC:

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

deve ser:

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

No MacOS - OpenSSL 1.0.2f instalado via fermentação, verifiquei a resposta aceita conforme descrito abaixo

  • Para listar as curvas elípticas disponíveis:

    $ openssl ecparam -list_curves
    
  • Para gerar um arquivo de chave:

    $ openssl ecparam -name secp256k1 -out secp256k1.pem
    
  • Para gerar o certificado sem solicitação de senha:

    openssl req \
        -new \
        -newkey ec:secp256k1.pem \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=US/ST=FL/L=Ocala/O=Home/CN=example.com" \
        -keyout server.key \
        -out server.crt
    
  • Para ver o certificado:

    $ openssl x509 -noout -text -in server.crt
    
por 08.06.2016 / 21:28
1

@bahamat tem uma ótima resposta. Infelizmente, algumas versões do openssl lançam um erro ao tentar criar um certificado ECDSA com um comando. O erro é algo como:

routines:EVP_PKEY_CTX_ctrl:invalid operation:pmeth_lib.c:404

Eu estava usando openssl 1.0.1e-fips em CentOS 7 .

A criação do seu certificado com os 3 comandos a seguir parece funcionar:

openssl ecparam -genkey -name prime256v1 -out key.pem
openssl req -new -key key.pem -out csr.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
openssl req -x509 -days 365 -key key.pem -in csr.pem -out certificate.pem
    
por 20.02.2016 / 09:06
0

Tente o seguinte comando:

openssl genrsa -des3 -out user.key -passout pass:foo 1024

A parte de salto é: -passout pass:foo .

    
por 16.01.2014 / 18:16