我做了一个Google
search,但没有find任何帮助我的东西。我试图在Microsoft Azure
validation我的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.key
和pkcs8_key
文件。
我想从证书中提取keyId
和customKeyIdentifier
。
@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)
同时,如果你想获得一个证书信息keyId
和customKeyIdentifier
,我建议你参考证书的这些属性和这个样本的定义 。 您可以在该页面上找到相应的属性。 通过这些属性,您可以获得您的证书及其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生成的结果,也有相同的