获取证书的签名 (.cer)

Posted

技术标签:

【中文标题】获取证书的签名 (.cer)【英文标题】:Obtaining the signature of a certificate (.cer) 【发布时间】:2022-01-03 14:49:34 【问题描述】:

我尝试按照here 的描述创建客户端断言。

在本文档的第三部分(签名)中,我不知道如何按照文档中的要求获取我的证书签名。我的证书是我计算机上这样创建的 .cer 文件:

$cert = New-SelfSignedCertificate -Subject "CN=Certiftest" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
Export-Certificate -cert $cert -FilePath "path\Certiftest.cer"

为了得到签名,我试过了:

openssl x509 -inform der -in "path\Certiftest.cer" -text -noout -certopt ca_default -certopt no_validity -certopt no_serial -certopt no_subject -certopt no_extensions -certopt no_signame

但签名与文档中的格式不同。

我得到了什么:

Signature Algorithm: sha256WithRSAEncryption
         58:4c:52:d1:43:d4:5s:c1:56:bf:be:08:1b:29:ab:68:19:43:
         41:b6:91:0e:fe:46:39:35:46:e6:3b:6a:e7:80:7f:6a:7d:b5:
         9f:ce:0d:ff:17:26:e9:9f:a3:48:91:15:19:96:eb:c2:e3:36:
         64:3f:19:7c:cd:c4:e9:9f:a3:48:91:15:19:96:eb:c2:e3:36:
         cb:ce:f3:8f:fa:75:f5:d8:33:1f:e5:a6:e0:ff:22:b8:da:e0:
         *****************************************************
         53:85:74:35:e1:e6:bf:3e:e4:58:44:29:05:86:3b:6b:58:b9:
         1e:1f:0e:bc:35:4b:7d:ee:1f:ff:34:bc:5e:e5:3b:6b:58:b9:
         d2:b5:d4:a3

他们在文件中得到了什么:

"Gh95kHCOEGq5E_ArMBbDXhwKR577scxYaoJ1Pa lot of characters hereKKJDEg"

谢谢,

【问题讨论】:

JWS 格式在RFC7515中描述 【参考方案1】:

您的“签名”以十六进制编码,而您提到的示例依赖于 base64 编码(RFC7515 要求)。

引用 RFC:“JWS 签名输入始终是编码的 JWS 标头、句点 ('.') 字符和编码的 JWS 有效负载的串联。” 在您的情况下,似乎对如何使用 openssl 存在误解:** x509** 用于证书操作(例如,将证书从一种形式转换为另一种形式,签署 CSR 等)。对于签名,请查看 dgst 命令。

以下问题也可以帮助您使用 openssl 生成签名:How to create a Json Web Token (JWT) using OpenSSL shell commands?

【讨论】:

以上是关于获取证书的签名 (.cer)的主要内容,如果未能解决你的问题,请参考以下文章

使用 .cer 文件对 .exe 进行签名(signtool.exe 要求的证书名称是啥?)

怎么在windows上openssl颁发代码签名证书?

iOS https自签名证书— xxx.crt 转化成xxx.cer 格式

iOS https自签名证书— xxx.crt 转化成xxx.cer 格式

如何生成自签名双向认证证书 ssl

如何制作和应用数字签名证书