Aviso: Antes de mergulhar no campo minado de administrar sua própria Autoridade de Certificação, pode ser necessário estudar as implicações de segurança!
Mas, se necessário, continue lendo para obter uma autoridade de certificação rápida e suja que fornecerá https://localhost/
uma mensagem de aviso ...
Crie o seguinte arquivo de texto:
# OpenSSL configuration for Root CA
[ req ]
prompt = no
string_mask = default
# The size of the keys in bits:
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = x509_ext
[ req_distinguished_name ]
# Note that the following are in 'reverse order' to what you'd expect to see.
countryName = gb
organizationName = Test
commonName = Test Root CA
[ x509_ext ]
basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
Salve como root.cnf
e gere a solicitação com:
$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf
Isso criará seu certificado de CA raiz ( root.cer
) e sua chave privada de CA raiz ( root.key
), que você deve manter privada. Ele solicitará uma senha para a chave privada - verifique se você escolhe uma senha forte.
Agora crie um arquivo de configuração para o certificado do servidor:
# OpenSSL configuration for end-entity cert
[ req ]
prompt = no
string_mask = default
# The size of the keys in bits:
default_bits = 2048
distinguished_name = req_distinguished_name
x509_extensions = x509_ext
[ req_distinguished_name ]
# Note that the following are in 'reverse order' to what you'd expect to see.
countryName = gb
organizationName = Test
commonName = localhost
[ x509_ext ]
keyUsage=critical,digitalSignature,keyAgreement
subjectAltName = @alt_names
# Multiple Alternate Names are possible
[alt_names]
DNS.1 = localhost
# DNS.2 = altName.example.com
Salve-o como server.cnf
e gere a solicitação com:
openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf
O acima irá gerar outra chave privada ( server.key
) que você deve proteger. Nesse caso, a chave não é protegida por senha, mas você pode adicionar uma senha removendo a -nodes
opção.
Por fim, assine a solicitação com sua nova CA raiz e extensões do server.cnf
arquivo (por conveniência):
$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext
Nota: escolha qualquer número aleatório para a -set_serial
opção.
Ele solicitará a senha digitada quando você gerou a CA raiz.
Um certificado de servidor ( server.cer
) será gerado.
Agora, adicione o certificado da CA raiz ( root.cer
) ao armazenamento de âncora confiável do Firefox e execute um teste com:
$ sudo openssl s_server -key server.key -cert server.cer -accept 443 -www
Nota: Você pode obter erros se já tiver um servidor em execução na porta 443. Nesse caso, pare o servidor em execução ou altere o número da porta acima para outra porta não utilizada.
Ao navegar para https://localhost
(ou https://localhost:<port>
se você alterou o número da porta acima) com o Firefox, agora você não vê nenhum aviso e recebe uma lista de códigos que sua instalação do OpenSSL pode oferecer.
Quando estiver satisfeito com os resultados, adicione server.key
e server.cer
ao seu servidor da Web e configure-o de acordo.