【问题标题】:How do you extract a private-key string from a .p12 file?如何从 .p12 文件中提取私钥字符串?
【发布时间】:2013-03-04 18:21:46
【问题描述】:

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

service-account OAuth2 workflow 要求应用程序生成 JWT(JSON Web 令牌)作为对自身进行身份验证的一种方式。我找到了a .NET library 来生成这些令牌,但我对给这个库提供哪个“密钥”有点困惑。在库的文档中,给出的示例键是一个 base-64 外观的数字和大写和小写字母字符串。但我拥有的是一个.p12 私钥文件和相应的密码。如何从这个密钥文件中提取某种文本密钥?

我试图做类似的事情

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

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

【问题讨论】:

  • 我认为您无法从任何东西中提取私钥。
  • 这有用吗?使用私钥导出证书:technet.microsoft.com/en-us/library/cc737187(v=ws.10).aspx。对 [证书导出私钥] 进行 Google 搜索会返回许多有希望的结果。
  • @DanielA.White 我不确定你的意思...... PKCS12 是“一种存档文件格式,通常用于直接存储私钥及其 X.509 证书。” (Wikipedia)
  • @JimMischel 谢谢,但那是为了从系统集合中提取证书......我正在尝试以编程方式从文件中提取密钥。多用谷歌搜索也无济于事。
  • 好吧,pkcs12 实用程序 (OpenSSL) 可以读取文件并导出密钥。因此,在最坏的情况下,您可以找到该程序的源代码并对其进行逆向工程。但它确实看起来应该回答你的问题:stackoverflow.com/q/5036590/56778。而且,是的,证书是一个字节数组。当您看到文本表示时,它通常是 base64 编码的。

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


【解决方案1】:

我相信我已经知道该怎么做了:

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(“密钥在指定状态下无效。”)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 1970-01-01
    • 2011-07-25
    • 2018-09-24
    • 1970-01-01
    • 2017-12-15
    • 2020-06-30
    • 2019-06-07
    相关资源
    最近更新 更多