首页 文章

哪个证书链文件包含自签名证书?

提问于
浏览
15

EDIT : 可能最好在服务器故障上询问此问题,但我的声誉不会让我发布超过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>

我想我知道我需要为 SSLCertificateFileSSLCertificateKeyFile 字段指定哪些文件,但我似乎无法弄清 SSLCertificateChainFile 是什么 . 我在Google和Stack Exchange社区搜索时找到的所有东西到目前为止都没有帮助我,所以我在这里问清楚:

What file should I provide for SSLCertificateChainFile ,如何在需要时创建它?


以下是我按照不同链接的说明创建的文件,以及我用来创建它们的命令 .

  • 证书颁发机构密钥(ca.key): openssl genrsa -des3 -out ca.key 1024

  • 密钥证书(ca.san.csr): 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 .

  • 证书的创建和签名(ca.san.crt): 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 在其中定义 .

  • 服务器密钥(server.key): openssl genrsa -out server.key 1024

  • 密钥证书(server.san.csr): openssl req -new -key server.key -out server.san.csr -config /etc/ssl/openssl.cnf

  • 服务器证书(server.san.crt): 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 文件,这对我来说似乎是最合乎逻辑的,以及 SSLCertificateKeyFileserver.key 文件 .
SSLCertificateChainFile 似乎要求 .crt 文件,所以它可能是我唯一的其他 .crt 文件, ca.san.crt ,但我真的不确定这个 .

Does anybody have some hint ?
感谢您抽出宝贵时间阅读本文 .


Solution
对于这种特殊情况,由于我使用的是自定义证书, SSLCertificateChainFile 没有多大意义(请参阅下面的标记答案) . 因此,您只需为两个指令 SSLCertificateFileSSLCertificateChainFile 指定相同的证书文件 .
在使用 SSL* 指令之前,只需要对Apache做一件事 . 默认情况下,在Apache上禁用SSL,因此您需要使用 sudo a2enmod ssl 启用它,或者在重新启动Apache时,您将收到一条错误消息,指出您的vHosts文件中可能存在错误 .
完成此操作并重新启动服务器后,您可以使用HTTPS连接vHosts . 您的浏览器会告诉您证书无效,因为它是自签名的,但您的连接是安全的 .

1 回答

  • 9

    我想要一些要求我网站上的密码安全的页面

    只是一张纸条 . 作为最佳实践,整个网站应使用SSL进行保护 . 这是一篇博客文章,解释了身份验证页面上的SSL不足的原因:Securing your ASP.NET MVC 4 App and the new AllowAnonymous Attribute(虽然它与ASP MVC有关,但其他平台也受到影响) .

    但我似乎无法弄清楚什么是SSLCertificateChainFile

    我认为,它是一个包含中间CA证书的PKCS#7容器 . 使用自签名证书,没有其他证书,因此(抱歉,我不是Apache专家)这个文件可能是:

    • 自签名证书本身(仅限公共部分)

    • 可以删除(此文件对自签名SSL证书没有任何意义)

    • 空(不太可能,Apache可能会抱怨错误的文件格式) .

    我会使用步骤1,将相同的证书传递给 SSLCertificateFileSSLCertificateChainFile 参数 .

相关问题