1

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

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

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

4

3 回答 3

5

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

  • 公开证书
  • 一个私钥

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

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

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

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

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

于 2009-01-03T02:03:15.730 回答
0

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

查看有关 SSL/TLS 的 Wikipedia 文章

于 2009-01-03T01:57:12.810 回答
0

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

您不必保护服务器的证书。这是公开文件

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

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

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

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

于 2017-03-02T03:56:23.447 回答