编辑:最好在服务器故障上询问此问题,但我的声誉不会让我发布超过2个链接。 :(
我想要一些要求我网站上的密码安全的页面,所以我按照this创建了自定义SSL证书。我还关注this,因为它解释了如何生成自签名多域证书(subjectAltName
允许我获得example.com和* .example.com的有效证书,我没有找到另一种方法)
所以我不得不混合命令来获得我想要的东西,我认为我所做的一切都很好(虽然我稍后会详细说明以防万一)。
现在,我必须配置Apache以侦听端口443上的查询,并在相应的页面上提供SSL安全性。所以我找到了this。
在端口443上定义VirtualHost侦听时,它说:
<VirtualHost 127.0.0.1:443>
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/something.crt
SSLCertificateKeyFile /etc/apache2/ssl/something.key
SSLCertificateChainFile /etc/apache2/ssl/gd_bundle.crt
...
</VirtualHost>
我想我知道我需要为SSLCertificateFile
和SSLCertificateKeyFile
字段指定哪些文件,但我似乎无法弄清楚SSLCertificateChainFile
是什么。我在Google和Stack Exchange社区搜索时找到的所有东西到目前为止都没有帮助我,所以我在这里要求明确:
我应该为SSLCertificateChainFile
提供哪些文件,如何在需要时创建该文件?
以下是我按照不同链接的说明创建的文件,以及我用来创建它们的命令。
openssl genrsa -des3 -out ca.key 1024
openssl req -new -key ca.key -out ca.san.csr -config /etc/ssl/openssl.cnf
subjectAltName
。我还可以检查openssl req -text -noout -in ca.san.csr
一切顺利。一切都被描述为here。 openssl x509 -req -days 3650 -in ca.san.csr -signkey ca.key -out ca.san.crt -extensions v3_req -extfile /etc/ssl/openssl.cnf
subjectAltNames
。openssl genrsa -out server.key 1024
openssl req -new -key server.key -out server.san.csr -config /etc/ssl/openssl.cnf
openssl x509 -days 3650 -CA ca.san.crt -CAkey ca.key -set_serial 01 -in server.san.csr -req -out server.san.crt
对于SSLCertificateFile
,我以为我会提供server.san.crt
文件,这对我来说似乎是最合乎逻辑的事情,以及{{1}的server.key
文件}}。
SSLCertificateKeyFile
似乎要求SSLCertificateChainFile
文件,因此它可能是我拥有的唯一其他.crt
文件.crt
,但我真的不确定。
有人有提示吗?
感谢您抽出宝贵时间阅读本文。
解决方案
对于这种特殊情况,由于我使用的是自定义证书,ca.san.crt
没有多大意义(请参阅下面的明确答案)。因此,您只需为两个指令SSLCertificateChainFile
和SSLCertificateFile
指定相同的证书文件
在使用SSLCertificateChainFile
指令之前,只需要对Apache做一件事。默认情况下,在Apache上禁用SSL,因此您需要使用SSL*
启用它,或者在重新启动Apache时,您将收到一条错误消息,指出您的vHosts文件中可能存在错误信息。
完成此操作并重新启动服务器后,您可以使用HTTPS连接vHosts。
答案 0 :(得分:9)
只是一张纸条。作为最佳实践,整个网站应使用SSL进行保护。这篇博文解释了身份验证页面上的SSL不足的原因:Securing your ASP.NET MVC 4 App and the new AllowAnonymous Attribute(虽然它与ASP MVC有关,但其他平台也会受到影响)。我想要一些要求我网站上的密码安全的网页
但我似乎无法弄清楚什么是SSLCertificateChainFile
我认为,它是一个包含中间CA证书的PKCS#7容器。使用自签名证书,没有其他证书,因此(抱歉,我不是Apache专家)这个文件可能是:
我会使用第1步,将相同的证书传递给SSLCertificateFile
和SSLCertificateChainFile
个参数。
答案 1 :(得分:1)
如果使用的是自签名证书,则证书链中没有证书颁发机构或其他证书。因此,只需不在SSLCertificateChainFile
部分中包含<VirtualHost>
。