我有一个通过HTTPS保护的网络服务。我也有使用libcurl(可能链接到OpenSSL,或链接到GnuTLS;我不知道哪个,它取决于用户如何安装libcurl)与此Web服务对话的客户端软件。由于Web服务只能通过客户端软件访问,而不能通过浏览器访问,因此Web服务使用自签名证书。反过来,客户端软件具有此自签名证书的副本,并明确检查与该证书的连接。
由于Heartbleed,我想更改私钥和证书。但是,我希望我的用户尽可能少地体验服务中断。
因此,我无法在固定的日期和时间更改密钥/证书。如果我这样做,则所有用户必须在该确切日期和时间升级其客户端软件。否则,升级后的客户端软件将在服务器更改之前无法运行,而旧版本的客户端软件在服务器更改后将无法运行。
理想情况下,我想告诉我的用户我将在1个月内更改证书,并且他们有1个月的时间来升级客户端软件。客户端软件应与旧证书和新证书兼容。然后,在1个月后,我可以发出另一个客户端软件更新,删除对旧证书的支持。
所以现在我们提出了一个问题:我可以将旧证书和新证书附加到单个.crt文件中吗?这会导致libcurl接受这两个证书吗?如果没有,我该怎么办呢?行为是否依赖于SSL库或版本?
OS X上的测试似乎表明将两个证书附加到单个文件中都有效,但我不知道这是否是特定于OS X的行为,或者它是否在任何地方都有效。我的客户端软件必须支持各种Unix系统,包括Linux(多个发行版)和FreeBSD。
答案 0 :(得分:1)
简短的回答:你不能。
答案很长:
是的,无论平台如何,您都可以将多个证书放在一个.crt文件中。
但是,HTTPS只能提供一个证书,而不是crt文件。所以这不是限制你的文件,而是协议。
答案 1 :(得分:0)
您可以看看SNI https://en.wikipedia.org/wiki/Server_Name_Indication 能够根据客户端在SSL握手开始时发送的SNI信息提供其他证书
或者,您可以使用单独的TCP端口(或IP,或同时使用这两个端口)来提供新证书。
但是你说
客户端软件又具有此自签名证书的副本,并根据该证书显式检查连接。
然后,这要求您发布软件版本以供客户端运行,以至少拥有要使用的新证书的副本。
我想您最好使用由著名的CA签署的证书,以将服务器证书从其验证链中分离出来,但这确实意味着要付费。
答案 2 :(得分:-1)
是的,证书文件应该能够容纳多个证书。我希望得到广泛的支持。