这是我第一次尝试为一个站点设置 SSL,并且我在已经托管其他 3 个站点的服务器上运行它。
我正在运行 apache2.?? 并且安装附带了 ssl.conf 页面。
ssl.conf 具有以下设置
LoadModule ssl_module 模块/mod_ssl.so 收听 443 添加类型应用程序/x-x509-ca-cert.crt 添加类型应用程序/x-pkcs7-crl.crl <虚拟主机 *:443> 服务器管理员[电子邮件保护] DocumentRoot /var/www/html/securesite 服务器名称 securesite.com ErrorLog 日志/securesite-error_log CustomLog 日志/securesite-access_log 常见 SSLEngine 开启 SSL证书文件 /etc/httpd/ssl.crt/securesite.com.crt SSLCertificateKey文件 /etc/httpd/ssl.key/server.key SSL证书链文件 /etc/httpd/ssl.crt/gd_bundle.crt </虚拟主机>
当我运行“apachectl configtest”时,没有收到任何错误,但运行“apachectl -k restart”时,收到“httpd 未运行,正在尝试启动”的错误。
我有两个问题
1) 我为 443 定义虚拟主机的方式是否有错误?我的其余条目指向 <VirtualHost *:80>。当我注释掉上述条目时,apache 运行正常。
2) 我是否需要为安全站点设置从端口 80 的重定向?因为大多数用户将访问 http: 或 www.,而我需要将他们发送到 https:,apache 会自动执行此操作吗?还是我需要创建带有重定向的条目?
答案1
您是否检查过 http 日志中的错误消息?
尝试注释掉 SSLCertificateChainFile 并查看是否有帮助。我运行了很多启用 SSL 的网站,但我从来不需要使用该文件。
如果您还没有这样做,请设置您自己的自签名证书以进行测试。http://www.akadia.com/services/ssh_test_certificate.html
如果您在端口 80 和 443 上运行 securesite.com,那么是的,如果您想强制客户端使用 https,您将需要进行某种类型的重定向。您可以使用 .htaccess 文件将某些页面、目录或整个网站定向到使用 https。
答案2
如果我有一台干净的服务器,我需要安装 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
然后我创建 /etc/httpd/conf/ssl.crt、/etc/httpd/conf/ssl.key、/etc/httpd/conf/ssl.csr 文件夹。您也可以将它们放在现有的 /etc/pki/tls 文件夹中,但我喜欢将我的网站内容与服务器上可能正在进行的任何其他 CA 内容分开。我将密钥和证书以及可选的 csr 放入我创建的文件夹中。如果有任何中间证书,我会将它们链接到一个文件中,并将其作为 middle.pem 放在 /etc/httpd/conf/ssl.crt 文件夹中。
我通常将每个虚拟主机的配置保存在 /etc/httpd/conf.d/vhosts/ 下的各自文件中。(确保您的主 apache 配置设置为从此文件夹读取任何 *.conf 文件)。因此,我可能有一个名为 /etc/httpd/conf.d/vhosts/www.mysite.com.conf 的文件。此文件将包含两个指令,一个用于端口 80,一个用于端口 443。如果我希望每个人都使用 SSL,您可以像本例中一样执行 mod-rewrite。
/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,但无法正确显示。
直接回答你的问题:
1)我从未见过或使用过SSLCertificateChainFile,我假设它是我将使用SSLCACertificateFIle的中间证书包。
2) 如果您想强制每个人都使用 HTTPS,则需要进行重定向或 mod-rewrite。Apache 很乐意同时托管 HTTP 和 HTTPS 内容,对于大多数人来说,这就是他们想要的。将您拉入网站的所有外部资源都设置为 HTTPS 可能是一件非常麻烦的事情,如果您在主页上使用 HTTPS,则会向用户发出警告消息。但是,如果这对您来说不是问题,那么请务必在任何地方使用 HTTPS。