A maneira correta de implementar o SSL no host local

7

Alguém poderia sugerir uma maneira moderna de gerar certificados autoassinados para serem implementados no host local, o que seria aceito pelo Chrome e Mozilla?

Eu tentei a geração openssl, no entanto a Mozilla reclama que o emissor não é confiável.

Centos 7, nginx

    
por Tarlan Mammadzada 30.07.2017 / 20:30

1 resposta

7

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.

    
por 30.07.2017 / 23:13