在Powershell中使用OpenSSL为300多个服务器生成证书

时间:2020-10-06 19:03:32

标签: powershell openssl

距离我来这里已经有一段时间了。

我的环境中有300台新服务器,我的组织希望使用“ OpenSSL”生成证书。我有系统的名称,在此之前我曾使用过OpenssL,事实是,我不想整日坐着反复输入每条信息超过300次。我想使它自动化。到目前为止,一切正常,直到我必须输入有关州,通用名称,位置,组织等的信息为止。

我的问题是使用Powershell;如何将这些信息输入Openssl?

仅供参考,最近两天我一直在搜索互联网。我经常遇到bash脚本,Openssl手册,“如何做”(没有自动化)来生成证书,尤其是使用powershell时。

我确实遇到了一个结果,该人员使用了一个函数,但是它所做的只是生成一个请求,而不是多个请求,并且他根本没有输入任何信息。但是他最终获得​​了企业社会责任,所以我感到困惑。

这是我当前的代码,为了保护隐私,我已将其清除:

_handler

图片1:

Powershell_Stops

1 个答案:

答案 0 :(得分:2)

在深入探讨如何将主题参数传递给openssl之前,我必须警告您,预定的方法很可能 一个非常糟糕的主意

私钥永远不要离开主机!

公钥密码学背后的整个思想是,大多数密钥材料必须保持为秘密(或 private ),并且验证者仅需要一小部分(公钥)来加密只有私钥持有者才能解密的数据,而该数据又可以用于身份验证。

如果私钥的副本存在于多台计算机上,则多台计算机可以声明与相应证书关联的身份(即服务器或网站名称)。

由于这个原因,我会强烈建议编写脚本以在本地生成单个密钥+证书,然后在每台计算机上执行该脚本-这样,私钥材料就不必离开主机。


通过主题openssl req

假设您使用的是openssl的最新可用版本,则req上下文应具有一个-subj开关,您可以将完整的主题传递给该开关:

openssl req -new -key $key_out -sha256 -out $Pem_out -verify -newhdr -subj "/C=US/ST=NY/L=Albany/O=SuperCorp Ltd./CN=server.fqdn"

所有您需要做的就是从已经准备好的变量构造主题字符串:

$subject = "/C=${Country_Name}/ST=${State_Name}/L=${Locality_Name}/O=${Org_Name}/OU=${Org_Unit_Name}/CN=server.fqdn"
openssl req -new -key $key_out -sha256 -out $Pem_out -verify -newhdr -subj $subject