Admin Linux - Criar Certificados SSL

Fundo TLS e SSL

TLS é o novo padrão para segurança de camada de soquete, procedendo de SSL. O TLS oferece melhores padrões de criptografia com outros recursos de wrapper de protocolo e segurança que avançam o SSL. Freqüentemente, os termos TLS e SSL são usados ​​alternadamente. No entanto, como um administrador profissional do CentOS, é importante observar as diferenças e a história que separa cada um.

SSL vai até a versão 3.0. SSL foi desenvolvido e promovido como um padrão da indústria sob a Netscape. Depois que o Netscape foi comprado pela AOL (um ISP popular nos anos 90 também conhecido como America Online), a AOL nunca realmente promoveu a mudança necessária para melhorias de segurança no SSL.

Na versão 3.1, a tecnologia SSL mudou para os padrões de sistemas abertos e foi alterada para TLS . Como os direitos autorais sobre SSL ainda eram propriedade da AOL, um novo termo foi cunhado:TLS - Transport Layer Security. Portanto, é importante reconhecer que o TLS é de fato diferente do SSL . Especialmente porque as tecnologias SSL mais antigas têm problemas de segurança conhecidos e algumas são consideradas obsoletas hoje.

Note- Este tutorial usará o termo TLS ao falar de tecnologias 3.1 e superior. Em seguida, SSL ao comentar específico para tecnologias SSL 3.0 e inferiores.

Controle de versão SSL vs TLS

A tabela a seguir mostra como o controle de versão de TLS e SSL se relacionaria um com o outro. Eu ouvi algumas pessoas falarem em termos de SSL versão 3.2. No entanto, eles provavelmente aprenderam a terminologia lendo um blog. Como um administrador profissional, sempre queremos usar a terminologia padrão. Portanto, ao falar, SSL deve ser uma referência às tecnologias anteriores. Coisas simples podem fazer um candidato a emprego CentOS parecer um CS Major experiente.

TLS SSL
- 3,0
1.0 3,1
1,1 3,2
1,2 3,3

O TLS desempenha duas funções principais importantes para os usuários da Internet hoje: uma, verifica quem é uma parte, conhecida comoauthentication. Dois, ofereceend-to-end encryption na camada de transporte para protocolos de nível superior que não possuem esse recurso nativo (ftp, http, protocolos de e-mail e mais).

O primeiro, verifica quem é uma das partes e é importante para a segurança como criptografia ponta a ponta. Se um consumidor tiver uma conexão criptografada com um site que não está autorizado a receber pagamentos, os dados financeiros ainda estarão em risco. Isso é o que todo site de phishing deixará de ter:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.

Existem apenas dois métodos para contornar a falta de um certificado assinado corretamente: enganar o usuário para permitir a confiança de um navegador da web para um certificado autoassinado ou esperar que o usuário não tenha experiência em tecnologia e não saiba a importância de um certificado confiável Autoridade (ou CA).

Neste tutorial, usaremos o que é conhecido como certificado autoassinado . Isso significa que, sem fornecer explicitamente a esse certificado o status de confiável em todos os navegadores da Web que visitam o site, um erro será exibido desencorajando os usuários de visitar o site. Em seguida, fará com que o usuário salte algumas ações antes de acessar um site com um certificado autoassinado. Lembre-se, por uma questão de segurança, isso é uma coisa boa.

Instalar e configurar o openssl

openssl é o padrão para implementações de código aberto de TLS. O openssl é usado em sistemas como Linux, distribuições BSD, OS X e até suporta Windows.

O openssl é importante, pois fornece segurança da camada de transporte e abstrai a programação detalhada de autenticação e criptografia ponta a ponta para um desenvolvedor. É por isso que o openssl é usado com quase todos os aplicativos de código aberto que usam TLS. Ele também é instalado por padrão em todas as versões modernas do Linux.

Por padrão, o openssl deve ser instalado no CentOS a partir da versão 5 em diante. Só para garantir, vamos tentar instalar o openssl via YUM. Basta executar install, pois o YUM é inteligente o suficiente para nos informar se um pacote já está instalado. Se estivermos executando uma versão mais antiga do CentOS por razões de compatibilidade, fazer uma instalação yum -y garantirá que o openssl seja atualizado contra a vulnerabilidade de sangramento semi-recente.

Ao executar o instalador, verificou-se que, na verdade, havia uma atualização para o openssl .

