第一次设置SSL,教程没有太大的帮助

这是我第一次尝试为一个站点设置一个ssl,我在一个已经托pipe了3个其他站点的服务器上运行它。

我正在运行apache2。 并安装了一个ssl.conf页面。

ssl.conf有以下设置

 LoadModule ssl_module modules / mod_ssl.so
听443
 AddType应用程序/ x-x509-ca-cert .crt
 AddType应用程序/ x-pkcs7-crl .crl

 <VirtualHost *:443>
     ServerAdmin [email protected]
     DocumentRoot / var / www / html / securesite
     ServerName securesite.com
     ErrorLog日志/ securesite-error_log
     CustomLog日志/ securesite-access_log通用
     SSLEngine上
     SSLCertificateFile /etc/httpd/ssl.crt/securesite.com.crt
     SSLCertificateKeyFile /etc/httpd/ssl.key/server.key
     SSLCertificateChainFile /etc/httpd/ssl.crt/gd_bundle.crt
 </虚拟主机>

当我运行“apachectl configtest”,我没有得到任何错误,但运行“apachectl -k restart”,我得到“httpd没有运行,试图启动”。

我有两个问题

1)在我为443定义虚拟主机的方式中是否有错误? 我的其余部分指向<VirtualHost *:80>。 当我注释掉上面的条目时,apache运行良好。

2)是否需要设置从80端口到安全站点的redirect? 因为大多数用户将要去http:或www。 ,我需要将它们发送到https:apache是​​否自动执行此操作? 或者我需要创build一个redirect的条目?

你有没有检查HTTP日志中的错误消息?

尝试注释掉SSLCertificateChainFile,看看是否有帮助。 我运行了很多启用SSL的站点,我从来不需要使用该文件。

如果您尚未这样做,请设置您自己的自签名证书进行testing。 http://www.akadia.com/services/ssh_test_certificate.html

如果您在端口80和443上运行securesite.com,那么是的,如果您要强制客户端使用https,则需要执行某种types的redirect。 您可以使用.htaccess文件将某些页面,目录或整个网站导向为使用https。

如果我有一个干净的服务器,我需要在这些上安装SSL是我通常采取的步骤。

首先我在/etc/httpd/conf.d/ssl.conf中编辑SSLCipherSuite和SSLProtocol来加强安装。

/etc/httpd/conf.d/ssl.conf

SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM SSLProtocol -ALL +SSLv3 +TLSv1 

然后我创build/etc/httpd/conf/ssl.crt,/etc/httpd/conf/ssl.key,/etc/httpd/conf/ssl.csr文件夹。 你可以把这些放在现有的/ etc / pki / tls文件夹中,但是我喜欢把我的网站的东西与服务器上可能发生的任何其他CA的东西分开。 我把钥匙和证书以及可选的csr放到我创build的文件夹中。 如果有任何中间证书,我将它们链接到一个文件中,并将其作为intermediate.pem放在/etc/httpd/conf/ssl.crt文件夹中。

我通常将每个虚拟主机的configuration保存在/etc/httpd/conf.d/vhosts/下的自己的文件中。 (确保你的主apacheconfiguration设置为从这个文件夹的任何* .conf文件中读取)。 所以我可能有一个名为/etc/httpd/conf.d/vhosts/www.mysite.com.conf的文件。 这个文件将包含两个指令,一个用于端口80,另一个用于端口443.如果我希望每个人都使用SSL,你可以像这个例子中那样做一个mod重写。

/etc/httpd/conf.d/vhosts/www.mysite.com.conf

 [VirtualHost 192.168.0.1:80] ServerName www.mysite.com ServerAlias mysite.com RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [/VirtualHost] [VirtualHost 192.168.0.1:443] ServerName www.mysite.com ServerAlias mysite.com DocumentRoot /var/www/vhosts/www.mysite.com/httpdocs SSLEngine on SSLVerifyClient none SSLCertificateFile /etc/httpd/conf/ssl.crt/www.mysite.com.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key SSLCACertificateFile /etc/httpd/conf/ssl.crt/intermediate.pem ErrorLog /var/log/vhosts/www.mysite.com-error_log CustomLog /var/log/vhosts/www.mysite.com-access_log common [/VirtualHost] 

即使在试图将它们读为html并且没有正确显示的pre标签中,也用<>来replace[]。

所以直接回答你的问题:

1)我从来没有见过或使用SSLCertificateChainFile我假设它的中间证书包,我会使用SSLCACertificateFIle。

2)如果你想强制每个人都使用HTTPS,你需要做一个redirect或者一个mod重写。 Apache很乐意同时承载HTTP和HTTPS内容,对于大多数人来说,这是他们想要的。 如果你在你的主页上使用HTTPS,那么它可能是一个主要的PITA,它可以让你把所有的外部资源都转移到你的网站上,这些HTTPS会向你的用户发出警告信息。 如果这对你来说不是问题,那么通过任何方式都可以使用HTTPS。