C# 使用RSA SHA 256对字符串进行签名,仅将私钥作为字符串.NET
我们正在通过RESTful API与Google进行集成,我需要用RSA-SHA256对JWT的有效负载进行签名,我所拥有的只是一个字符串形式的私钥,看起来像C# 使用RSA SHA 256对字符串进行签名,仅将私钥作为字符串.NET,c#,jwt,rsa,sha256,sign,C#,Jwt,Rsa,Sha256,Sign,我们正在通过RESTful API与Google进行集成,我需要用RSA-SHA256对JWT的有效负载进行签名,我所拥有的只是一个字符串形式的私钥,看起来像 -----BEGIN PRIVATE KEY----- MIIEvgIBfADANBg9qhkdsiG9w0BAQEFAASCBKgw ...... -----END PRIVATE KEY----- 我一直在到处寻找解决方案,但每个人都在谈论X509Certificate2,它需要一个p12文件或一些证书。现在我没有这两个,我只有一个
-----BEGIN PRIVATE KEY-----
MIIEvgIBfADANBg9qhkdsiG9w0BAQEFAASCBKgw
......
-----END PRIVATE KEY-----
我一直在到处寻找解决方案,但每个人都在谈论X509Certificate2
,它需要一个p12文件或一些证书。现在我没有这两个,我只有一个字符串作为私钥
谷歌推荐,它可以使用键字符串,但我需要我的代码来完成。页面中列出了3个库:
X509Certificate2
,或者专门针对字符串密钥,它只有一个指向此位置的链接,该位置使用了一些我没有的证书文件,这使得它从一开始就是一个错误且没有帮助的链接所以我的问题是,我的案例是否有可行的解决方案?因为我不敢相信没有其他人能与Google集成。我知道一种方法可以将其转换为pfx,您可以在C#中使用 首先,如果尚未安装OpenSSL,请安装OpenSSL。(您可以从中获得最新的“Win64 OpenSSL v#.#.#.#x Light”,但我对此来源不承担任何责任。) 您可能希望将“C:\Program Files\OpenSSL\bin\”添加到帐户的path变量中,以便可以从命令行中的任何位置使用“OpenSSL.exe” 在命令窗口中,导航到私钥文件所在的位置。让我们称之为“私钥”。发出以下两个命令,忽略注释:
# Create public self-signed certificate CRT file (with 7000yr validity) from private key (may leave all info empty)
openssl req -x509 -sha256 -new -key priv.pem -out pub.crt -days 2555000
# Combine into PFX container (encrypted with AES-256) (certificate needs to be included for .NET to read successfully)
openssl pkcs12 -export -aes256 -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider" -inkey priv.pem -in pub.crt -out priv.pfx
请注意,在最后一个命令中,我创建了一个加密的pfx(这是可选的-我相信您可以用-nodes
替换-aes256
以跳过它),并且我正在配置加密提供程序,以便密钥可以用于SHA256操作,而无需C
现在您有了一个pfx文件,可以使用X509Certificate2
的构造函数加载该文件
我倾向于将此备忘单用于常见的OpenSSL命令:
钥匙到底有多长?还有更多关于
…
的内容,对吗?您可以使用Convert.FromBase64String将其转换为字节,然后查看X509类是否喜欢将其作为rawData.bommelding,整个密钥(带有“-----开始私钥----”和结尾)是1676个字符,长度约为1k字节,足以用于证书。现在找出它的格式。在Visual studio中检查字节可能是一个快速的开始。@bommelding:几乎可以肯定这是PKCS8私钥,而不是证书。他没有证书,只有私钥。@JamesKPolk我的说明包括基于该私钥创建证书,特别是允许我们创建pfx。