Aviso: antes de mergulhar no campo minado de sua própria Autoridade de Certificação, talvez seja necessário estudar as implicações de segurança!
Mas se você precisar, leia uma CA rápida e suja que lhe dará https://localhost/
sem 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
Salvar como root.cnf
, em seguida, gerar 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 da CA raiz ( root.key
) que você deve manter em sigilo. Ele solicitará uma senha para a chave privada - certifique-se de escolher uma senha strong.
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 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 opção -nodes
.
Por fim, assine a solicitação com sua nova CA raiz e as extensões do arquivo server.cnf
(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 opção -set_serial
.
Ele pedirá a senha que você digitou quando gerou a CA raiz.
Um certificado do servidor ( server.cer
) será gerado.
Agora, adicione o certificado da CA raiz ( root.cer
) ao armazenamento da âncora de confiança 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 verá nenhum aviso e será apresentada uma lista de cifras que a instalação do OpenSSL pode oferecer.
Quando estiver satisfeito com os resultados, adicione o server.key
e o server.cer
ao seu servidor da Web e configure de maneira adequada.