Certificate

Bases: InitCryptoParser

An object describing a x509 Certificate

Attributes:
  • issuer (Name) –

    Certificate issuer

  • subject (Name) –

    Certificate subject

  • validity (Validity) –

    Contains information about NotBefore and NotAfter

  • extensions (Optional[Extensions]) –

    Certificate (v3) extensions

  • serial_number (Optional[int]) –

    Serial number

  • version (Optional[int]) –

    The version of the certificate

  • signature_algorithm (Optional[SignatureAlgorithm]) –

    Describes the algorithm used to sign the certificate

  • subject_public_key_info (Optional[SubjectPublicKeyInfo]) –

    The public key information

Examples
Create self signed certificate
import datetime

from pki_tools import Name, Certificate, Validity, RSAKeyPair, SHA512

name = Name(cn=["Cert CN"])

validity = Validity(
    not_before=datetime.datetime.today() - datetime.timedelta(days=1),
    not_after=datetime.datetime.today() + datetime.timedelta(days=1),
)

cert = Certificate(
    subject=name,
    issuer=name,
    validity=validity,
)

cert.sign(RSAKeyPair.generate(), SHA512)

print(cert)

Print output
Issuer: 'CN: Cert CN'
Serial Number: 000000000000000000000000D35C0881
Signature Algorithm: SHA512
Subject: 'CN: Cert CN'
Subject Public Key Info:
  Parameters:
    Key Size: '2048'
    Modulus N: |-
      24651952656163458827909525106986168390362313244380531363179274081705687882652429
      42724353284369423374164958731106228192983422927322035391927312930827505751347318
      10433836284050568792288057907409152147114335732376331606070709493414131825009878
      62483806985168774106048702295276425922168970742025356609804205385245796272234488
      03262804756628532016588575221328645948176714781737845302802392421145534382840728
      88871956041487370444145888612290281581252521370439236655085304445315900515237929
      95090348261387175920426292996964832750356977399684053672351531777248194875874047
      915774180897234671145523280260573598420850325221582548203
    Public Exponent E: '65537'
  Public Key Algorithm:
    key_size: '2048'
    modulus_n: |-
      24651952656163458827909525106986168390362313244380531363179274081705687882652429
      42724353284369423374164958731106228192983422927322035391927312930827505751347318
      10433836284050568792288057907409152147114335732376331606070709493414131825009878
      62483806985168774106048702295276425922168970742025356609804205385245796272234488
      03262804756628532016588575221328645948176714781737845302802392421145534382840728
      88871956041487370444145888612290281581252521370439236655085304445315900515237929
      95090348261387175920426292996964832750356977399684053672351531777248194875874047
      915774180897234671145523280260573598420850325221582548203
    public_exponent_e: '65537'
Validity:
  Not After: '2024-03-20 19:33:29.527993+00:00'
  Not Before: '2024-03-18 19:33:29.527980+00:00'


Create cross signed certificate
import datetime

from pki_tools import Name, Certificate, Validity, RSAKeyPair, SHA512

issuer_key = RSAKeyPair.generate()
issuer = Name(cn=["Issuer"])

cert_key = RSAKeyPair.generate()
name = Name(cn=["Cert CN"])

validity = Validity(
    not_before=datetime.datetime.today() - datetime.timedelta(days=1),
    not_after=datetime.datetime.today() + datetime.timedelta(days=1),
)

cert = Certificate(
    subject=name,
    issuer=issuer,
    validity=validity,
)

cert.sign(issuer_key, SHA512, req_key=cert_key.public_key)

print(cert)

Print output
Issuer: 'CN: Issuer'
Serial Number: 0000000000000000000000003C267E6C
Signature Algorithm: SHA512
Subject: 'CN: Cert CN'
Subject Public Key Info:
  Parameters:
    Key Size: '2048'
    Modulus N: |-
      25550756128772931813106243067085390318652289985739266496024024493670621116213956
      90489287706264037119626214099882014292713209808252800751866447746720100929151964
      46202070799749522898986797566961784783979561943444986102369066812692738828872782
      98496590414399721427120456071151219636141450460402387454495822527621877200003696
      17645095523313981050160559586782772916770185493147504794214581759473793032497010
      11770801177016538979288420774380352730095192197516118893069722645898883305709857
      14339419027910827270754661777912597663706493126575945938217017739081211471589786
      628051978875616847991393413089023920982485319876048712079
    Public Exponent E: '65537'
  Public Key Algorithm:
    key_size: '2048'
    modulus_n: |-
      25550756128772931813106243067085390318652289985739266496024024493670621116213956
      90489287706264037119626214099882014292713209808252800751866447746720100929151964
      46202070799749522898986797566961784783979561943444986102369066812692738828872782
      98496590414399721427120456071151219636141450460402387454495822527621877200003696
      17645095523313981050160559586782772916770185493147504794214581759473793032497010
      11770801177016538979288420774380352730095192197516118893069722645898883305709857
      14339419027910827270754661777912597663706493126575945938217017739081211471589786
      628051978875616847991393413089023920982485319876048712079
    public_exponent_e: '65537'
