2013-03-04 34 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(「密鑰無法在指定狀態下使用」。)。