获取证书的签名 (.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 要求的证书名称是啥?)
iOS https自签名证书— xxx.crt 转化成xxx.cer 格式