首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从.crt文件中获取.cer & .key文件

从.crt文件中获取.cer & .key文件
EN

Stack Overflow用户
提问于 2022-09-05 10:30:50
回答 1查看 418关注 0票数 0

以下命令用于通过openssl对字符串进行签名:

代码语言:javascript
运行
复制
smime -sign -signer cert.crt -inkey key.key -engine gost -binary -noattr

假设.cer文件中包含密钥,那么如何执行相同的命令呢?

我假设有两种选择:

  1. 重写命令以使用内部密钥
  2. 将.cer文件转换为.crt并从中提取.key,以便使用w/o重写现有命令

更新:文件内部如下所示:(使用openssl x509 -in cert.cer -noout -text,用X_X_X替换敏感数据):

代码语言:javascript
运行
复制
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            X_X_X
        Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
        Issuer: X_X_X
        Validity
            X_X_X
            X_X_X
        Subject: X_X_X
        Subject Public Key Info:
            Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus
            Unable to load Public Key
842D0000:error:03000072:digital envelope routines:X509_PUBKEY_get0:decode error:crypto\x509\x_pubkey.c:458:
842D0000:error:03000072:digital envelope routines:X509_PUBKEY_get0:decode error:crypto\x509\x_pubkey.c:458:
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment, Key Agreement
            X509v3 Subject Alternative Name:
                othername: title::<unsupported>
            X509v3 Extended Key Usage:
                TLS Web Server Authentication, TLS Web Client Authentication, 1.2.643.2.1.6.8.5, 1.2.643.3.61.502710.1.6.3.2, 1.2.643.3.251.1.1, 1.2.643.3.251.3
            X509v3 Certificate Policies:
                Policy: Class of Signing Tool KC1
            1.2.643.100.114:
                ...
            Signing Tool of Subject:
                X_X_X
            Signing Tool of Issuer:
                signTool    : X_X_X
                cATool      : X_X_X
                signToolCert: X_X_X
                cAToolCert  : X_X_X
            X509v3 CRL Distribution Points:
                Full Name:
                  X_X_X
                Full Name:
                  X_X_X
            Authority Information Access:
                CA Issuers - X_X_X
                CA Issuers - X_X_X
            X509v3 Subject Key Identifier:
                X_X_X
            X509v3 Authority Key Identifier:
                keyid:X_X_X
                DirName:X_X_X
                serial:X_X_X
    Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)
    Signature Value:
        X_X_X
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 10:22:51

我想有几件事需要注意。

文件后缀

首先,应该注意的是,问题中所建议的“.crt或.cer文件”是不一样的。这些只是文件后缀,您无法从中派生出实际的文件格式。

例如,在Windows中创建的.cer文件通常是DER (二进制)格式,而openssl默认为PEM (基-64文本)格式。.crt也是如此,它只是在Windows中更常用的后缀。其他后缀是.der.pem,这表明它们的后缀和格式匹配。

openssl可以处理这两种格式。您可以使用openssl-inform pem选项让-inform pem知道输入格式。

私钥

我假设您想要签名一封电子邮件,因为您使用的是smime选项(虽然您提到要签名一个字符串,但在您的上下文中可能是相同的)。

为了签署一条消息,你需要一个私钥。如果给您的S/MIME证书文件显然包括私钥(有时称为私有证书),则不应该首先提取密钥。只是不要使用-inkey选项。

引用自openssl小型文档

如果未指定此选项,则必须将私钥包括在-recip或-signer文件指定的证书文件中。

若要使用PEM格式的证书创建明文签名消息,请使用

代码语言:javascript
运行
复制
openssl smime -sign -in message.txt -text -out mail.msg -signer cert.crt

如果证书文件包含私钥,则证书文件不能是DER格式,因为DER格式只能容纳一个对象,因此证书和私钥需要在单独的DER文件中。另见这个关于PEM和DER之间的区别的答案。(感谢dave_thompson_085纠正我。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73607969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档