为什么一台SSL证书不能用于多台机器?

时间:2009-04-28 18:29:09

标签: ssl-certificate

情况如下。我正在对应用程序进行更改,但我没有测试环境。有一个QA服务器供测试团队使用,但我宁愿在我的本地机器上测试应用程序(部署对该服务器的更改可能会中断测试人员)。我在本地机器上设置了环境,但是有一个问题。

应用程序从第三方应用程序读取数据。它需要SSL证书才能连接到第三方。

我的问题是,为什么我不能在本地计算机上使用QA服务器的SSL证书?

我已经对Stack Overflow进行了粗略的搜索,对我来说,似乎一旦证书从CA发出,任何计算机都可以使用它。我的猜测是我误解了SSL流程的某些部分。

13 个答案:

答案 0 :(得分:31)

SSL Cert绑定到实际主机名。如果您拥有“qa.example.com”的SSL证书,则它将无法在名为“dev.example.com”的计算机上运行。

也许这就是你所遇到的问题。

答案 1 :(得分:23)

我假设您所描述的是对远程第三方执行SSL客户端身份验证。您的产品作为客户端启动了与第三方的连接,第三方决定您的证书是否足以进行连接。

证书基本上是三件事:

  • 私钥 - 只应由证书所代表的实体拥有
  • 公钥 - 与世界共享的密钥
  • 包含公钥的证书信息以及标识密钥持有者的可读数据 - 这是由证书颁发者以加密方式签名的。

所以...它不仅仅是一个密码,但它最终都是数据。

是否可以在多个位置安装SSL客户端证书的答案是肯定和否定。主要取决于第三方系统的安全要求以及存储该私钥的方式。

可以在文件中存储私钥/公钥对和证书 - 其中一个标准是PKCS #12。然后通常使用密码保护PKCS12。许多软件工具将允许您创建密钥对,将其存储在PKCS12中,并执行请求和完成第三方证书颁发所需的各种证书协议(我怀疑您的第三方要求您的证书由一个签署可信发行人名单)。然后,我看到的每个应用程序服务器都允许您将证书文件配置为客户端证书。

如果这是QA SSL证书的存储方式,那么在您的计算机上安装它时应该没有问题。

这是catch - 有时安全策略要求将证书存储在硬件令牌上。这通常是一种安全措施,可以保证只有一个实体可以使用证书。复制软件证书文件在测试环境中运行良好,但对于正在运行的产品安装来说,这是一个非常糟糕的安全实践。如果QA服务器使用硬件令牌,则硬件可能会保护将私钥对复制到另一个位置。如果无法访问私钥对,您将无法向第三方执行SSL请求 - 访问私钥的演示是协议的一部分。

在这种情况下,您需要申请自己的证书和密钥对才能访问第三方 - 除非您的公司提供共享硬件令牌的机制。这并不是完全疯狂 - 一些服务器场就是这样 - 所有服务器都具有配置,可以使用通用的联网HSM(硬件安全模块)并使用密钥对。对于SSL站点证书,这通常是正确的,因此集合中的所有服务器可能看起来都是同一台服务器。诀窍是 - 那种硬件非常高端。如果你正在进行一些快速而肮脏的测试,我认为它不太可能访问那种系统。

我会询问软件认证,以及是否可以获得副本。可能有政策原因禁止它......但是安装它们并不难,如果你只是做一些测试,你真的没有冒任何风险。

答案 2 :(得分:4)

我知道这是一篇较老的帖子,我可能会遗漏一些东西,但似乎每个人都错过了真正的答案。如果您希望在使用多个主机名/域的多个服务器上运行单个证书,则只需购买SAN证书即可。我们一直都在工作......

答案 3 :(得分:3)

这绝对是可行的,服务器在Web场中的工作方式如何? Web场中的所有服务器都安装了相同的证书。

我没有Apache的经验,但对于IIS,此过程记录在http://support.microsoft.com/kb/313299

答案 4 :(得分:2)

SSL证书绑定到主机名。因此,为了能够使用您的开发机器,您应该让主机名解析为您的开发机器(即使用主机文件)

答案 5 :(得分:2)

通常在SSL握手期间,作为证书一部分的主机名匹配 SSL连接另一端的主机名。这就是证书与主机名绑定的原因。

有几种方法可以解决这个问题。

  1. 使用外卡证书。
  2. 禁用主机名验证并接受增加的风险。
  3. 自定义主机名验证。
  4. 参见http://support.godaddy.com/help/article/567/what-is-a-wildcard-ssl-certificatehttp://docs.oracle.com/javase/7/docs/api/javax/net/ssl/HostnameVerifier.html

答案 6 :(得分:2)

  

@Kyle Jones - 我的问题是,为什么我不能使用SSL证书   我本地机器上的QA服务器?

     

@autonomatt - 子问题:VeriSign和其他公司问你如何   许多服务器,你正在安装SSL证书...得到奇怪的   客户打电话说他们的浏览器报告问题w /   证书......

<强>合法吗 您可以在多台计算机上安装SSL证书,但可能无法合法安装。 Signing CA公司与Network Solutions一样,对您的购买有法律限制。购买SSL证书时,只需在一台计算机上购买即可购买。您应该阅读从中购买证书的签名CA的条款。

<强>技术上吗 从技术上讲,除了一些硬件加速的SSL服务器之外,是的,您可以将KEY和CRT复制到任何Web服务器以提供有效的SSL连接。请注意,某些SSL证书是从CA发送/提供的,其证书链也必须安装在服务器端。如果未安装证书链,则客户端Web浏览器无法正确验证SSL证书。您应该检查CA Chain是否提供了签名CA提供的SSL证书。

