Estou escrevendo um script bash que irá gerar um certificado raiz e um certificado de servidor. A geração do certificado raiz funciona, mas o certificado do servidor solicita uma entrada - no entanto, como este é um script bash, ele deve usar apenas os valores da configuração.
rootCA_openssl.cnf
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[ req_distinguished_name ]
countryName = NO
countryName_default = NO
stateOrProvinceName = Nordland
stateOrProvinceName_default = Nordland
organizationName = Lumina Ventures
organizationName_default = Lumina Ventures
commonName = Lumina Ventures Root CA 1
commonName_default = Lumina Ventures CA 1
[ v3_req ]
basicConstraints = CA:true
keyUsage = critical, keyCertSign
Genrsa
openssl genrsa -aes256 -out rootCA.key --passout pass:password 2048
Crie um arquivo CSR (Solicitação de Assinatura de Certificado) para o certificado CA raiz
openssl req -new -key rootCA.key -out rootCA.csr -config rootCA_openssl.cnf --passin pass:password
Gere o arquivo de certificado CA raiz rootCA.pem
openssl x509 -req -in rootCA.csr -sha512 -signkey rootCA.key -out rootCA.pem -days 1095 -extensions v3_req -extfile rootCA_openssl.cnf --passin pass:password
servidor_openssl.cnf
[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[ req_distinguished_name ]
countryName = NO
countryName_default = NO
stateOrProvinceName = Nordland
stateOrProvinceName_default = Nordland
localityName = Lofoten
localityName_default = Lofoten
organizationName = Lumina Ventures
organizationName_default = Lumina Ventures
commonName = 80.50.50.20
commonName_default = 80.50.50.20
commonName_max = 64
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
IP.1 = 80.50.50.20
Digite uma senha quando solicitado
openssl genrsa -aes256 -out server.key --passout pass:password 2048
req (para aqui)
openssl req -new -key server.key -out server.csr -config server_openssl.cnf --passin pass:password
Isso me leva a:
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.
-----
NO [NO]:
Como posso usar os valores padrão na configuração do servidor? Tentei adicionar prompt = no
à [ req ]
seção, mas ocorreu um novo erro:
Error making certificate request
4057E170FB7C0000:error:04000067:object identifier routines:OBJ_txt2obj:unknown object name:../crypto/objects/obj_dat.c:376:
4057E170FB7C0000:error:05800077:x509 certificate routines:X509_NAME_ENTRY_create_by_txt:invalid field name:../crypto/x509/x509name.c:252:name=countryName_default
A última coisa que farei é gerar o certificado, porém estou preso no req do openssl
openssl x509 -req -in server.csr -sha256 -CA rootCA.pem -CAkey rootCA.key -out server.pem -days 1095 -extensions v3_req -extfile server_openssl.cnf
Não faz sentido adicionar
_default
valores quandoprompt = no
é usado enquanto você está definindo os valores no arquivo de configuração. Esses padrões serão usados apenas se o usuário não inserir nada no prompt.Use algo como: