【问题标题】:Openssl errors in PowerShell when converting certificates转换证书时 PowerShell 中的 Openssl 错误
【发布时间】:2020-07-04 05:36:11
【问题描述】:

我目前正在将 CER 转换为 PEM。

我正在构建一个脚本,以使用 Openssl 将多个证书转换为不同的格式。我正在运行 PowerShell 7 和 Openssl 1.1.1e。当我运行我的脚本时,我得到了一些 Openssl 错误,但是它似乎仍然在转换证书,因为我之后仍然得到一个 .pem 文件。以下是错误:

Can't open Folder\Path for reading, Permission denied
17956:error:02001005:system library:fopen:Input/output error:..\crypto\bio\bss_file.c:69:fopen('C:\Users\localadmin\Desktop\PowerShell\Testing Environment\Folder\Path','r')
17956:error:2006D002:BIO routines:BIO_new_file:system lib:..\crypto\bio\bss_file.c:78:
unable to load certificate
Can't open Folder\Path for reading, Permission denied
19560:error:02001005:system library:fopen:Input/output error:..\crypto\bio\bss_file.c:69:fopen('C:\Users\localadmin\Desktop\PowerShell\Testing Environment\Folder\Path','r')
19560:error:2006D002:BIO routines:BIO_new_file:system lib:..\crypto\bio\bss_file.c:78:
unable to load certificate
unable to load certificate
17960:error:0909006C:PEM routines:get_name:no start line:..\crypto\pem\pem_lib.c:745:Expecting: TRUSTED CERTIFICATE
unable to load certificate
16568:error:0909006C:PEM routines:get_name:no start line:..\crypto\pem\pem_lib.c:745:Expecting: TRUSTED CERTIFICATE
unable to load certificate
21500:error:0909006C:PEM routines:get_name:no start line:..\crypto\pem\pem_lib.c:745:Expecting: TRUSTED CERTIFICATE
unable to load certificate
15500:error:0909006C:PEM routines:get_name:no start line:..\crypto\pem\pem_lib.c:745:Expecting: TRUSTED CERTIFICATE

我在使用 Openssl 制作 CSR 或私钥时没有任何错误。以下是我用于转换的代码:

if($CertType -eq "PEM") {
    Get-ChildItem $ScriptPath\$Kit -Recurse -Force | ForEach-Object {
        $OutFile = $_.FullName.ToString().Replace(".cer",".pem")
        openssl x509 -in $_.FullName -outform PEM -out "$Outfile"}
}

【问题讨论】:

    标签: powershell openssl certificate pem


    【解决方案1】:

    能够弄清楚。在我将 CER 文件转换为 PEM 的代码中,当通过我的文件夹递归时,我添加了该行以仅包含 CER 文件而不包含其中的密钥文件。以下是修改后的代码。

    if($CertType -eq "PEM") {
        Get-ChildItem $ScriptPath\$Kit -Recurse -include "*.cer" | ForEach-Object {
            $OutFile = $_.FullName.ToString().Replace(".cer",".pem")
            openssl x509 -in $_.FullName -outform PEM -out "$Outfile"}
    }
    

    【讨论】:

      【解决方案2】:

      默认的 openssl x509 命令格式是 pem,所以你的命令行正在从 pem 转换为 pem。 所以错误是 openssl 不理解文件格式,因为它需要一个 pem 格式的文件。

      我假设您想将 DER 格式转换为 PEM 格式。 所以你要做的是:

      openssl x509 -in {infilename} -inform der -out {outfilename}

      这将在输入和输出时期望 DER 格式的文件作为 PEM 格式的文件。

      或者您可以明确指定双方,如:

      openssl x509 -in {infilename} -inform der -out {outfilename} -outform pem

      来自手册:

      -通知 DER|PEM

      这指定输入格式通常命令将期望 X509 证书,但如果有其他选项(例如 -req),这可能会改变 展示。 DER 格式是证书和 PEM 的 DER 编码 是带有页眉和页脚的DER编码的base64编码 添加的行。默认格式为 PEM。

      -优于 DER|PEM

      这里指定输出格式,选项含义相同 并默认为 -inform 选项。

      【讨论】:

      • 我正在尝试将 .cer 转换为 .pem。稍后在脚本中,我将不得不选择转换为 DER。我使用这个网站作为 openssl 命令字符串的基础。 knowledge.digicert.com/solution/SO26449.html。我以前做过,我不记得看到过同样的错误,但我可能弄错了
      • 该链接中与 DER 格式的对话不正确,也许它对旧的 openssl 版本有效(?)但现在不是这样。
      • 在你想要明确的情况下,你可以同时指定通知和通知,以确保它做你想要的。例如openssl x509 -in {infile} -inform der -out {outfile} -outform pem
      猜你喜欢
      • 1970-01-01
      • 2012-09-20
      • 2010-11-27
      • 2012-08-24
      • 2014-08-28
      • 2013-06-02
      • 2015-10-19
      • 2021-03-11
      • 1970-01-01
      相关资源
      最近更新 更多