[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for 
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution 
Dependencies Resolved

===============================================================================
=============================================================================== 
 Package                               Arch
 Version                            Repository                        Size 
=============================================================================== 
=============================================================================== 
Updating: 
openssl                               x86_64                          
1:1.0.1e-60.el7_3.1                 updates                           713 k
Updating for dependencies:

Criar certificado autoassinado para OpenLDAP

Este é um método para criar uma autoassinada para nossa instalação anterior do OpenLDAP .

Para criar um Certificado OpenLDAP autoassinado.

openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365

[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem 
-keyout /etc/openldap/certs/vmnet.pem -days 365 
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
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) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#

Agora nossos certificados OpenLDAP devem ser colocados em / etc / openldap / certs /

[root@centos]# ls /etc/openldap/certs/*.pem 
/etc/openldap/certs/vmnetcert.pem  /etc/openldap/certs/vmnetkey.pem
[root@centos]#

Como você pode ver, temos o certificado e a chave instalados nos diretórios / etc / openldap / certs / . Finalmente, precisamos alterar as permissões de cada um, uma vez que atualmente são propriedade do usuário root.

[root@centos]# chown -R  ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem 
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#

Criar certificado autoassinado para Apache Web Server

Neste tutorial, assumiremos que o Apache já está instalado. Instalamos o Apache em outro tutorial (configuração do Firewall CentOS) e iremos para a instalação avançada do Apache para um tutorial futuro. Portanto, se você ainda não instalou o Apache, siga em frente.

Uma vez que o Apache HTTPd pode ser instalado usando as seguintes etapas -

Step 1 - Instale o mod_ssl para o servidor Apache httpd.

Primeiro, precisamos configurar o Apache com mod_ssl. Usar o gerenciador de pacotes YUM é muito simples -

[root@centos]# yum -y install mod_ssl

Em seguida, recarregue seu daemon Apache para garantir que o Apache use a nova configuração.

[root@centos]# systemctl reload httpd

Neste ponto, o Apache está configurado para suportar conexões TLS no host local.

Step 2 - Crie o certificado SSL autoassinado.

Primeiro, vamos configurar nosso diretório de chave TLS privada.

[root@centos]# mkdir /etc/ssl/private 
[root@centos]# chmod 700 /etc/ssl/private/

Note- Certifique-se de que apenas a raiz tenha acesso de leitura / gravação a este diretório. Com o acesso mundial de leitura / gravação, sua chave privada pode ser usada para descriptografar o tráfego detectado.

Gerando o certificado e os arquivos de chave.

[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout 
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt 
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:

[root@centos]#

Note - Você pode usar o endereço IP público do servidor se não tiver um nome de domínio registrado.

Vamos dar uma olhada em nosso certificado -

[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
   Data:
      Version: 3 (0x2)
      Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
   Signature Algorithm: sha256WithRSAEncryption
   Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
   Validity
      Not Before: Feb 24 07:07:55 2017 GMT
      Not After : Feb 24 07:07:55 2018 GMT
   Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
   Subject Public Key Info:
      Public Key Algorithm: rsaEncryption
         Public-Key: (2048 bit)
            Modulus:
               00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
               f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
               57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
               47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
               66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
               31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
               9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
               79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
               e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
               ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
               ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
               e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42: 
               7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
               5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
               c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
               6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
               12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:

Aqui está uma explicação para cada opção que usamos com o comando openssl -

Comando Açao
req -X509 Use o padrão de PKI de gerenciamento de CSR X.509 para gerenciamento de chaves.
-nodos Não proteja nosso certificado com uma senha longa. O Apache deve ser capaz de usar o certificado sem interrupção de uma frase-senha.
dias 2555 Indica a validade do certificado em 7 anos ou 2555 dias. O período de tempo pode ser ajustado conforme necessário.
-newkey rsa: 2048 Especificado para gerar a chave e o certificado usando RSA com 2048 bits de comprimento.

Em seguida, queremos criar um grupo Diffie-Heliman para negociar PFS com clientes.

[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Isso levará de 5 a 15 minutos.

Perfect Forward Secrecy- Usado para proteger os dados da sessão caso a chave privada seja comprometida. Isso irá gerar uma chave usada entre o cliente e o servidor que é única para cada sessão.

Agora, adicione a configuração Perfect Forward Secrecy ao nosso certificado.

[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt

Configure o Apache para usar arquivos de chave e certificado

Estaremos fazendo alterações em /etc/httpd/conf.d/ssl.conf -

Faremos as seguintes alterações em ssl.conf . No entanto, antes de fazermos isso, devemos fazer backup do arquivo original. Ao fazer alterações em um servidor de produção em um editor de texto avançado como vi ou emcas , é uma prática recomendada sempre fazer backup dos arquivos de configuração antes de fazer edições.

[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/

Agora vamos continuar nossas edições depois de copiar uma cópia de trabalho conhecida do ssl.conf para a raiz de nossa pasta pessoal.

  • Locate
  • Edite DocumentRoot e ServerName da seguinte forma.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443

DocumentRooteste é o caminho para o diretório padrão do apache. Nesta pasta deve haver uma página padrão que exibirá uma solicitação HTTP solicitando a página padrão do seu servidor web ou site.

ServerNameé o nome do servidor, que pode ser um endereço IP ou o nome do host do servidor. Para TLS, é uma prática recomendada criar um certificado com um nome de host. Em nosso tutorial OpenLdap, criamos um nome de host de centos no domínio corporativo local: vmnet.local

Agora queremos comentar as seguintes linhas.

SSLProtocol

#   SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect.  Disable SSLv2 access by default:
 ~~~~> #SSLProtocol all -SSLv2
 
#   SSL Cipher Suite:
#   List the ciphers that the client is permitted to negotiate.
#   See the mod_ssl documentation for a complete list.
 ~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

Em seguida, informe ao Apache onde encontrar nosso certificado e par de chave privada / pública.

Especifique o caminho para o nosso arquivo de certificado autoassinado

#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key

Finalmente, precisamos permitir conexões de entrada para https na porta 443.