IP解析要求。 SSL证书绑定到主机名。当客户端Web浏览器向服务器发出请求时,它会连接到从域名解析的IP地址,然后开始SSL / TLS握手过程。响应该IP地址的Web服务器必须使用客户端Web浏览器通过IP地址请求的公用名来显示SSL证书。这意味着每个IP地址只能配置一个SSL证书。客户端只发送加密的HTTP 1.1请求,因此在SSL / TLS握手之前,服务器不知道客户端的实际域请求是什么。

非生产IP解析。要在其他位置安装,Web浏览器必须正确地将主机名解析为IP地址。因此,如果您处于非生产环境中,则客户端必须以不同于生产环境的方式解析IP地址。这可以使用备用DNS服务器执行,或者所有计算机的本地主机文件都需要备用DNS解析。

技术安装过程。要在另一台计算机上安装SSL证书,请在为Web服务器配置的相应文件中复制KEY,SSL CRT和CA Chain。如果是Apache,它们都可以放在SSL证书的一个PEM文件中。

然后确保Web服务器在解析SSL证书中公用名的IP地址上提供此PEM文件。

通配符SSL证书。某些CA还提供Willdcard SSL证书,例如* .domain.com。请注意,Web浏览器必须识别此类型的证书,并且它仅保护一个子域级别。因此www.domain.com可以受到保护,但www.sub1.domain.com将导致客户端Web浏览器为客户端用户提供验证错误。

客户端网络浏览器收到SSL证书验证错误的一些原因:

  1. 如果需要CA Chain但Web服务器不提供。
  2. 如果根签名CA不是客户端Web浏览器SSL权限中的受信任CA,则对于自签名SSL证书始终如此。
  3. 如果客户端Web浏览器通过SSL请求域与SSL证书的公用名不匹配。
  4. 如果客户端浏览器无法从签名CA访问x509 CRL分发点 - 则受限或封闭网络上的客户端将无法验证SSL证书。在SSL / TLS握手期间提供CRL的URL。另见:http://en.wikipedia.org/wiki/Revocation_list#Problems_with_CRLs

答案 7 :(得分:1)

证书包含以下信息: 1)持有证书的公司/个人的名称,域名,地址,密钥的到期日等详细信息。 2)它有公钥。 3)一些加密数据。这是关键。

此加密数据是证书中存在的所有userinfo以及公钥,该公钥已由颁发证书的CA的私钥签名。

当浏览器收到证书时,它会尝试使用已嵌入浏览器的CA的公钥对加密数据进行设计。因此,如果证书中存在的所有信息在取消签名后都匹配,则它确保证书中提到的该域的所有者具有与证书中提到的公钥对应的私钥。

所以关键是,如果有人发布(像网站那样)我是证书的所有者,这意味着,个人/公司拥有相应的私钥对。

SO回到问题:真正的问题是“应用程序从第三方应用程序读取数据。它需要SSL证书才能连接到第三方。”

这就是证书的意思。基本上,您的应用程序希望与第三方应用程序建立SSL连接,如果您拥有证书,则您已完成所有设置。因此,首先我假设您已将证书放在错误的目录中,以便您的应用程序无法读取它并且无法与第三方建立ssl连接。或者有一些配置文件问题。

我知道答案是没有用的,但我想更好地写下我的感受。

答案 8 :(得分:0)

我认为您需要详细说明您的环境,但也许您没有将证书的私钥部分复制到本地计算机。私钥和公钥都是使用证书所必需的。我假设你写了“从第三方读取”你正在使用客户证书。

答案 9 :(得分:0)

在这些情况下,第三方通常会做两件事之一。允许您访问不需要证书的QA沙箱。或者允许您制作一个临时证书,表明他们将接受未经证书颁发机构验证的证书。对于第三方Web服务提供商来说,不提供具有不同QA和prod的需求将是奇怪的。的环境中。

答案 10 :(得分:0)

从技术上讲,证书(从这些PKI工具导出)不会包含私钥。因此,即使在负载均衡的环境中,证书的普通复制也无济于事?

此外,当我们使用PKI工具生成证书时,您可以为DN提供任意字符串(例如“CN = xyz,OU = ttr,O = x”)。我想知道如果不同的机器使用相同的DN来创建证书会有什么行为?

答案 11 :(得分:0)

我理解我对这个问题的回答在线程中已经太晚了。但是我今天遇到了同样的问题,同时在Load Balancer配置中为2台服务器安装了相同的证书,操作系统= Windows 2008 / IIS 7.5并且能够找出解决方案。

我可以通过单击“完成证书申请”并导航到证书“abc.cer”所在的位置(在假设您已经拥有证书的情况下)将其安装在第一台服务器上。然后我在第二台服务器上复制了相同的'abc.cer',并尝试了“完整证书申请”,但它无效。证书将显示为已安装,但只要刷新IIS管理器就会消失。然后我尝试从第一台服务器“导出”证书(它生成.pfx扩展文件),然后在第二台服务器上导入该证书。这种方法很有效。

答案 12 :(得分:0)

这取决于你的意思

一个通配符证书可用于具有不同A记录的多个主机。

例如,您拥有域*.stackoverflow.com.的通配符证书只要您运行的新服务器使用域stackoverflow.com

的子域,您就可以获得CA批准的TLS

即。 mail-server.stackoverflow.com