SSL客户端如何验证服务器的证书?

时间:2009-01-03 01:11:28

标签: security ssl cryptography openssl ssl-certificate

我正在构建一个应用程序,我计划使用OpenSSL来保护数据传输。

我计划只让客户验证服务器的证书。我对如何保护服务器的证书感到困惑。我想加密包含私钥的服务器证书,但我不想使用任何硬编码密钥进行此加密。

使用SSL的应用程序遵循哪些常见做法?

3 个答案:

答案 0 :(得分:5)

为确保我们的术语直截了当,通用术语中的“SSL证书”实际上由两部分组成:

  • 公共证书
  • 私钥

公共证书组件由您选择的CA(证书颁发机构)签名,之后可以自由分发。它不需要保护或加密,实际上它将作为SSL协商的一部分发送给连接到您的服务器的客户端。

应保护私钥组件。在大多数情况下,这只是作为加密文件存储在服务器上。高档解决方案使用专用的“防篡改”加密硬件(HSM - 硬件安全模块)来存储私钥。这些范围从基于智能卡的解决方案到具有m / n控制等的多键,网络设备等。与HSM相关的风险(更不用说成本)我不会在这里讨论。

许多应用程序只是将私钥保留在磁盘上。有几个选项可以保护密钥文件:

  • 依靠系统和文件权限安全性(即不加密私钥)。例如,大多数ssh守护进程都会这样做。
  • 使用服务器提供的任何机制来加密文件 - 受密码保护的加密是大多数Web服务器的标准功能。 (如果您使用OpenSSL API自行编辑,请选择一种明显的本机密钥格式​​。)

与往常一样,存在安全权衡。特别是,如果您在私钥文件上使用受密码保护的加密,并且遇到意外的应用程序重启(例如停电),则需要有人在重新启动时为应用程序提供密码。将密码存储在由系统初始化脚本读取的文件中(至少由两个Web服务器供应商鼓励)在真实安全性方面几乎没有增加。很难建议不加密私钥密钥文件,但如果你是小商店中唯一的管理员/技术人员,你一定要考虑如果服务器在你不可用时重新启动会发生什么,以及你的业务可能会有什么成本。

答案 1 :(得分:0)

不太确定你要问的是什么。服务器证书发送给您,客户端;您通过检查其签名验证证书(使用SHA-1而不是MD5,MD5已被破解。)您从CA获得的密钥是公共方面; CA和服务器证书持有者将自己的私钥保留给自己。您可以验证证书,因为公钥足以解密使用私钥加密的邮件。因此,您不必担心在保持证书加密的情况下。

查看Wikipedia article on SSL/TLS

答案 2 :(得分:0)

  

我对如何保护服务器证书感到困惑。

您无需保护服务器的证书。这是一份公开文件

  

我想加密包含私钥的服务器证书

服务器的证书不包含私钥。

  

但我不想使用任何硬编码密钥进行此加密。

您无需进行任何加密。您需要保护的唯一服务器资产是其私钥,该私钥与其证书完全不同。在OpenSSL的情况下,它甚至可以是不同的文件。