我已按照此处列出的步骤创建新的私钥和证书。现在我试图将它们组合成一个 .pfx 文件。
OpenSSL 应该能够从单个文件中读取私钥和证书,并且根据 manman文档,也应该能够从stdin. 但是,这似乎对我不起作用。
在 Mac OS X 10.14.3 上并openssl version给出“LibreSSL 2.6.5”。
我将我的证书和密钥合并到一个文件中(称为“combined.pem”)。我使用以下命令执行此操作:
$ openssl genrsa -out private.key 2048
$ openssl req -new -x509 -key private.key -out public.cer -days 365
$ cat public.cer >> combined.pem
$ cat private.key >> combined.pem
Run Code Online (Sandbox Code Playgroud)
作为参考,combined.pem看起来像这样:
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令时,一切正常:
$ openssl pkcs12 -export -out x509.pfx -in combined.pem
Run Code Online (Sandbox Code Playgroud)
当我运行此命令时,出现错误:
$ openssl pkcs12 -export -out x509.pfx < combined.pem
unable to load certificates
Run Code Online (Sandbox Code Playgroud)
我也试过:
$ cat combined.pem | openssl pkcs12 -export -out x509.pfx
unable to load certificates
Run Code Online (Sandbox Code Playgroud)
我错过了什么?OpenSSL 真的不能从中读取stdin吗?
此外,来自man文档:
-in file
The input file to read from, or standard input if not specified. The order doesn't matter but one private key and its corresponding certificate should
be present. If additional certificates are present, they will also be included in the PKCS#12 file.
-inkey file
File to read a private key from. If not present, a private key must be present in the input file.
Run Code Online (Sandbox Code Playgroud)
oth*_*guy 16
与此处大多数答案所说的相反,OpenSSL确实可以开箱即用地使用 stdin,包括在 macOS 上。诀窍是完全保留-in参数。
cat combined.pem | openssl pkcs12 -export -out x509.pfx
Run Code Online (Sandbox Code Playgroud)
jim*_*gee 10
我遇到了类似的问题,并且在 OpenSSL Github 贡献者的帮助下,设法确定通过 stdin 提供 PEM 文件可以工作,但您必须拥有一个在证书之前包含密钥的 PEM 文件。
根据此注释,该pkcs12命令通过打开输入、扫描按键并读取它们进行处理;然后重新打开输入(或返回到开头),扫描证书并读取这些证书。当输入是文件(例如 via -in somefile)时,重新打开/查找会将读取位置重置为文件的开头,但是当输入是标准输入流(例如 via in -、cat |或< file只是省略-in)时,重新打开/查找将被忽略并继续从它停止的地方开始(因为标准输入流是只向前的)。
因此,如果输入流在密钥之前包含证书,则密钥扫描(从流的开头开始)会消耗直到密钥数据末尾的所有流,而忽略证书数据;然后证书扫描(从密钥数据的末尾开始)在找到任何证书之前到达流的末尾,这样您就可以得到结果unable to load certificates。
如果输入流在证书之前包含密钥,则密钥扫描(从流的开头开始)首先找到密钥,然后证书扫描(从密钥数据的末尾开始)其次找到证书,一切正常正如它应该。
由于 OpenSSL(当前)在其正常输出中的密钥之前发出其证书,因此您无法轻松地将调用传递到pkcs12一起,这一事实使这一情况变得更加令人恼火。
TL;DR:做cat private.key public.cer > combined.pem,不做cat public.cer private.key > combined.pem。
从我从这个问题中收集的信息来看, OpenSSL 确实不适用于开箱即用的标准输入。您可以尝试的一件事是使用一些技巧:
openssl pkcs12 -export -out x509.pfx -in /dev/stdin < combined.pem
Run Code Online (Sandbox Code Playgroud)
我还没有测试您的特定证书组合案例,但/dev/stdin重定向部分应该可以让您在 OpenSSL 中拥有“类似标准输入”的功能
| 归档时间: |
|
| 查看次数: |
11452 次 |
| 最近记录: |