我进行了Google
搜索,但我找不到任何可以帮助我的内容。我正在尝试在app
中验证我的Microsoft Azure
,所以我创建了一些自我已签名certificates
。他们提供了一个如何解析crt
的教程,不过它在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
。
答案 0 :(得分:1)
@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
的证书信息,建议您参考define of these properties of certificate and this sample。您可以在该页面上找到相应的属性。使用这些属性,您可以获取证书及其extension
信息。你也可以参考这个API documents.如果我误解了,请随时告诉我。
答案 1 :(得分:0)
您不需要python或powershell来解析Microsoft Azure的证书。
documentation描述了所需的3个属性:
"keyCredentials": [
{
"customKeyIdentifier": "$base64Thumbprint_from_above",
"keyId": "$keyid_from_above",
"type": "AsymmetricX509Cert",
"usage": "Verify",
"value": "$base64Value_from_above"
}],
$base64Thumbprint
是证书的sha1哈希的base64编码(格式)$keyid
只是一个随机的guuid $base64Value
是整个证书的base64编码(格式为)生成自签名证书(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生成的结果,并且有相同的