Criação não interativa de solicitações de certificado SSL

15

Existe uma maneira de criar solicitações de certificado SSL especificando todos os parâmetros necessários no comando inicial? Estou escrevendo um painel de controle de servidor da Web baseado em CLI e gostaria de evitar o uso de expect na execução, opensslse possível.

Esta é uma maneira típica de criar uma solicitação de certificado:

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr
Generating a 2048 bit RSA private key
.................................................+++
........................................+++
writing new private key to 'foobar.com.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New Sweden
Locality Name (eg, city) []:Stockholm
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Scandanavian Ventures, Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:foobar.com
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:FooBar

Espero ver algo assim: (exemplo inútil)

$ openssl req -new -newkey rsa:2048 -nodes -sha256 -keyout foobar.com.key -out foobar.com.csr \
-Country US \
-State "New Sweden" \
-Locality Stockholm \
-Organization "Scandanavian Ventures, Inc." \
-CommonName  foobar.com \
-EmailAddress [email protected] \
-Company FooBar

A boa página de manual não tinha nada a dizer sobre o assunto, nem consegui encontrar nada pelo Google. A geração da solicitação de certificado SSL deve ser um processo interativo ou existe alguma maneira de especificar todos os parâmetros em um único comando?

Isso está em uma distribuição Linux derivada do Debian em execução openssl 1.0.1.

dotancohen
fonte
@ceejayoz: Muito bom, obrigado. א) Onde essas opensslbandeiras são documentadas? ב) O que você pesquisou no Google para encontrar isso? Obrigado!
dotancohen
1
Eu pesquisei "CSR gerar script". O -subjparâmetro está documentado (sem muitos detalhes) em openssl.org/docs/apps/req.html .
precisa
Também é possível criar um arquivo de configuração, normalmente chamado openssl.cnf.
sebix

Respostas:

16

você está faltando duas partes:

a linha de assunto, que pode ser chamada como

-subj "/C=US/ST=New Sweden/L=Stockholm /O=.../OU=.../CN=.../emailAddress=..."
  • substituindo ... com valor, X=sendo código X509 ( O RGANIZAÇÃO / O RGANIZAÇÃO U nit / etc ...)

o valor da senha, que pode ser chamado como

-passout pass:client11
-passin  pass:client11
  • que fornece uma senha de saída / entrada

meu chamado para nova chave parece

openssl genrsa -aes256 -out lib/client1.key -passout pass:client11 1024
openssl rsa -in lib/client1.key -passin pass:client11 -out lib/client1-nokey.key

openssl req -new -key lib/client1.key -subj req -new \
    -passin pass:client11 -out lib/client1.csr \
    -subj "/C=US/ST=New Sweden/L=Stockholm/O=.../OU=.../CN=.../emailAddress=..."

(agora que eu vejo, há dois -new...)

Archemar
fonte
2

Marque a -batchopção descrita nos documentos oficiais .

ejetar
fonte
2
Obrigado. Vejo que a opção em lote existe, mas parece não haver explicação de como usá-la.
dotancohen
Por que essa resposta foi reduzida? O lote não é uma solução possível para o problema? Pelo nome, parece que pode ser.
dotancohen
Definitivamente, é a única maneira de fazer isso com a opção -batch, porque não tenho ideia do voto negativo. A declaração "A boa página de manual não tinha nada a dizer sobre o assunto" é falsa, devido à opção "-batch".
ejetar
Voto positivo por mencionar lote, como se eu não o tivesse usado na solução, pode ser útil no futuro.
dotancohen
-1

Anexo ao meu comando openssl regular:

openssl req -x509 -nodes -days 7300 -newkey rsa: 2048 -keyout /etc/ssl/private/key.pem -out /etc/ssl/private/cert.pem

Está linha:

-subj "/C=PE/ST=Lima/L=Lima/O=Acme Inc. /OU=IT Department/CN=acme.com"

Descrição:

  • Nome do país (código de 2 letras) [AU]: PE
  • Nome do estado ou província (nome completo) [Some-State]: Lima
  • Nome da localidade (por exemplo, cidade) []: Lima
  • Nome da organização (por exemplo, empresa) [Internet Widgits Pty Ltd]: Acme Inc.
  • Nome da unidade organizacional (por exemplo, seção) []: Departamento de TI
  • Nome comum (por exemplo, FQDN do servidor ou SEU nome) []: acme.com

Use "/" como separador.

JorgeM
fonte
1
Parece que a resposta aceita já inclui essa informação. Caso contrário, obrigado.
dotancohen