Używam kryptografii, aby załadować nowy certyfikat i pobrać swoje atrybuty.

from cryptography import x509
from cryptography.hazmat.backends import default_backend
path = "mycert.crt"
with open(path, 'rb') as cert_file:
    data = cert_file.read()
cert = x509.load_pem_x509_certificate(data, default_backend())
sign = cert.signature_algorithm_oid
iss = cert.issuer

Ostatnie dwa wydrukują wynik jako:

print sign
<ObjectIdentifier(oid=1.1.1.1.1.1.11, name=sha256WithRSAEncryption)>

print iss
<Name([<NameAttribute(oid=<ObjectIdentifier(oid=1.1.1.1, name=countryName)>, value=u'GR')>, <NameAttribute(oid=<ObjectIdentifier(oid=1.1.1.1, name=organizationName)>, value=u'MyTrust')>, <NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.3, name=commonName)>, value=u'MyTrust')>])>

Jak mogę odpowiednio uzyskać dostęp do jednego z tych atrybutów? Na przykład, chcę wydrukować tylko sha256WithRSAEncryption i tylko C=GR, O=MyTrust, CN=MyTrust

Po odpowiedzi Danielle aktualizuję pytanie.

>>> dir(iss)   
>>> ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__len__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_attributes', 'get_attributes_for_oid', 'public_bytes', 'rdns']

A kiedy wydrukować, nadal jest trudny do uzyskania dostępu:

>>> print(iss.__dict__)  
>>> {'_attributes': [<RelativeDistinguishedName([<NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.6, name=countryName)>, value=u'GR')>])>, <RelativeDistinguishedName([<NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.10, name=organizationName)>, value=u'MyTrust')>])>, <RelativeDistinguishedName([<NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.11, name=organizationalUnitName)>, value=u'MyTrust')>])>, <RelativeDistinguishedName([<NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.3, name=commonName)>, value=u'MyTrust')>])>]}

Jak mogę uzyskać wszystkie wartości? Nazwa rundNameNameName OrganizationalunitName CommoneName itp

2
belabrinel 27 luty 2019, 20:04

2 odpowiedzi

Najlepsza odpowiedź

Jeśli chcesz sprawdzić obiekt i znajdź swoje atrybuty, spróbuj funkcji dir():

>>> dir(sign)
>>> ['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_dotted_string', '_name', 'dotted_string']

Może _name?

>>> print(sign._name)
>>> sha1WithRSAEncryption

https://docs.PYTHON.org/2/library/functions.html#dir.

1
Danielle M. 27 luty 2019, 17:13

W drugiej części pytania piszę tutaj odpowiedź.

>>> cert.issuer
>>> for attribute in cert.issuer:
... print(attribute.oid._name)
... print(attribute.value)

countryName
GR
stateOrProvinceName
Blah
localityName
Blah
organizationName
MyTrust
organizationalUnitName
MyTrust
commonName
MyTrust

Dzięki Danielle, które dało mi wgląd w zakres funkcji: Dir () !!!

0
belabrinel 28 luty 2019, 11:51