Validity:
  Not After: '2024-03-20 19:33:25.178142+00:00'
  Not Before: '2024-03-18 19:33:25.178128+00:00'


InitCryptoParser.from_pem_string
cert_pem
cert_pem = """
-----BEGIN CERTIFICATE-----
MIICsDCCAZigAwIBAgIUagjv68D6EIk/hIIA0mXliqJr/iIwDQYJKoZIhvcNAQEN
BQAwEjEQMA4GA1UEAwwHQ2VydCBDTjAeFw0yNDAzMDkxMzEwMTZaFw0yNDAzMTAx
MzEwMTZaMBIxEDAOBgNVBAMMB0NlcnQgQ04wggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDxw2sUZVazQcjpVN9NirPbQVLkPwIgFEQfOJwTXOhb2nofM0PA
edmVu+Kb5aw9+lZ3aJaLFOS2nFAdJ0gxINXsqdjVQ1Ok+uftWvanxql8GxDeD3sY
E92KyaRkzwyONq4dXefvRkB1j8w8gm9MbguFhZBMWlaKSqP/48mhWvJlca1zWAkY
H8moxXLcAIuvbc+qMbfNqah1LIvMkxlw1eiYogX8JPpd+OcuyPihXwIUHdl9s24S
ioqODCicBe8eegZZDfdlHQI/kyT88XqT5yHYXnhmgcjIDeCx1eAMXbVdUvzES/pi
qS7pNxvfZwLHvQsGDv7OaW+AoF7+MrunjXvtAgMBAAEwDQYJKoZIhvcNAQENBQAD
ggEBAAa6G9Xl0piwxXfVdr5gTcyHBMNfq9KzgdstTrgV38QXctiyREJW2Nu3A8mm
lsNBW+OyNOalKhYQSDrjG8D3VM6W5VfDlb2iYtBQRUfIkktSQ5/i8xifHulpHH5/
JTLMjePP+W2aOzu7o249PYnpizFsxwOWJGcF76Ouw98X/WKZMpJLSanS1hYmBrRi
vrZ+4lE8Vh4EO/pLMxktBot4cYAAYWIU6are0C4CW7LzmPRmkKcLmjxPDapEOj/d
iEEtcWJ2LNQ1UA0fzUEmrHGfasewdRpkY6K3/9psnnOOCH5T3cZfjawUq0cBpX81
C0c2MU/Ob0dcXJmIwbGA0PmIwVo=
-----END CERTIFICATE-----
"""
from pki_tools import Certificate

cert = Certificate.from_pem_string(cert_pem)

print(cert)

Print output
Issuer: 'CN: Cert CN'
Serial Number: 6A08EFEBC0FA10893F848200D265E58AA26BFE22
Signature Algorithm: SHA512
Signature Value: |-
  06BA1BD5E5D298B0C577D576BE604DCC8704C35FABD2B381DB2D4EB815DFC41772D8B2444256D8DB
  B703C9A696C3415BE3B234E6A52A1610483AE31BC0F754CE96E557C395BDA262D0504547C8924B52
  439FE2F3189F1EE9691C7E7F2532CC8DE3CFF96D9A3B3BBBA36E3D3D89E98B316CC70396246705EF
  A3AEC3DF17FD629932924B49A9D2D6162606B462BEB67EE2513C561E043BFA4B33192D068B787180
  00616214E9AADED02E025BB2F398F46690A70B9A3C4F0DAA443A3FDD88412D7162762CD435500D1F
  CD4126AC719F6AC7B0751A6463A2B7FFDA6C9E738E087E53DDC65F8DAC14AB4701A57F350B473631
  4FCE6F475C5C9988C1B180D0F988C15A
