![如何在远程服务器上自动生成 SSL 证书](https://linux22.com/image/716361/%E5%A6%82%E4%BD%95%E5%9C%A8%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E8%87%AA%E5%8A%A8%E7%94%9F%E6%88%90%20SSL%20%E8%AF%81%E4%B9%A6.png)
我正在寻找一种在外部 Linux 服务器上生成 SSL 证书的方法,但找不到最佳方法。
场景:
当用户在网站(在 Web 服务器上)上注册时,我希望 Web 服务器向另一台服务器发送一条消息,该服务器将为用户生成 SSL 证书和密钥。Web 服务器必须将username
用户的信息发送到外部服务器。我知道,为了安全起见,最好在单独的机器上生成 SSL 证书,而不是在 Web 服务器上生成。
Web 服务器也是 Linux 系统,将使用 PHP,因此 PHP 是否应该将此消息发送到“ssl-generation-server”?我考虑使用脚本BASH
和这样的 curl 命令,因为这是我能想到的最简单的方法:
exec("curl http://ssl-gen-server/generate.php > /dev/null 2>&1 &");
我不想让 Web 服务器上的 PHP 调用等待来自的答复generate.php
,因此我将重定向它,以便它能够异步。
SSL 和密钥生成后,应将其发送回 Web 服务器,以便呈现给用户。但这里的问题是:“ssl-gen-server”如何联系 Web 服务器并告知 SSL 证书?
从 Web 服务器自动通过 SSH 登录到 SSL-gen 服务器并在那里运行命令是否更好?
我知道 PHP 有openssl_csr_new
,但也许使用实际命令生成证书更好openssl
?
答案1
(这应该是一条评论,但是有点长)
我正在考虑使用 BASH 脚本和像这样的 curl 命令
这是一种非常奇怪的解决问题的方法。即使这是从 PHP 调用远程 URL 的唯一可能方法,您与 curl 交互的方式也存在很多问题。
您似乎还对 CSR 和证书之间的关系感到很困惑。您试图解决实施细节,而没有明显考虑架构,也没有真正解释您想要实现的目标(这是客户端证书吗?证书和密钥是否要部署到服务器?)。谁是证书颁发机构?您是在尝试自动化现有流程还是这是一项新功能?
您似乎不明白将 CSR 创建与证书签名分开的必要性。
虽然调用的细节很容易回答,但是您的问题中关于服务的完整性和机密性有很多特殊之处,忽略它们并解释任何调用解决方案都是不负责任的。
最好的建议(尽管在没有使用模型的情况下仍然有些危险)是 ansi_lumen 建议使用 letsencrypt。
答案2
您需要一个包含证书颁发机构和颁发证书方式的 PKI 解决方案。全功能产品包括免费IPA(又名 Red Hat Identity Manager)或 Active Directory 证书服务。
无论哪种情况,探索类似证书持有者发出证书请求。它具有比 openssl 更好的 API 定义。作为奖励,它具有自动续订功能。
如果您不介意它是否使用您的 PKI,请实施 Let's Encrypt 并让他们颁发证书。
最后,在使用 openssl shell 脚本实现自己的 PKI 之前,不要急着去研究 certmonger 助手。如果你真的想,可以阅读一些教程来了解如何正确地进行 PKI。我推荐几篇,作者是斯蒂芬·H·霍莱克或者詹米·阮。