32

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

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

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

我对 Stack Overflow 进行了粗略的搜索,在我看来,一旦 CA 颁发了证书,任何计算机都可以使用它。我的猜测是我误解了 SSL 过程的某些部分。

4

13 回答 13

32

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

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

于 2009-04-28T18:33:52.253 回答
23

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

证书本质上是三样东西:

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

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

是否可以在多个位置安装 SSL 客户端证书的答案是“是”和“否”。大多数情况下,这取决于第三方系统的安全要求以及您存储该私钥的方式。

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

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

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

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

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

于 2009-04-28T19:06:12.987 回答
4

我知道这是一篇较旧的帖子,我可能遗漏了一些东西,但似乎每个人都错过了这里的真正答案。如果您想要一个证书在使用多个主机名/域的多个服务器上工作,那么您只需要购买一个 SAN 证书。我们在工作中总是这样做...

于 2012-06-26T20:22:23.623 回答
3

这绝对是可以做到的,否则服务器如何在网络场中工作?Web 场中的所有服务器都安装了相同的证书。

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

于 2009-04-28T18:37:17.300 回答
2

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

于 2011-11-11T11:47:55.187 回答
2

通常在 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

于 2012-08-17T01:44:41.847 回答
2

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

@autonomatt - 子问题:VeriSign 和其他公司询问您在多少台服务器上安装 SSL 证书......让奇怪的客户打电话说他们的浏览器报告了证书问题......

合法吗? 您可以在多台计算机上安装 SSL 证书,但可能无法合法地这样做。签署 CA 公司,如 Network Solutions,对您的购买有法律限制。当您购买 SSL 证书时,您购买它只是为了安装在一台计算机上。您应该阅读从中购买证书的签名 CA 的条款。

技术上? 从技术上讲,除了一些硬件加速的 SSL 服务器,是的,您可以将 KEY 和 CRT 复制到任何 Web 服务器以提供有效的 SSL 连接。请注意,某些 SSL 证书是从 CA 运送/提供的,证书链也必须安装在服务器端。如果未安装证书链,客户端 Web 浏览器将无法正确验证 SSL 证书。您应该检查 CA 链是否与签名 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 证书,请将 KEY、SSL CRT 和 CA 链复制到为 Web 服务器配置的相应文件中。如果是 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 链但 Web 服务器未提供。
  2. 如果根签名 CA 不是客户端 Web 浏览器 SSL 授权中的受信任 CA - 自签名 SSL 证书始终如此。
  3. 如果客户端 Web 浏览器通过 SSL 请求与 SSL 证书的通用名称不匹配的域。
  4. 如果客户端浏览器无法从签名 CA 访问 x509 CRL 分发点 - 因此受限或封闭网络上的客户端将无法验证 SSL 证书。CRL 的 URL 在 SSL/TLS 握手期间提供。另见:http ://en.wikipedia.org/wiki/Revocation_list#Problems_with_CRLs 。
于 2013-10-10T19:38:32.963 回答
1

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

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

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

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

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

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

我知道这个答案没有用,但我想最好把我的感受写出来。

于 2013-03-18T22:14:53.787 回答
0

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

于 2009-04-28T18:37:15.087 回答
0

在这些情况下,第三方通常会做两件事之一。让您可以访问不需要证书的 QA 沙箱。或允许您制作他们将接受的临时证书,该证书未经证书颁发机构验证。如果第三方 Web 服务提供商不提供不同的 QA 和 prod 的需求,那就太奇怪了。环境。

于 2009-04-28T18:39:08.030 回答
0

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

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

于 2011-04-21T21:46:16.640 回答
0

我知道我对这个问题的回答在线程中为时已晚..但是我今天在负载均衡器配置中将相同的证书安装到 2 台服务器时遇到了同样的问题,操作系统 =Windows 2008/IIS 7.5 并且能够弄清楚解决方案。

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

于 2013-12-10T05:56:19.287 回答
0

这取决于你的意思

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

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

IE mail-server.stackoverflow.com

于 2017-12-29T18:33:05.487 回答