Subject: 'CN: Cert CN'
Subject Public Key Info:
  Parameters:
    Key Size: '2048'
    Modulus N: |-
      30519795842219718524154211452339367525522541418306388322222479091833299116991140
      09740263213211778932406753683969023225227261260389673597060169902106121179841034
      31187219419109541663272149747295496520180159087432616126691772239668099488528148
      13289122122347191908018216484406428594527992092037163959856854605762954418536599
      19979935283394834106080349369124577624086693846677247163161103215836435379325851
      79739035857994859657330621842935602784426350478700541817375449573933075543808561
      18104621405966149397007798324741701052325470419784481031726708819614894503041371
      625278920346237218103962726322958896412584334205897243629
    Public Exponent E: '65537'
  Public Key Algorithm:
    key_size: '2048'
    modulus_n: |-
      30519795842219718524154211452339367525522541418306388322222479091833299116991140
      09740263213211778932406753683969023225227261260389673597060169902106121179841034
      31187219419109541663272149747295496520180159087432616126691772239668099488528148
      13289122122347191908018216484406428594527992092037163959856854605762954418536599
      19979935283394834106080349369124577624086693846677247163161103215836435379325851
      79739035857994859657330621842935602784426350478700541817375449573933075543808561
      18104621405966149397007798324741701052325470419784481031726708819614894503041371
      625278920346237218103962726322958896412584334205897243629
    public_exponent_e: '65537'
Validity:
  Not After: '2024-03-10 13:10:16+00:00'
  Not Before: '2024-03-09 13:10:16+00:00'
Version: 2


InitCryptoParser.from_file
cert.pem
-----BEGIN CERTIFICATE-----
MIICsDCCAZigAwIBAgIUJDBA6chIz7alIJGj//DNL7Pq0HowDQYJKoZIhvcNAQEN
BQAwEjEQMA4GA1UEAwwHQ2VydCBDTjAeFw0yNDAzMTYxMzQzNTdaFw0yNDAzMTcx
MzQzNTdaMBIxEDAOBgNVBAMMB0NlcnQgQ04wggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDDtBdJp6oYQSIBuefvRphiau2GFGlPNvnyAm7DcVHLREiSSPX2
Ov8Krkg9/iqoZS3lcmEgj/BQMyySpJt+5Ggo60pbJBWHR86+jLBCwu687OAsfGtz
DQPN5xSWnC4K0OaUDm2doaGMcffzLL65ry/HV1XaRxxkK6HuZDt9VtyyrvSyXvMT
N0CuenLPx2b+t3owjg9wrCZghBsIQWkhCQiCN35UbEuZ3Wv3H1ezulNe0/r782NB
TXEmL6qGe/yx+//23vbmzIDar8UYEKrFNZ1yiugNWXLJKxwmxIyNtLr29MX5jrY+
yFxup5D0JTDyKRINq+dtzzLgxzPoOzMzEDZvAgMBAAEwDQYJKoZIhvcNAQENBQAD
ggEBADHeiK+JB6Z25afqGVSa1oIGEvCo8mi50/tcT+lH03Jt5x+bAKgPJGI8Gew/
0ko7JU3O8Sy3nTrVnLcgKSJiot6t7DMhWOSKTcuJTCOsr2WDgJQvF49yZfg+f5df
AWwXkraTwjJ0RoIHN/Kp0TZvgAlZhKkHFNnqT2laubjMIzeF6k/3o6HZCfBV83fu
YbzBK6rQjzFklxBN+ml2XX1aBMKYkqjbsfLpl7mAKUiZ58jxu6/FGTh6O8ffrr9z
iQBRwByulMBGxzitq/EUoTEeKvtiX5WFTetE19EE7Ojzy6c6qkNlwCjK49WF6smA
2IBk2TPLyVH4LeRc/XQi+Oj7ak0=
-----END CERTIFICATE-----

from pki_tools import Certificate

cert = Certificate.from_file("cert.pem")
print(cert)

Print output
Issuer: 'CN: Cert CN'
Serial Number: 243040E9C848CFB6A52091A3FFF0CD2FB3EAD07A
Signature Algorithm: SHA512
Signature Value: |-
  31DE88AF8907A676E5A7EA19549AD6820612F0A8F268B9D3FB5C4FE947D3726DE71F9B00A80F2462
  3C19EC3FD24A3B254DCEF12CB79D3AD59CB720292262A2DEADEC332158E48A4DCB894C23ACAF6583
  80942F178F7265F83E7F975F016C1792B693C2327446820737F2A9D1366F80095984A90714D9EA4F
  695AB9B8CC233785EA4FF7A3A1D909F055F377EE61BCC12BAAD08F316497104DFA69765D7D5A04C2
  9892A8DBB1F2E997B980294899E7C8F1BBAFC519387A3BC7DFAEBF73890051C01CAE94C046C738AD
  ABF114A1311E2AFB625F95854DEB44D7D104ECE8F3CBA73AAA4365C028CAE3D585EAC980D88064D9
  33CBC951F82DE45CFD7422F8E8FB6A4D
