如何从.p12文件中提取私钥字符串?

时间:2013-03-04 18:21:46

标签: .net vb.net google-api google-analytics-api jwt

我正在尝试从VB.NET服务器应用程序访问Google AnalyticsAPI。我的应用程序属于“服务帐户”应用程序的类别,因此我不会向用户请求凭据 - 该应用程序具有自己的凭据,用于从Google检索数据以向用户显示。

service-account OAuth2 workflow要求应用程序生成JWT(JSON Web令牌)作为验证自身的方法。我发现a .NET library生成了这些令牌,但是我对这个库的“关键”感到困惑。在库的文档中,给出的示例键是一个基于64的数字字符串以及大写和小写字母。但我所拥有的是.p12私钥文件和相应的密码。如何从此密钥文件中提取某种文本密钥?

我尝试做类似

的事情
Dim cert As New X509Certificate2("C:\Users\xxxxx\private.p12", "notasecret")
Dim certData As Byte() = cert.Export(X509ContentType.Pkcs12, "notasecret")

但这给我留下了一个字节数组,而不是一个字符串。我在这里走在正确的轨道上吗?

1 个答案:

答案 0 :(得分:2)

我相信我已经弄明白该怎么做了:

Dim PrivateKeyPath As String = "C:\Users\xxxxx\privatekey.p12"
Dim CertificatePassword As String = "notasecret"

Dim cert As New X509Certificate2(PrivateKeyPath, CertificatePassword,
                                 X509KeyStorageFlags.Exportable)
Dim certData As Byte() = cert.Export(X509ContentType.Pkcs12, CertificatePassword)
Dim keyString As String = Convert.ToBase64String(certData)

正如@Jim Mischel指出的那样,我只需要在base-64中对关键数据进行编码。

顺便说一句,在尝试导出密钥时,添加X509KeyStorageFlags.Exportable标志修复了CryptographicException(“密钥无法在指定状态下使用。”)。