编辑:最好在 Server Fault 上问这个问题,但我的声誉不允许我发布超过 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
同样,需要 conf 文件,因为 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
文件,这对我来说似乎是最合乎逻辑的事情,以及 server.key
SSLCertificateKeyFile
的文件.SSLCertificateChainFile
似乎要一个 .crt
文件,所以它可能是唯一的其他 .crt
我拥有的文件,ca.san.crt
,但我真的不确定这一点。有人有什么提示吗?
感谢您花时间阅读本文。
解决方案
对于这种特殊情况,由于我使用的是自定义证书,
SSLCertificateChainFile
没有多大意义(请参阅下面的标记答案)。因此,您只需为两个指令指定相同的证书文件 SSLCertificateFile
和 SSLCertificateChainFile
.在使用 Apache 之前,您只需要做一件事
SSL*
指令。 Apache 默认禁用 SSL,因此您需要使用 sudo a2enmod ssl
启用它,或者在重新启动 Apache 时,您会收到一条错误消息,提示您可能在 vHosts 文件中拼错了某些内容。完成此操作并重新启动服务器后,您可以使用 HTTPS 连接到 vHost。您的浏览器会告诉您证书无效,因为它是自签名的,但您的连接将是安全的。
最佳答案
I want some pages that require passwords on my website to be secure
只是一个注释。作为最佳实践,应使用 SSL 保护整个网站。这里有一篇博文解释了为什么认证页面上的 SSL 是不够的:Securing your ASP.NET MVC 4 App and the new AllowAnonymous Attribute (虽然和ASP MVC有关,但其他平台也受影响)。
but I can't seem to figure out what is the SSLCertificateChainFile
我认为,它是一个包含中间 CA 证书的 PKCS#7 容器。使用自签名证书,没有其他证书,因此(对不起,我不是 Apache 专家)这个文件可能是:
我会使用第 1 步,将相同的证书传递给
SSLCertificateFile
和 SSLCertificateChainFile
参数。
关于ssl - 自签名证书中要包含哪个证书链文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26873612/