Subject: 'CN: Cert CN'
Subject Public Key Info:
  Parameters:
    Key Size: '2048'
    Modulus N: |-
      24705275634373472397913959111842546457302915278710046458429196107971203620518900
      85889996051958213090938989691323871611516168353538245753542340318167446221548635
      67911269725300641515785009885189293940887358974053993148509318435178111484052410
      72214344364244683088793223060590713951003322044817992841479781172826156997645163
      70784993866039143556837669831378860817098024438537135253644970737965953760024566
      22324555478329594901571378606988272402814596002534123398099376285556900954144977
      87439286935923126574798824924322834080550238750285058369308645348104266890130421
      563716816499870231348689769706202508344784145130254775919
    Public Exponent E: '65537'
  Public Key Algorithm:
    key_size: '2048'
    modulus_n: |-
      24705275634373472397913959111842546457302915278710046458429196107971203620518900
      85889996051958213090938989691323871611516168353538245753542340318167446221548635
      67911269725300641515785009885189293940887358974053993148509318435178111484052410
      72214344364244683088793223060590713951003322044817992841479781172826156997645163
      70784993866039143556837669831378860817098024438537135253644970737965953760024566
      22324555478329594901571378606988272402814596002534123398099376285556900954144977
      87439286935923126574798824924322834080550238750285058369308645348104266890130421
      563716816499870231348689769706202508344784145130254775919
    public_exponent_e: '65537'
Validity:
  Not After: '2024-03-17 13:43:57+00:00'
  Not Before: '2024-03-16 13:43:57+00:00'
Version: 2


InitCryptoParser.to_file
cert_pem
cert_pem = """
-----BEGIN CERTIFICATE-----
MIICsDCCAZigAwIBAgIUagjv68D6EIk/hIIA0mXliqJr/iIwDQYJKoZIhvcNAQEN
BQAwEjEQMA4GA1UEAwwHQ2VydCBDTjAeFw0yNDAzMDkxMzEwMTZaFw0yNDAzMTAx
MzEwMTZaMBIxEDAOBgNVBAMMB0NlcnQgQ04wggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDxw2sUZVazQcjpVN9NirPbQVLkPwIgFEQfOJwTXOhb2nofM0PA
edmVu+Kb5aw9+lZ3aJaLFOS2nFAdJ0gxINXsqdjVQ1Ok+uftWvanxql8GxDeD3sY
E92KyaRkzwyONq4dXefvRkB1j8w8gm9MbguFhZBMWlaKSqP/48mhWvJlca1zWAkY
H8moxXLcAIuvbc+qMbfNqah1LIvMkxlw1eiYogX8JPpd+OcuyPihXwIUHdl9s24S
ioqODCicBe8eegZZDfdlHQI/kyT88XqT5yHYXnhmgcjIDeCx1eAMXbVdUvzES/pi
qS7pNxvfZwLHvQsGDv7OaW+AoF7+MrunjXvtAgMBAAEwDQYJKoZIhvcNAQENBQAD
ggEBAAa6G9Xl0piwxXfVdr5gTcyHBMNfq9KzgdstTrgV38QXctiyREJW2Nu3A8mm
lsNBW+OyNOalKhYQSDrjG8D3VM6W5VfDlb2iYtBQRUfIkktSQ5/i8xifHulpHH5/
JTLMjePP+W2aOzu7o249PYnpizFsxwOWJGcF76Ouw98X/WKZMpJLSanS1hYmBrRi
vrZ+4lE8Vh4EO/pLMxktBot4cYAAYWIU6are0C4CW7LzmPRmkKcLmjxPDapEOj/d
iEEtcWJ2LNQ1UA0fzUEmrHGfasewdRpkY6K3/9psnnOOCH5T3cZfjawUq0cBpX81
C0c2MU/Ob0dcXJmIwbGA0PmIwVo=
-----END CERTIFICATE-----
"""
from pki_tools import Certificate

cert = Certificate.from_pem_string(cert_pem)

cert.to_file("out_cert.pem")

