ssl - 自签名证书中要包含哪个证书链文件?

标签 ssl ssl-certificate

编辑:最好在 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 提供什么文件? ,如果需要,我该如何创建它?

以下是我按照不同链接的说明创建的文件,以及我用来创建它们的命令。
  • 证书颁发机构 key (ca.key) : openssl genrsa -des3 -out ca.key 1024
  • key 证书(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里面有定义。
  • 服务器 key (server.key):openssl genrsa -out server.key 1024
  • key 证书(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文件,这对我来说似乎是最合乎逻辑的事情,以及 server.key SSLCertificateKeyFile 的文件.SSLCertificateChainFile似乎要一个 .crt文件,所以它可能是唯一的其他 .crt我拥有的文件,ca.san.crt ,但我真的不确定这一点。

    有人有什么提示吗?
    感谢您花时间阅读本文。

    解决方案
    对于这种特殊情况,由于我使用的是自定义证书,SSLCertificateChainFile没有多大意义(请参阅下面的标记答案)。因此,您只需为两个指令指定相同的证书文件 SSLCertificateFileSSLCertificateChainFile .
    在使用 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 专家)这个文件可能是:
  • 自签名证书本身(仅公共(public)部分)
  • 可以删除(此文件对自签名 SSL 证书没有任何意义)
  • 空(不太可能,Apache 可能会提示错误的文件格式)。

  • 我会使用第 1 步,将相同的证书传递给 SSLCertificateFileSSLCertificateChainFile参数。

    关于ssl - 自签名证书中要包含哪个证书链文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26873612/

    相关文章:

    .htaccess - 域验证错误

    c# - 客户端的 WCF 服务 - SSL 证书

    node.js - 来自 Socket.io 的 s3_pkt.c 中的 HTTPS 错误 "data length too long"

    amazon-web-services - S3 上的 https 可能没有 Cloudfront 吗?

    ssl - 安装 SSL 后社交按钮被阻止

    ssl - 我们正在将 .net 应用程序与 salesforce 集成,出现此错误

    ssl - 尼菲 : using zookeeper with SSL

    ssl - Intermediate 签名的证书显示为自签名证书

    c# - 上传到 Azure 网站时 SSL 证书不在 X509Store 中

    apache - 如何在 Apache 上将 HTTP 重定向到 HTTPS?