Nesta continuação, vamos explicar a criação do Certificado SSL para um domínio e seus subdomínios.
Na 1ª Parte desta Nota Técnica, expliquei a criação das credenciais para uma Autoridade Certificadora poder gerar os arquivos de certificados do domínio. Estes arquivos, Chave Privada e Informações da Certificadora, foram salvos na pasta “CA” do nosso diretório de configuração do XAMPP.
XamppConfig
└── ssl
└── CA
├── certificadora.key
└── certificadora.pem
├── httpd-vhosts.conf
└── httpd-vhosts-ssl.conf
Este diretório XamppConfig é de fácil acesso e dentro da minha pasta de trabalhos. Ele não está no diretório de instalação do XAMPP, para deixar bem claro isto.
Muito bem, vamos iniciar os passos para a criação de um certificado para um domínio chamado: www.meudominio.local
Criação do arquivo CSR e Chave Privada do domínio
Para a criação do certificado SSL para o servidor Apache, é necessário três arquivos:
- Um arquivo com a extensão
.csr
, acrônimo para Certificate Signing Request ; - Uma chave pública do seu domínio, e finalmente;
- Um arquivo texto com a configuração de dominio e subdominio.
No comando abaixo, irei criar os dois arquivos, acrescentando as Informações do Domínio no modo Não Interativo.
sudo openssl req -new -nodes -out meudominio.local.csr -newkey rsa:2048 -keyout meudominio.local.key -subj "/C=BR/ST=RJ/L=Rio de Janeiro/O=Vinicius Braga/OU=Web Dev/CN=meudominio"
Como explicado na 1ª Parte desta Nota Técnica, você pode customizar as informações respeitando o que elas devem representar, mas deve atentar para o Nome Comum (Common Name/CN), ele deve ser somente o nome principal do domínio.
Depois de rodar o comando anterior, são criados dois arquivos na nossa pasta ssl
: meudominio.local.csr e meudominio.local.key
Antes de criarmos o certificado, falta ainda criarmos um arquivo de configuração especial que irá nos ajudar a definir o nosso certificado para o domínio e subdomínios. Vamos colocar as informações abaixo neste arquivo e dar o nome do arquivo de meudominio.v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = meudominio.local
DNS.2 = *.meudominio.local
Neste arquivo de configuração só precisamos ficar atentos em colocar o nome principal do domínio, neste exemplo, “meudominio”. Observe que o segundo DNS libera o Certificado cobrir todos os subdominios, caso a gente precise dele. Bem, agora podemos rodar o comando de criação do certificado:
sudo openssl x509 -req -in meudominio.local.csr -CA CA/certificadora.pem -CAkey CA/certificadora.key -CAcreateserial -out meudominio.local.crt -days 1825 -sha256 -extfile meudominio.v3.ext
E com o resultado do comando, nós obtemos o certificado e a nossa pasta fica assim:
XamppConfig
└── ssl
├── meudominio.local.csr
├── meudominio.local.crt
├── meudominio.local.key
└── CA
├── certificadora.key
└── certificadora.pem
├── httpd-vhosts.conf
└── httpd-vhosts-ssl.conf
Agora precisamos copiar o arquivo .crt
e .key
para as pastas do Xampp
sudo cp meudominio.local.crt /opt/lampp/etc/ssl.crt/
sudo cp meudominio.local.key /opt/lampp/etc/ssl.key/
E finalmente criar o config do VHost com SSL como no exemplo abaixo:
<VirtualHost meudominio.local:443>
ServerName meudominio.local
DocumentRoot "/home/nomeusuario//Workspace/meudominio/site"
ErrorLog "/home/nomeusuario/Workspace/XamppConfig/logs/meudominio-local-error_log"
CustomLog "/home/nomeusuario/Workspace/XamppConfig/logs/meudominio-local-access_log" common
<Directory "/home/nomeusuario/Workspace/meudominio/site">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
SSLEngine on
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLCertificateFile "/opt/lampp/etc/ssl.crt/meudominio.local.crt"
SSLCertificateKeyFile "/opt/lampp/etc/ssl.key/meudominio.local.key"
SSLOptions +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
</VirtualHost>
Sobre a “config” deste VHost, lembre-se de escrever corretamente o caminho (Path) até a pastas do site. E você deve perceber que eu não instalo o site dentro do servidor do Xampp, gosto de organizar isto num diretório de trabalho.
Conclusão Final
Certamente tem mais detalhes até a etapa de funcionamento pleno, como configurar o carregamento do “httpd-vhosts-ssl.conf” e outros passos. Mas isto é fora do escopo principal da explicação desta Nota Técnica. De qualquer forma, está tudo aqui.
Deixe o seu comentário e sugestão caso tenha sentido falta de algum detalhe, até a próxima.
- 1ª Parte do Tutorial – Criação da Autoridade Certificadora.
- 2ª Parte do Tutorial – Certificado de domínio e subdomínio.