out_cert.pem
-----BEGIN CERTIFICATE-----
MIICsDCCAZigAwIBAgIUagjv68D6EIk/hIIA0mXliqJr/iIwDQYJKoZIhvcNAQEN
BQAwEjEQMA4GA1UEAwwHQ2VydCBDTjAeFw0yNDAzMDkxMzEwMTZaFw0yNDAzMTAx
MzEwMTZaMBIxEDAOBgNVBAMMB0NlcnQgQ04wggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDxw2sUZVazQcjpVN9NirPbQVLkPwIgFEQfOJwTXOhb2nofM0PA
edmVu+Kb5aw9+lZ3aJaLFOS2nFAdJ0gxINXsqdjVQ1Ok+uftWvanxql8GxDeD3sY
E92KyaRkzwyONq4dXefvRkB1j8w8gm9MbguFhZBMWlaKSqP/48mhWvJlca1zWAkY
H8moxXLcAIuvbc+qMbfNqah1LIvMkxlw1eiYogX8JPpd+OcuyPihXwIUHdl9s24S
ioqODCicBe8eegZZDfdlHQI/kyT88XqT5yHYXnhmgcjIDeCx1eAMXbVdUvzES/pi
qS7pNxvfZwLHvQsGDv7OaW+AoF7+MrunjXvtAgMBAAEwDQYJKoZIhvcNAQENBQAD
ggEBAAa6G9Xl0piwxXfVdr5gTcyHBMNfq9KzgdstTrgV38QXctiyREJW2Nu3A8mm
lsNBW+OyNOalKhYQSDrjG8D3VM6W5VfDlb2iYtBQRUfIkktSQ5/i8xifHulpHH5/
JTLMjePP+W2aOzu7o249PYnpizFsxwOWJGcF76Ouw98X/WKZMpJLSanS1hYmBrRi
vrZ+4lE8Vh4EO/pLMxktBot4cYAAYWIU6are0C4CW7LzmPRmkKcLmjxPDapEOj/d
iEEtcWJ2LNQ1UA0fzUEmrHGfasewdRpkY6K3/9psnnOOCH5T3cZfjawUq0cBpX81
C0c2MU/Ob0dcXJmIwbGA0PmIwVo=
-----END CERTIFICATE-----

hex_serial property
hex_serial: str

Parses the certificate serial into hex format

Returns:
  • str

    String representing the hex value of the certificate serial number

public_key property
public_key: bytes
Returns:
  • bytes

    The bytes of the public key in PEM format

sign_alg_oid_name property
sign_alg_oid_name: str
Returns:
  • str

    The name of the signature algorithm such as: SHA512WITHRSA

tbs_bytes property
tbs_bytes: bytes
Returns:
  • bytes

    The to be signed bytes of this certificate

digest
digest(algorithm: HashAlgorithm = HashAlgorithm(name=HashAlgorithmName.SHA512)) -> str

Gets the base64 encoded fingerprint of the certificate

Parameters:
Returns:
  • str

    Hashed and base64 encoded certificate fingerprint

from_cryptography classmethod
from_cryptography(cert: x509.Certificate) -> Certificate

Create a Certificate object from a cryptography.x509.Certificate object.

Parameters:
  • cert (x509.Certificate) –

    The cryptography.x509.Certificate object.

Returns:
  • Certificate( Certificate ) –

    The created Certificate object.

Example
crypto_cert
from cryptography import x509

cert_pem = """
-----BEGIN CERTIFICATE-----
MIICsDCCAZigAwIBAgIUagjv68D6EIk/hIIA0mXliqJr/iIwDQYJKoZIhvcNAQEN
BQAwEjEQMA4GA1UEAwwHQ2VydCBDTjAeFw0yNDAzMDkxMzEwMTZaFw0yNDAzMTAx
MzEwMTZaMBIxEDAOBgNVBAMMB0NlcnQgQ04wggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDxw2sUZVazQcjpVN9NirPbQVLkPwIgFEQfOJwTXOhb2nofM0PA
edmVu+Kb5aw9+lZ3aJaLFOS2nFAdJ0gxINXsqdjVQ1Ok+uftWvanxql8GxDeD3sY
E92KyaRkzwyONq4dXefvRkB1j8w8gm9MbguFhZBMWlaKSqP/48mhWvJlca1zWAkY
H8moxXLcAIuvbc+qMbfNqah1LIvMkxlw1eiYogX8JPpd+OcuyPihXwIUHdl9s24S
ioqODCicBe8eegZZDfdlHQI/kyT88XqT5yHYXnhmgcjIDeCx1eAMXbVdUvzES/pi
qS7pNxvfZwLHvQsGDv7OaW+AoF7+MrunjXvtAgMBAAEwDQYJKoZIhvcNAQENBQAD
ggEBAAa6G9Xl0piwxXfVdr5gTcyHBMNfq9KzgdstTrgV38QXctiyREJW2Nu3A8mm
lsNBW+OyNOalKhYQSDrjG8D3VM6W5VfDlb2iYtBQRUfIkktSQ5/i8xifHulpHH5/
JTLMjePP+W2aOzu7o249PYnpizFsxwOWJGcF76Ouw98X/WKZMpJLSanS1hYmBrRi
vrZ+4lE8Vh4EO/pLMxktBot4cYAAYWIU6are0C4CW7LzmPRmkKcLmjxPDapEOj/d
iEEtcWJ2LNQ1UA0fzUEmrHGfasewdRpkY6K3/9psnnOOCH5T3cZfjawUq0cBpX81
C0c2MU/Ob0dcXJmIwbGA0PmIwVo=
-----END CERTIFICATE-----
"""

