如何为使用 OpenSSL 创建客户端证书指定 CA 私钥密码

Posted

技术标签:

【中文标题】如何为使用 OpenSSL 创建客户端证书指定 CA 私钥密码【英文标题】:How to specify CA private key password for client certificate creation using OpenSSL 【发布时间】:2015-08-06 05:46:36 【问题描述】:

我正在构建一个命令行脚本,以使用 OpenSSL“迷你 CA”功能创建客户端证书。

我有一个 CA 证书用密码加密的 CA 私钥。有了这些东西,我正在尝试创建客户端证书并偶然发现了命令行语法。 如何为 CA 的私钥指定密码?

到目前为止,我已经...

openssl x509
  -req
  -in client.csr
  -signkey client.key
  -passin pass:clientPK
  -CA client-ca.crt
  -CAkey client-ca.key 
  -CAkeypassin pass:client-caPK <-- does not work
  -CAcreateserial
  -out client.crt
  -days 365

查看突出显示的参数。我期待这样的事情,但我在文档中的任何地方都找不到它。

更正

只是为了记录。 -signkey 参数用于自签名证书。 CA 无权访问客户端的私钥,因此不会使用它。相反,-passin 参数指的是 CA 的私钥。

openssl x509
  -req
  -in client.csr
  -CA client-ca.crt
  -CAkey client-ca.key 
  -passin pass:CAPKPassword
  -CAcreateserial
  -out client.crt
  -days 365

【问题讨论】:

Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super User 或Unix & Linux Stack Exchange 会是一个更好的提问地方。另见Where do I post questions about Dev Ops?。 是的...投票关闭并迁移到超级用户。 是的,编写 openssl 命令并不是真正的编程——它只是感觉而已。 【参考方案1】:

使用-passin pass,如下所示。

 openssl x509
      -req
      -in client.csr
      -signkey client.key
      -passin pass:clientPK
      -CA client-ca.crt
      -CAkey client-ca.key 
      -passin pass:secret <-- try this
      -CAcreateserial
      -out client.crt
      -days 365

【讨论】:

你是对的。我在添加-signkey 参数时犯了一个错误,因此那里已经标有-passin 参数的密码指的是客户端的私钥——这实际上对CA 不可用。 “passin”参数各部分的含义是什么?什么是“通过”,什么是“秘密”? 逐字“通过”表示密码在命令行中给出,密码应替换为实际密码。有一些选项可以为 file/fd 提供密码,有关详细信息,请参阅man openssl 多次出现“passin”参数是否正常/有意?第一个不是简单地被第二个替换了吗?

以上是关于如何为使用 OpenSSL 创建客户端证书指定 CA 私钥密码的主要内容,如果未能解决你的问题,请参考以下文章

如何为测试目的创建自签名 SSL 证书? [关闭]

如何为使用 OpenSSL 生成的证书提供多行证书名称 (CN)

如何为nginx配置https

如何为通过 SSL 进行双向身份验证的本地测试创建客户端证书?

openssl将私钥和crt证书合成pfx证书

使用c/c++ Openssl库,建立安全连接流程?