第一次设置 SSL,教程不太有帮助

第一次设置 SSL,教程不太有帮助

这是我第一次尝试为一个站点设置 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。

相关内容