Neste exemplo utilizaremos os sites com números pares: "www.site2.com" e "www.site4.com".
Os pacotes instalados juntamente com o
Apache, anteriormente, possuem papéis essenciais.
O "mod_ssl" habilita o Apache a utilizar conexão segura (HTTPS) e o OpenSSL gera os certificados de chave pública e privada.
Não abordaremos a geração de chaves públicas e privadas, pois utilizaremos os arquivos gerados no momento da instalação do OpenSSL e mod_ssl.
As CA's possuem procedimentos para geração destas chaves, como a encontrada em:
Você pode utilizar chaves diferentes para cada site, inclusive certificados válidos assinados por diversas organizações, como Certisign, Verisign, SERASA, entre outros.
Para isto, basta alterar (dentro da sessão de cada site) a instrução SSLCertificateFile e SSLCertificateKeyFile.
Se o certificado for assinado por uma CA, então a instrução SSLCACertificateFile deve ser especificada.
Em seguida, edite o arquivo
/etc/httpd/conf.d/ssl.conf e certifique-se que a linha abaixo exista (fora da sessão VirtualHost) e que não esteja comentada:
NameVirtualHost *:443
Uma seção, como abaixo, deve ser inserida no arquivo para cada site hospedado no servidor que utilize SSL, adaptando cada linha de acordo com o nome do site (atenção ao "DocumentRoot" que é diferente para cada site).
Neste exemplo, temos os sites "www.site2.com" e "www.site4.com" configurados para utilizar SSL:
<VirtualHost _default_:443>
DocumentRoot "/var/www/site2.com"
ServerName www.site2.com:443
ErrorLog /var/log/httpd/site2.com-ssl_error_log
TransferLog /var/log/httpd/site2.com-ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
# Caminho para o certificado
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
# Caminho para a chave privada utilizada para a geração do certificado
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
# Caminho para o certificado/cadeia da CA que assinou o certificado (apenas em caso de certificados válidos)
SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
<VirtualHost _default_:443>
DocumentRoot "/var/www/site4.com"
ServerName www.site4.com:443
ErrorLog /var/log/httpd/site4.com-ssl_error_log
TransferLog /var/log/httpd/site4.com-ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
# Caminho para o certificado
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
# Caminho para a chave privada utilizada para a geração do certificado
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
# Caminho para o certificado/cadeia da CA que assinou o certificado (apenas em caso de certificados válidos)
SSLCACertificateFile /etc/pki/tls/certs/ca-bundle.crt
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
Como temos mais que um site utilizando SSL, pode-se utilizar um certificado diferente para cada site, basta gerá-los e alocá-los devidamente.
Verifique se tudo está correto utilizando o comando:
# httpd -S
A saída deverá ser como abaixo:
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80 is a NameVirtualHost
default server site1.com (/etc/httpd/conf/httpd.conf:1012)
port 80 namevhost site1.com (/etc/httpd/conf/httpd.conf:1012)
port 80 namevhost site3.com (/etc/httpd/conf/httpd.conf:1030)
*:443 is a NameVirtualHost
default server www.site2.com (/etc/httpd/conf.d/ssl.conf:17)
port 443 namevhost www.site2.com (/etc/httpd/conf.d/ssl.conf:17)
port 443 namevhost www.site4.com (/etc/httpd/conf.d/ssl.conf:54)
Syntax OK
O site default a ser apresentado (se acessado por
https://IP ou hostname do servidor hospedeiro) será o "site2.com".
Isto indica que a sintaxe da configuração SSL está correta e o Apache está pronto para assumi-la também.
Recarregue o Apache, com:
# service httpd reload
Ou:
# /etc/init.d/httpd reload
Abra seu navegador favorito e digite o nome de um dos sites ("www.site2.com" ou "www.site4.com") precedido de
https://, a mensagem de certificado inválido será exibida e assim que aceita o conteúdo apresentado, será o referente ao site que você solicitou.
Fontes