python - 在 Python 中从 .pfx 证书获取公钥

标签 python google-cloud-platform public-key-encryption pem pfx

我这样做是为了通过写出 pem 文件来处理 pfx 证书。

我怎样才能取出public_key?我注意到 p12 对象没有 get_publickey() 方法。

import contextlib
import OpenSSL.crypto
import os
import requests
import ssl
import tempfile
pfx_password = 'thiscertpassword' 
tpem = 'temppem.pem' 
pfxfile = 'fts.pfx' 


f_pem = open(tpem, 'wb')
pfx = open(pfxfile, 'rb').read()
p12 = OpenSSL.crypto.load_pkcs12(pfx, pfx_password)

f_pem.write(OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, 
p12.get_privatekey()))
#f_pem.write(OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_PEM,  
p12.get_publickey()))  # NO SUCH METHOD 
f_pem.write(OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, 
p12.get_certificate()))

最佳答案

用于提取适合写入文件或用于进一步处理(例如验证签名 JWT)的公钥的示例代码。重要的一点是公钥是从证书中提取的。

我将此代码与 Google 服务帐户 P12 凭据结合使用。

此代码生成的公钥将如下所示:

b'-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFDEADbeefMIIBCgKCAQEA5vFQucW2JW2WBhLI3dB0\n8OIkgCJPJDxoJ65kphmFSB2ZWsejV/iSecoIBYLyD2+HdHJm8pUgOOy05lm07gei\n0BRqLNYtUk2nlQIMoLPXxv23+VOWdpN/mYUsRhRwB13Aq4BybxObq+c7b08YWitI\nEtPmSEv+YkKlpcGzQcfctT7GNjjBqWuUuM1dxAqJll6JIEGAWEsDeTh9YOqnBnRb\nAWxI62D9/9bVnLkRWv0S9gfOZLuboVBhBSbHQyjbeefDeAd1J6nToug7wdxC66r1\n55lLzf9Ow9KPlsj30d6Alv59xX9QEU3MfIEfyxGiIHNTX6g8A3XUHOtgdmDyVB//\nXwIDAQAB\n-----END PUBLIC KEY-----\n'

Python 3.x 代码:

import OpenSSL.crypto

def load_public_key(pfx_path, pfx_password):
        ''' Read the public key and return as PEM encoded '''

        # print('Opening:', pfx_path)
        with open(pfx_path, 'rb') as f:
                pfx_data = f.read()

        # print('Loading PFX contents:')
        pfx = OpenSSL.crypto.load_pkcs12(pfx_data, pfx_password)

        public_key = OpenSSL.crypto.dump_publickey(
                OpenSSL.crypto.FILETYPE_PEM,
                pfx.get_certificate().get_pubkey())   # Change to pfx.

        print(public_key)

        return public_key

关于python - 在 Python 中从 .pfx 证书获取公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123944/

相关文章:

google-cloud-platform - Google Cloud Bigtable 压缩

r - 在 RStudio 中访问来自 Google 云存储的文件

security - 成为自己的证书颁发机构并为电子邮件加密进行 self 签名有什么问题?

encryption - 公钥的长度(加密)可以与私钥不同吗?

java - 何时使用 X509EncodedKeySpec 与 RSAPublicKeySpec?

python - 如何使用 Python API 附加到 DolphinDB 数据库内存表?

python - python 中的 Bash 参数

python - 加速 Python 中的列表处理

python - 在 Django View 中更改时间格式

linux - Compute Engine Linux 用户及其与服务帐号的关系