我以前从来没有这样做过。但这里有一些建议性的指针。这些要点并不是让它发挥作用的具体步骤。从新AWS CloudHSM(非经典)产品的文档中:
- 使用 CLI 实用程序设置 CloudHSM 并生成私钥。
- 安装和配置 CloudHSM OpenSSL 库。
- 检查引擎是否工作
openssl engine -t cloudhsm
- 配置 Nginx。从 Nginx 1.7.9 开始,您可以为私钥指定引擎
可以指定值 engine:name:id 代替文件 (1.7.9),该文件从 OpenSSL 引擎名称加载具有指定 id 的密钥。
所以你的 nginx 配置看起来像这样
ssl_certificate_key cloudhsm:<name>:<keyid>;
我不太确定名称或 keyID 是什么。如果我找到一些东西,我会阅读一下并编辑这个答案。
注意:此外,根据文档,如果要启用 SSL 加速(在 HSM 中进行加密),您可能必须将 设置为ssl_engine
。cloudhsm
ssl_engine cloudhsm;
- 测试。
请问您为什么不想使用 AWS ACM 在负载均衡器上卸载 SSL?这是最简单的方法,如果您相信 AWS 是安全的,它就是安全的。
编辑:我读了一点,我或多或少地确定Key Handle
CloudHSM 用语 - 6 位数字标识符 - 就在keyid
这里。我也认为user name
是name
部分。所以你的 Nginx 配置可能是:
# something that looks like:
ssl_certificate_key cloudhsm:AWSUser:568900;
edit2:不需要 Nginx 编译。我们只需要确保 openssl 引擎是可加载的。配置完成后,验证时如下所示:
[root@ip-172-31-14-127 ~]# export n3fips_password=user_cu:Wzs8sukUp7FkVs4xQU
[root@ip-172-31-14-127 ~]# openssl engine -t cloudhsm
(cloudhsm) CloudHSM hardware engine support
SDK Version: 2.03
[ available ]
编辑3:好消息!根据这个论坛帖子,亚马逊正在为 Nginx 与 CloudHSM 的集成编写更好的文档。
编辑 4:AWS 已经更新了他们的文档以包含 Apache 和 Nginx 的说明。我似乎有点正确!;) 所以,显然,你下载了一个“假私钥”并在你的 Nginx 配置中使用它。其余的说明都很好。
无论您选择哪种方法,您都可以从 HSM 导出私钥句柄并将其保存到文件中。该文件不包含实际的私钥。它包含对存储在 HSM 上的私钥句柄的引用。该文件的内容被称为伪造的 PEM 格式私钥。您的 Web 服务器软件使用伪造的 PEM 格式私有密钥文件以及用于 OpenSSL 的 AWS CloudHSM 软件库,将 SSL 或 TLS 处理卸载到集群中的 HSM
此处的文档:https ://docs.aws.amazon.com/cloudhsm/latest/userguide/ssl-offload.html
我还没有测试过这个。一旦我这样做,将发布更新。