Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解析证书的keyid-Python_Python_Windows_Powershell_Azure_X509certificate - Fatal编程技术网

解析证书的keyid-Python

解析证书的keyid-Python,python,windows,powershell,azure,x509certificate,Python,Windows,Powershell,Azure,X509certificate,我做了一个Google搜索,但没有找到任何对我有帮助的东西。我正在Microsoft Azure中尝试验证我的app,所以我创建了一些自签名证书。他们提供了一个如何解析crt的教程,但是它在PowerShell中。我只使用Ubuntu/OSX。代码如下: $cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 $cer.Import("mycer.cer") $bin = $cer.GetR

我做了一个
Google
搜索,但没有找到任何对我有帮助的东西。我正在
Microsoft Azure
中尝试验证我的
app
,所以我创建了一些自签名
证书。他们提供了一个如何解析
crt
的教程,但是它在
PowerShell
中。我只使用
Ubuntu
/
OSX
。代码如下:

$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\u key
文件

更新: 我想从证书中提取
keyId
customKeyIdentifier

菲利普

根据您的描述,如果您想使用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
,建议您参考。您可以在该页上找到相应的属性。使用这些属性,您可以获取证书及其
扩展名
信息。如果我有误解,您也可以参考此内容,请随时告诉我。

您不需要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
    只是一个随机的GUID
  • $base64Value
    是整个证书的base64编码(der格式)
生成证书 生成自签名证书的步骤(使用rsa 2048)

计算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生成的结果进行了检查,并且在这个powershell代码中有相同的
$keyid
,它只是生成了一个新的GUID;它与证书本身无关,也不基于证书中的任何内容。另一方面,指纹是证书的哈希,基于证书的内容。在您发布的代码中,
$keyid
每次都会不同(您只需要最后一行),但对于给定的证书,指纹每次都是相同的。因此您可能需要澄清您需要哪些信息。我想您可以参考这些线程和。@philippe,我对您的场景非常感兴趣。您获取证书信息的目的是什么?正如我所知,如果我们想验证应用程序,我们可以使用Azure AD。或通过将我们的证书上载到Azure,并与应用程序上的证书进行比较。如果您能提供更多信息与我们一起寻找更好的解决方案,我们将不胜感激。@will shao msft我想知道如何提取公钥值?我刚刚用打印pkey尝试了您的示例。\u pkey
,但出于某种原因,我得到了一些奇怪的cdata结构,返回方式如下
你知道如何获得公钥的真正价值吗?顺便说一句,我使用的是Python2.7,这有关系吗?
$ python -c "import uuid; print(uuid.uuid4())"