2013-03-04 150 views
1

我试图从VB.NET服务器应用程序访问Google Analytics API。我的应用程序属于“服务帐户”应用程序的类别,因此我不会向用户请求凭据 - 该应用程序拥有自己的凭据,用于从Google检索数据以显示给用户。如何从.p12文件中提取私钥字符串?

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") 

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

+0

我不认为你可以从任何东西中提取私钥。 – 2013-03-04 18:23:11

+0

对您有帮助吗?使用私钥导出证书:http://technet.microsoft.com/en-us/library/cc737187(v=ws.10).aspx。谷歌搜索[证书导出私钥]会返回许多有希望的结果。 – 2013-03-04 20:19:22

+0

@ DanielA.White我不确定你的意思是... PKCS12是“档案文件格式,通常用于直接存储私钥和X.509证书。” ([Wikipedia](http://en.wikipedia.org/wiki/PKCS_12)) – bdesham 2013-03-06 14:28:28

回答

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米歇尔指出,我只需要在基于64位编码的关键数据。

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