Criar certificado SSL de maneira não interativa [fechado]

28

Quero criar silenciosamente, de maneira não interativa, um certificado SSL. Ou seja, sem ser solicitado a fornecer dados.

A maneira normal de criar o certificado seria:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 \
    -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem 

Eu tentei o seguinte:

openssl genrsa -out server.key 2048
touch openssl.cnf

cat >> openssl.cnf <<EOF
[ req ]
prompt = no
distinguished_name = req_distinguished_name

[ req_distinguished_name ]
C = GB
ST = Test State
L = Test Locality
O = Org Name
OU = Org Unit Name
CN = Common Name
emailAddress = test@email.com
EOF

openssl req -x509 -config openssl.cnf -nodes -days 7300 \
    -signkey server.key -out /etc/ssl/private/pure-ftpd.pem 

Mas ainda recebo uma solicitação de dados.

TheNiceGuy
fonte
11
Você pode fornecer uma explicação ou saída do que está acontecendo, em vez do resultado desejado?
Patrick
Eu obter a ajuda como um Qualquer coisa output- está errado com os parâmetros aqui:openssl req -x509 -config openssl.cnf -nodes -days 7300 -signkey server.key -out /etc/ssl/private/pure-ftpd.pem
TheNiceGuy
É melhor fornecer a saída de erros quando você estiver tendo problemas. Suponho que seu problema seja causado por -signkey. Esta não é uma openssl reqopção válida no meu sistema. A mensagem de erro terá isso como a primeira linha:unknown option -signkey
Patrick
Bem, esse signkey deve dizer ao SSL para usar a chave fornecida como eu sei?
precisa saber é o seguinte
Sua "maneira normal de criar o certificado" não solicita nenhum dado. Você não está querendo que ele produza alguma coisa? Então use 2> /dev/null.
wingedsubmariner

Respostas:

51

O que falta é incluir o assunto do certificado no diretório -subj bandeira. Eu prefiro isso a criar um arquivo de configuração, porque é mais fácil integrar-se a um fluxo de trabalho e não requer limpeza posteriormente.

Chave de uma etapa e geração de RSE:

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

Geração de certificado sem senha, autoassinada em uma etapa:

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

Nenhum desses comandos solicitará nenhum dado.

Veja minha resposta a essa pergunta quase idêntica no Superusuário.

bahamat
fonte
Oh, isso é uma boa solução. Torna os códigos muito menores. Obrigado: D
TheNiceGuy
11
Não modifiquei o arquivo de configuração original, pois achei que seria um substituto para um certificado mais complicado. Algumas configurações que não podem ser representadas com um -subjparâmetro, principalmente quando você acessa extensões v3 e parâmetros subjectAltName.
usar o seguinte comando
11
Você também pode usar -batch(modo não-interativo)
Eran H.
Observe que o primeiro comando parece exigir que a chave exista antes de poder ser executada, onde o segundo comando cria a chave e o certificado automaticamente, porque -subjé um CSR em linha válido básico.
dragon788
@ dragon788 Obrigado por apontar isso. Eu consertei isso.
bahamat 10/01
1

O comando que você está procurando é:

openssl req -new -x509 -config openssl.cnf -nodes -days 7300 -key server.key -out /etc/ssl/private/pure-ftpd.pem

Alterações da sua versão:

  • -new é necessário para gerar qualquer coisa
  • -key usado no lugar de -signkey
robbat2
fonte