crypto_cert = x509.load_pem_x509_certificate(cert_pem.encode())
from pki_tools import Certificate

cert = Certificate.from_cryptography(crypto_cert)

print(cert)

Print output
Issuer: 'CN: Cert CN'
Serial Number: 6A08EFEBC0FA10893F848200D265E58AA26BFE22
Signature Algorithm: SHA512
Signature Value: |-
  06BA1BD5E5D298B0C577D576BE604DCC8704C35FABD2B381DB2D4EB815DFC41772D8B2444256D8DB
  B703C9A696C3415BE3B234E6A52A1610483AE31BC0F754CE96E557C395BDA262D0504547C8924B52
  439FE2F3189F1EE9691C7E7F2532CC8DE3CFF96D9A3B3BBBA36E3D3D89E98B316CC70396246705EF
  A3AEC3DF17FD629932924B49A9D2D6162606B462BEB67EE2513C561E043BFA4B33192D068B787180
  00616214E9AADED02E025BB2F398F46690A70B9A3C4F0DAA443A3FDD88412D7162762CD435500D1F
  CD4126AC719F6AC7B0751A6463A2B7FFDA6C9E738E087E53DDC65F8DAC14AB4701A57F350B473631
  4FCE6F475C5C9988C1B180D0F988C15A
Subject: 'CN: Cert CN'
Subject Public Key Info:
  Parameters:
    Key Size: '2048'
    Modulus N: |-
      30519795842219718524154211452339367525522541418306388322222479091833299116991140
      09740263213211778932406753683969023225227261260389673597060169902106121179841034
      31187219419109541663272149747295496520180159087432616126691772239668099488528148
      13289122122347191908018216484406428594527992092037163959856854605762954418536599
      19979935283394834106080349369124577624086693846677247163161103215836435379325851
      79739035857994859657330621842935602784426350478700541817375449573933075543808561
      18104621405966149397007798324741701052325470419784481031726708819614894503041371
      625278920346237218103962726322958896412584334205897243629
    Public Exponent E: '65537'
  Public Key Algorithm:
    key_size: '2048'
    modulus_n: |-
      30519795842219718524154211452339367525522541418306388322222479091833299116991140
      09740263213211778932406753683969023225227261260389673597060169902106121179841034
      31187219419109541663272149747295496520180159087432616126691772239668099488528148
      13289122122347191908018216484406428594527992092037163959856854605762954418536599
      19979935283394834106080349369124577624086693846677247163161103215836435379325851
      79739035857994859657330621842935602784426350478700541817375449573933075543808561
      18104621405966149397007798324741701052325470419784481031726708819614894503041371
      625278920346237218103962726322958896412584334205897243629
    public_exponent_e: '65537'
Validity:
  Not After: '2024-03-10 13:10:16+00:00'
  Not Before: '2024-03-09 13:10:16+00:00'
Version: 2


from_server classmethod
from_server(uri: str, cache_time_seconds: int = CACHE_TIME_SECONDS) -> Certificate

Loads a server certificate from a URI

Parameters:
  • uri (str) –

    The https URI of the server containing the certificate

  • cache_time_seconds (int, default: CACHE_TIME_SECONDS ) –

    How long the request should be cached in memory

Returns:
Example
from pki_tools import Certificate

cert = Certificate.from_server("https://revoked-isrgrootx1.letsencrypt.org")

print(cert)

Print output
Extensions:
  Authority Information Access:
    Access Description:
    - Access Location:
        name: UniformResourceIdentifier
        value: http://r3.o.lencr.org
      Access Method: OCSP
    - Access Location:
        name: UniformResourceIdentifier
        value: http://r3.i.lencr.org/
      Access Method: CA_ISSUERS
  Authority Key Identifier:
    Key Identifier: 142EB317B75856CBAE500940E61FAF9D8B14C2C6
  Basic Constraints (critical):
    CA: false
  Certificate Policies:
  - Policy 2.23.140.1.2.1: []
  Extended Key Usage:
  - Server Authentication
  - Client Authentication
  Key Usage (critical): Digital Signature, Key Encipherment
  Subject Alternative Name:
  - name: DNSName
    value: revoked-isrgrootx1.letsencrypt.org
  Subject Key Identifier:
    Subject Key Identifier: 17580EEBFC5C74F8FCA9E7D26B7B46C2CAA4CB65
