我正在构建一个应用程序,我计划使用OpenSSL来保护数据传输.
我打算只让客户验证服务器的证书.我对如何保护服务器的证书感到困惑.我想加密包含私钥的服务器证书,但我不想使用任何硬编码密钥进行此加密.
使用SSL的应用程序遵循哪些常见做法?
为了确保我们的术语直接,通用术语中的"SSL证书"实际上由两部分组成:
公共证书
私钥
公共证书组件由您选择的CA(证书颁发机构)签名,之后可以自由分发.它不需要保护或加密,实际上它将作为SSL协商的一部分发送到连接到您的服务器的客户端.
应保护私钥组件.在大多数情况下,这只是作为加密文件存储在服务器上.高档解决方案使用专用的"防篡改"加密硬件(HSM - 硬件安全模块)来存储私钥.这些范围从基于智能卡的解决方案到具有m/n控制等的多键,网络设备等.与HSM相关的风险(更不用说成本)我不会在这里讨论.
许多应用程序只是将私钥保留在磁盘上.有几个选项可以保护密钥文件:
依靠系统和文件权限安全性(即不加密私钥).例如,大多数ssh守护进程都这样做.
使用服务器提供的任何机制来加密文件 - 受密码保护的加密是大多数Web服务器的标准功能.(如果您使用OpenSSL API自行编辑,请选择一种明显的本机密钥格式).
与往常一样,存在安全权衡.特别是,如果您在私钥文件上使用受密码保护的加密,并且遇到意外的应用程序重启(例如停电),则需要有人在重新启动时为应用程序提供密码.将密码存储在由系统初始化脚本读取的文件中(至少由两个Web服务器供应商鼓励)在真实安全性方面几乎没有增加.很难建议不加密私钥密钥文件,但如果你是小商店中唯一的管理员/技术人员,你一定要考虑如果服务器在你不可用时重新启动会发生什么,以及你的业务可能会有什么成本.