Você só poderá seguir esses passos, depois de ter seu "Certificado Digital", emitido pelo uma CA(seja ela registrada ou não), em mãos.
Recebi meu certificado e coloquei na pasta criada para os certificado, verificando com o seguinte comando:
# ls -l /usr/local/apache2/certificado/
1 º Passo - Abrindo o arquivo de configuração:
O arquivo de configuração do Apache2 é o http.conf, porém, se observamos ele, existe uma "aliases" que aponta para o arquivo "/usr/local/apache2/conf/http-ssl.conf", ou seja, tudo que se refere a SSL, está nesse arquivo, o que torna a organização muito melhor.
Pressupondo que seu Apache já esteja funcionando como mostrado anteriormente, vamos configurar ele para funcionar também como HTTPS.
# cd /usr/local/apache2/conf/
# vi http-ssl.conf
2º Passo - Criando um VirtualHost SSL
Todas as configurações desse arquivo são padrões, não sendo necessária alterá-las. Apenas no que se refere a criação de nosso VirtualHost.
Pra quem já mexeu com VirtualHost(porta 80), ira se familiarizar rapidamente, ele é muito parecido, tanto nos comandos como no conceito.
Uma explicação simples seria de que cara VirtualHost SSL(porta 443), que iremos criar, irar apontar para um site(uma URL qualquer), que responde por um IP e tem um diretório onde está seu conteúdo já definido.
Vejamos a estrutura abaixo para melhor compreensão:
...
#Abaixo temos o IP do site, cada Site com SSL irá sair por um único IP.
<VirtualHost 10.10.100.34:443>
# General setup for the virtual host
DocumentRoot "/srv/www/htdocs/radiojustica" #Diretório onde teremos o conteúdo do nosso site
ServerName www.seusite.com.br:443 # O nome pelo qual nosso IP responde, caso não seja um WWW, FTP, XXX, pode se colocar o nome da máquina, ou qualquer outro nome, desde que o IP configurado responda por ele
ServerAdmin suporte@bruno.com.br# E-mail que receberá alertar e informações do SITE
ErrorLog "/usr/local/apache2/logs/seu_site_error_ssl_log" # Arquivo de LOG de ERRO
TransferLog "/usr/local/apache2/logs/seu_site_ssl_access_log" # Arquivo de LOG de ACESSOS
SSLEngine on # ON indica que iremos ativar o uso do SSL
#Parâmetros de criptografia e configurações variadas(padrão para nosso caso)
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
#Nosso Certificado emitido por uma CA(.crt, .pem, .cer, qualquer extensão)
SSLCertificateFile "/usr/local/apache2/conf/certificados/meu_certificado.crt"
#Nossa Chave Privada usada pra gerar nossa requisição para esse certificado
SSLCertificateKeyFile "/usr/local/apache2/conf/certificados/chave_privada.key"
#Para mandar nosso certificado e o caminho para chegar nele para o browser do cliente
#SSLCertificateChainFile "/usr/local/apache2/conf/certificados/certicado_cliente.pem"
As configurações abaixo para requerer autenticação de cliente, opções de diretório, tipo de arquivo, tipo do log e outros não será alterada para esse caso.(vide abaixo o padrão)
#SSLVerifyClient require
#SSLVerifyDepth 10
#<Location />
#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
# and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \
# and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \
# and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \
# and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \
# or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
#</Location>
#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache2/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/usr/local/apache2/logs/ssl_request_log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
Podemos ter vários Virtuais Hosts, basta adicionamos ao fim deste uma nova estrutura dessa com novos dados(IP, nome, diretório, certificados, chaves...), e teremos outro site em nosso servidor usando SSL.
Após configurar o arquivo "http-ssl.conf", iremo fazer com que ele seja carregado pelo apache.
Vamos abrir o arquivo de configuração "http.conf" e iremos descomentar a seguinte linha:
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
Pronto, esse arquivo será lido e carregado na nossa inicialização. Nosso site está configurado sendo acesso via SSL.
Agora iremos reiniciar nosso apache, vamos observar que ele irá pedir a senha que usamos na hora que geramos nossa chave privada, entre com a senha e o apache está funcionando com SSL.
Após os testes irei mostrar como automatizar esse processo de inicialização do APACHE para que ele não peça senha.