Issuer: 'C: US, CN: R3, O: Let''s Encrypt'
Serial Number: 3AB360B2E141EE0A0A5D7E07405B788D012
Signature Algorithm: SHA256
Signature Value: |-
  6524BFAA0418AC033CA8AE9B7D26270A0FD01D19C0D9C24DF62443049F751DAACC38DCD0F8D1B073
  BA69A597430D81417621A83B1AFBF1DA8BB89A8A9A66C1872214219F1AF0F538E3492935FBED9B07
  2753E1979754ADA825AE779F25A60E6168FE8B5A349A645CF53E8B92C4C89E48A10644B886DC5C45
  F1BA190FA21F5D9D3797EEF438BB43A0C7F3AD24DC5A362573B93807C63E967C34412AF06484192E
  EABBE0F36E586457631452550F57EECCC70CA2D18033219970CA585B7F9E048D079267419A5853B0
  91EC434E7486F0F2CEBB25A83E67906B25253D151C4648623AF65085D29CDA54A35AB69CF46FE5C5
  233B8883E07F8084D1E4BD044D3AFA4F
Subject: 'CN: revoked-isrgrootx1.letsencrypt.org'
Subject Public Key Info:
  Parameters:
    Key Size: '2048'
    Modulus N: |-
      23839174628835585737865497707674190474897415317191932275801797752886922576439929
      23606111892535056472919273444108077458185259724177705966095207382680958653002768
      64978318542280697487184872371692210563784780155639469440229752176892536277475999
      75217593328595981266268943720688057618917965143208585315841050460997668640937715
      31151802418019082127796674420946429622942844685649712201709165874476137292993834
      39085956973880263992601153582729559608082829217959931969536985959906468775946948
      85364834380352119964620287584172658764708891053901110224014921892529600757418230
      858898666651845148139212940504939021007318913142493572379
    Public Exponent E: '65537'
  Public Key Algorithm:
    key_size: '2048'
    modulus_n: |-
      23839174628835585737865497707674190474897415317191932275801797752886922576439929
      23606111892535056472919273444108077458185259724177705966095207382680958653002768
      64978318542280697487184872371692210563784780155639469440229752176892536277475999
      75217593328595981266268943720688057618917965143208585315841050460997668640937715
      31151802418019082127796674420946429622942844685649712201709165874476137292993834
      39085956973880263992601153582729559608082829217959931969536985959906468775946948
      85364834380352119964620287584172658764708891053901110224014921892529600757418230
      858898666651845148139212940504939021007318913142493572379
    public_exponent_e: '65537'
Validity:
  Not After: '2024-06-18 15:00:15+00:00'
  Not Before: '2024-03-20 15:00:16+00:00'
Version: 2


from_uri classmethod
from_uri(uri: str, cache_time_seconds: int = CACHE_TIME_SECONDS, proxy: str = None) -> Certificate

Loads Certificates from a URI.

Parameters:
  • uri (str) –

    URI where the certificate can be downloaded.

  • cache_time_seconds (int, default: CACHE_TIME_SECONDS ) –

    Specifies how long the certificate should be cached, default is 1 month.

  • proxy (str, default: None ) –

    Optional proxy URL to use for the HTTP request (e.g., 'http://proxy.example.com:8080')

Returns:
Example
from pki_tools import Certificate

cert = Certificate.from_uri("https://letsencrypt.org/certs/gen-y/int-yr1.pem")

print(cert)

Print output
Extensions:
  Authority Information Access:
    Access Description:
    - Access Location:
        name: UniformResourceIdentifier
        value: http://yr.i.lencr.org/
      Access Method: CA_ISSUERS
  Authority Key Identifier:
    Key Identifier: DEE75B60D0226D40287D3F0D01FEA4B552B45194
  Basic Constraints (critical):
    CA: true
  Certificate Policies:
  - Policy 2.23.140.1.2.1: []
  Crl Distribution Points:
  - Full Name:
    - name: UniformResourceIdentifier
      value: http://yr.c.lencr.org/
  Extended Key Usage:
  - Server Authentication
  Key Usage (critical): Digital Signature, Key Cert Sign, Crl Sign
  Path Lenght: 0
  Subject Key Identifier:
    Subject Key Identifier: 1F2F35BE461482CD40B1AE792C5578FAF7D468FB
