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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么一台SSL证书不能用于多台机器?相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

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

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

另一答案

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

另一答案

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

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

另一答案

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

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

另一答案

这取决于你的意思

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

例如,您有域*.stackoverflow.com.的通配符证书只要您运行的新服务器正在使用域stackoverflow.com的子域,您就可以拥有CA批准的TLS

即yaazkssvpoi

另一答案

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

证书基本上是三件事:

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

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

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

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

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

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

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

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

另一答案

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

另一答案

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

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

另一答案

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

另一答案

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

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

  1. 使用通配符证书。
  2. 禁用主机名验证并接受增加的风险。
  3. 自定义主机名验证。

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

另一答案

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

@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,它们都可以在一个PEM文件中找到SSL Cert。

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

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

客户端Web浏览器收到SSL Cert验证错误的一些原因:

  1. 如果需要CA链但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
另一答案

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

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

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

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

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

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

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

另一答案

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

以上是关于为什么一台SSL证书不能用于多台机器?的主要内容,如果未能解决你的问题,请参考以下文章

将证书注册到 SSL 端口

为啥android会得到错误的ssl证书? (两个域,一台服务器)

SSL证书之神秘预证书

我配置好一个tomcat,ssl证书,如何给同一台机器上的其他tomcat配置证书,默认的80,443端口已经被占用。

更新 Apache SSL 证书

具有标准iPhone开发人员计划的多台计算机