parsingkeyid的证书 – Python

我做了一个Googlesearch,但没有find任何帮助我的东西。我试图在Microsoft Azurevalidation我的app ,所以我创build了一些自签名certificates 。 他们给出了一个关于如何parsingcrt的教程,然而它在PowerShell 。 我只使用Ubuntu / OS X 代码如下:

 $cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $cer.Import("mycer.cer") $bin = $cer.GetRawCertData() $base64Value = [System.Convert]::ToBase64String($bin) $bin = $cer.GetCertHash() $base64Thumbprint = [System.Convert]::ToBase64String($bin) $keyid = [System.Guid]::NewGuid().ToString() 

我将如何去在Python编写相同的代码? 我有.crt.key.csr.pass.keypkcs8_key文件。

更新:

我想从证书中提取keyIdcustomKeyIdentifier

@philippe,

根据你的描述,如果你想使用python获取证书信息,请参考这个简单的代码。 我使用.cer作为测试文件:

 import OpenSSL.crypto f=open("tested.cer", "rb") der = f.read() x509=OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, der) print("serial number",x509.get_serial_number()); print("Issue Name",x509.get_issuer()); print("subject_name_hash",x509.subject_name_hash()); idif=x509.get_extension(0) print("extension",x509.get_extension(0)) print("id",idif.get_data(),idif.get_short_name()) print("get_subject",x509.get_subject()); pkey = x509.get_pubkey() print("Public Key ",pkey) listdir=dir(pkey) print(listdir) print(pkey.bits()) print(pkey.type()) print(pkey._pkey) 

同时,如果你想获得一个证书信息keyIdcustomKeyIdentifier ,我建议你参考证书的这些属性和这个样本的定义 。 您可以在该页面上找到相应的属性。 通过这些属性,您可以获得您的证书及其extension信息。 而且你也可以参考这个API文件。 如果我误解了,请随时告诉我。

您不需要Python或PowerShell解析Microsoft Azure的证书。

该文档描述了需要的3个属性:

 "keyCredentials": [ { "customKeyIdentifier": "$base64Thumbprint_from_above", "keyId": "$keyid_from_above", "type": "AsymmetricX509Cert", "usage": "Verify", "value": "$base64Value_from_above" }], 
  • $base64Thumbprint是证书的sha1散列的base64编码(der格式)
  • $keyid只是一个随机的guuid
  • $base64Value是整个证书的base64编码(der格式)

生成证书

要生成一个自签名证书( x509与rsa 2048)

 $ openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt 

计算base64指纹

 $ openssl x509 -outform der -in certificate.crt | openssl dgst -binary -sha1 | openssl base64 

计算base64

 $ openssl x509 -outform der -in certificate.crt | openssl base64 -A 

生成一个随机的uuid

 $ python -c "import uuid; print(uuid.uuid4())" 

我检查与PowerShell生成的结果,也有相同的