Issuer: 'C: US, CN: Root YR, O: ISRG'
Serial Number: A20253F15F2691C05DC1CE13B9BCCA4E
Signature Algorithm: SHA256
Signature Value: |-
  D3ECEF32ADE41E283575D4E69A6F9189B4EBF7F4695FB9386EE6A730C46A6D5FF222F3FCDB300737
  79AF6B0F9C012B95B1DA5DD2292386BE219E12502D03B33A9D9C70AAEC746380828D2F75D7884850
  2A116115E25994337BC517BF7ABA9F9B4A0989D6EE91BA90C23310E017C33778BBC6BA3E8BD25BB7
  CE44342AE40B9CAC4BB41D2842A9F521D8390AEB86A4CBD0CE4DBD3DADC3FEA1EEADCD0420CF52C6
  E910B89AAAEB7971B18C9140553CC8C04E86AD70E4B6DF696351AF3D6E92539F23FA589006F61363
  1366B00C4240481364BC26DD45F2045CF7AA3FC4EB2B82F4A46BCE008AC5FAC6AD65CF567B8C6BEB
  9D77384CC723C594E38936A285C608D492176622ED10C4826B997772EF1859DEB374B45096A45D72
  5563B907CD1DAC1127A1969642B4409A2C8AF4CAC1D070DCAC44B731A8F323071116ECCB9EE03F55
  171CE31C9996100B482DC91DD2C5F7A720CFCCC42DC86B662969BFE443F0939E5227D8A4392540BA
  358AC609B84537D6E9E652894AD1300949CBA67B5CAD79395D50C236FFF94725A945386418E57B19
  EB4A910D2A018F210B358AEA8AA70210D972395855D59FA8EC370C8397E840CD06002A1DAAD1571C
  85F5065D39A5D2C8F274B9E0F6058244060682190F2B01A53F41CD76DD5E4B4D70D95B809CB0F043
  CA1CB8BFE73C842940CB0FC890995F06AC41F43FBFC2F20C1E0102678A6D3FAA
Subject: 'C: US, CN: YR1, O: Let''s Encrypt'
Subject Public Key Info:
  Parameters:
    Key Size: '2048'
    Modulus N: |-
      20368124368675891946319039514874952580097876774281197587872014486809338224813032
      05536229947077546803739710001048674883977910713703374321443228218166487488547869
      95042738283130862986089844535354095849183265150973300565491594652383690401795755
      81502362563299799663585256318791002980007315461610643320322800733285374059752760
      84361487101096666469022209073510586135388651954158617290754231538038201259051241
      67723475576439836916320909302250114392329457322371670752672396432747591095388574
      00262092654229881227881353638902935561190659323834931732018806316820984620539531
      571810889751722326674998912583295739544786291225887927859
    Public Exponent E: '65537'
  Public Key Algorithm:
    key_size: '2048'
    modulus_n: |-
      20368124368675891946319039514874952580097876774281197587872014486809338224813032
      05536229947077546803739710001048674883977910713703374321443228218166487488547869
      95042738283130862986089844535354095849183265150973300565491594652383690401795755
      81502362563299799663585256318791002980007315461610643320322800733285374059752760
      84361487101096666469022209073510586135388651954158617290754231538038201259051241
      67723475576439836916320909302250114392329457322371670752672396432747591095388574
      00262092654229881227881353638902935561190659323834931732018806316820984620539531
      571810889751722326674998912583295739544786291225887927859
    public_exponent_e: '65537'
Validity:
  Not After: '2028-09-02 23:59:59+00:00'
  Not Before: '2025-09-03 00:00:00+00:00'
Version: 2


sign
sign(key_pair: CryptoKeyPair, signature_algorithm: Optional[SignatureAlgorithm] = None, req_key: Optional[CryptoPublicKey] = None) -> None

Signs a created Certificate object with a given CryptoKeyPair

Parameters:
  • key_pair (CryptoKeyPair) –

    Keypair containing the private key to sing the certificate with

  • signature_algorithm (Optional[SignatureAlgorithm], default: None ) –

    Algorithm to use for the signature

  • req_key (Optional[CryptoPublicKey], default: None ) –

    Can be used to sign another public key, defaults to the public key part in key_pair

verify_signature
verify_signature(signed: InitCryptoParser) -> None

Verifies a signature of a signed entity against this issuer certificate

Parameters:
Raises:

SubjectPublicKeyInfo

Bases: CryptoParser

Represents a certificate SubjectPublicKeyInfo.

Attributes:
  • algorithm (CryptoPublicKey) –

    The key algorithm in string format

  • parameters (Optional[Dict[str, str]]) –

    The dict representation of the key

Validity

Bases: BaseModel

Describes the validity of a certificate

Attributes:
  • not_before (datetime.datetime) –

    The start date of when the certificate will be valid

  • not_after (datetime.datetime) –

    The date of when the certificate expires