blob: f17c3dae23e448904cd2dfce40954dae4ab21edc [file] [log] [blame]
Paul Kehrer016e08a2014-11-26 09:41:18 -10001X.509
2=====
3
Paul Kehrera9d78c12014-11-26 10:59:03 -10004.. currentmodule:: cryptography.x509
Paul Kehrer016e08a2014-11-26 09:41:18 -10005
6X.509 is an ITU-T standard for a `public key infrastructure`_. X.509v3 is
Paul Kehrera68fd332014-11-27 07:08:40 -10007defined in :rfc:`5280` (which obsoletes :rfc:`2459` and :rfc:`3280`). X.509
8certificates are commonly used in protocols like `TLS`_.
Paul Kehrer016e08a2014-11-26 09:41:18 -10009
Paul Kehrerb2de9482014-12-11 14:54:48 -060010
11Loading Certificates
12~~~~~~~~~~~~~~~~~~~~
Paul Kehrer016e08a2014-11-26 09:41:18 -100013
14.. function:: load_pem_x509_certificate(data, backend)
15
16 .. versionadded:: 0.7
17
Paul Kehrere76cd272014-12-14 19:00:51 -060018 Deserialize a certificate from PEM encoded data. PEM certificates are
19 base64 decoded and have delimiters that look like
20 ``-----BEGIN CERTIFICATE-----``.
Paul Kehrer016e08a2014-11-26 09:41:18 -100021
22 :param bytes data: The PEM encoded certificate data.
23
24 :param backend: A backend supporting the
25 :class:`~cryptography.hazmat.backends.interfaces.X509Backend`
26 interface.
27
Paul Kehrere76cd272014-12-14 19:00:51 -060028 :returns: An instance of :class:`~cryptography.x509.Certificate`.
Paul Kehrer016e08a2014-11-26 09:41:18 -100029
30.. function:: load_der_x509_certificate(data, backend)
31
32 .. versionadded:: 0.7
33
Paul Kehrere76cd272014-12-14 19:00:51 -060034 Deserialize a certificate from DER encoded data. DER is a binary format
Paul Kehrer92aac382014-12-15 16:25:28 -060035 and is commonly found in files with the ``.cer`` extension (although file
36 extensions are not a guarantee of encoding type).
Paul Kehrer016e08a2014-11-26 09:41:18 -100037
38 :param bytes data: The DER encoded certificate data.
39
40 :param backend: A backend supporting the
41 :class:`~cryptography.hazmat.backends.interfaces.X509Backend`
42 interface.
43
Paul Kehrere76cd272014-12-14 19:00:51 -060044 :returns: An instance of :class:`~cryptography.x509.Certificate`.
Paul Kehrer016e08a2014-11-26 09:41:18 -100045
46.. testsetup::
47
48 pem_data = b"""
49 -----BEGIN CERTIFICATE-----
50 MIIDfDCCAmSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJVUzEf
51 MB0GA1UEChMWVGVzdCBDZXJ0aWZpY2F0ZXMgMjAxMTEVMBMGA1UEAxMMVHJ1c3Qg
52 QW5jaG9yMB4XDTEwMDEwMTA4MzAwMFoXDTMwMTIzMTA4MzAwMFowQDELMAkGA1UE
53 BhMCVVMxHzAdBgNVBAoTFlRlc3QgQ2VydGlmaWNhdGVzIDIwMTExEDAOBgNVBAMT
54 B0dvb2QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCQWJpHYo37
55 Xfb7oJSPe+WvfTlzIG21WQ7MyMbGtK/m8mejCzR6c+f/pJhEH/OcDSMsXq8h5kXa
56 BGqWK+vSwD/Pzp5OYGptXmGPcthDtAwlrafkGOS4GqIJ8+k9XGKs+vQUXJKsOk47
57 RuzD6PZupq4s16xaLVqYbUC26UcY08GpnoLNHJZS/EmXw1ZZ3d4YZjNlpIpWFNHn
58 UGmdiGKXUPX/9H0fVjIAaQwjnGAbpgyCumWgzIwPpX+ElFOUr3z7BoVnFKhIXze+
59 VmQGSWxZxvWDUN90Ul0tLEpLgk3OVxUB4VUGuf15OJOpgo1xibINPmWt14Vda2N9
60 yrNKloJGZNqLAgMBAAGjfDB6MB8GA1UdIwQYMBaAFOR9X9FclYYILAWuvnW2ZafZ
61 XahmMB0GA1UdDgQWBBRYAYQkG7wrUpRKPaUQchRR9a86yTAOBgNVHQ8BAf8EBAMC
62 AQYwFwYDVR0gBBAwDjAMBgpghkgBZQMCATABMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
63 KoZIhvcNAQELBQADggEBADWHlxbmdTXNwBL/llwhQqwnazK7CC2WsXBBqgNPWj7m
64 tvQ+aLG8/50Qc2Sun7o2VnwF9D18UUe8Gj3uPUYH+oSI1vDdyKcjmMbKRU4rk0eo
65 3UHNDXwqIVc9CQS9smyV+x1HCwL4TTrq+LXLKx/qVij0Yqk+UJfAtrg2jnYKXsCu
66 FMBQQnWCGrwa1g1TphRp/RmYHnMynYFmZrXtzFz+U9XEA7C+gPq4kqDI/iVfIT1s
67 6lBtdB50lrDVwl2oYfAvW/6sC2se2QleZidUmrziVNP4oEeXINokU6T6p//HM1FG
68 QYw2jOvpKcKtWCSAnegEbgsGYzATKjmPJPJ0npHFqzM=
69 -----END CERTIFICATE-----
70 """.strip()
71
72.. doctest::
73
Paul Kehrercc8a26e2014-12-16 12:40:16 -060074 >>> from cryptography import x509
Paul Kehrer016e08a2014-11-26 09:41:18 -100075 >>> from cryptography.hazmat.backends import default_backend
Paul Kehrercc8a26e2014-12-16 12:40:16 -060076 >>> cert = x509.load_pem_x509_certificate(pem_data, default_backend())
Paul Kehrer016e08a2014-11-26 09:41:18 -100077 >>> cert.serial
78 2
79
Paul Kehrere76cd272014-12-14 19:00:51 -060080X.509 Certificate Object
81~~~~~~~~~~~~~~~~~~~~~~~~
Paul Kehrerb2de9482014-12-11 14:54:48 -060082
Paul Kehrere76cd272014-12-14 19:00:51 -060083.. class:: Certificate
Paul Kehrerb2de9482014-12-11 14:54:48 -060084
85 .. versionadded:: 0.7
86
87 .. attribute:: version
88
Paul Kehrere76cd272014-12-14 19:00:51 -060089 :type: :class:`~cryptography.x509.Version`
Paul Kehrerb2de9482014-12-11 14:54:48 -060090
Paul Kehrere76cd272014-12-14 19:00:51 -060091 The certificate version as an enumeration. Version 3 certificates are
92 the latest version and also the only type you should see in practice.
Paul Kehrerb2de9482014-12-11 14:54:48 -060093
Alex Gaynor89c4dc82014-12-16 16:49:33 -080094 :raises cryptography.x509.InvalidVersion: If the version in the
Alex Gaynor6d7ab4c2014-12-16 16:50:33 -080095 certificate is not a known
96 :class:`X.509 version <cryptography.x509.Version>`.
Paul Kehrer92aac382014-12-15 16:25:28 -060097
Paul Kehrercc8a26e2014-12-16 12:40:16 -060098 .. doctest::
99
100 >>> cert.version
101 <Version.v3: 2>
102
Paul Kehrerb2de9482014-12-11 14:54:48 -0600103 .. method:: fingerprint(algorithm)
104
105 :param algorithm: The
Paul Kehrer601278a2015-02-12 12:51:00 -0600106 :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`
Paul Kehrerb2de9482014-12-11 14:54:48 -0600107 that will be used to generate the fingerprint.
108
109 :return bytes: The fingerprint using the supplied hash algorithm as
110 bytes.
111
Paul Kehrercc8a26e2014-12-16 12:40:16 -0600112 .. doctest::
113
114 >>> from cryptography.hazmat.primitives import hashes
115 >>> cert.fingerprint(hashes.SHA256())
Paul Kehrer78a81502014-12-16 14:47:52 -0600116 '\x86\xd2\x187Gc\xfc\xe7}[+E9\x8d\xb4\x8f\x10\xe5S\xda\x18u\xbe}a\x03\x08[\xac\xa04?'
Paul Kehrercc8a26e2014-12-16 12:40:16 -0600117
Paul Kehrerb2de9482014-12-11 14:54:48 -0600118 .. attribute:: serial
119
120 :type: int
121
122 The serial as a Python integer.
123
Paul Kehrercc8a26e2014-12-16 12:40:16 -0600124 .. doctest::
125
126 >>> cert.serial
127 2
128
Paul Kehrerb2de9482014-12-11 14:54:48 -0600129 .. method:: public_key()
130
131 :type:
Alex Stapletonf79c2312014-12-30 12:50:14 +0000132 :class:`~cryptography.hazmat.primitives.asymmetric.rsa.RSAPublicKey` or
Paul Kehrer45efdbc2015-02-12 10:58:22 -0600133 :class:`~cryptography.hazmat.primitives.asymmetric.dsa.DSAPublicKey` or
134 :class:`~cryptography.hazmat.primitives.asymmetric.ec.EllipticCurvePublicKey`
Paul Kehrerb2de9482014-12-11 14:54:48 -0600135
136 The public key associated with the certificate.
137
Paul Kehrercc8a26e2014-12-16 12:40:16 -0600138 .. doctest::
139
Alex Stapletonf79c2312014-12-30 12:50:14 +0000140 >>> from cryptography.hazmat.primitives.asymmetric import rsa
Paul Kehrercc8a26e2014-12-16 12:40:16 -0600141 >>> public_key = cert.public_key()
Alex Stapletonf79c2312014-12-30 12:50:14 +0000142 >>> isinstance(public_key, rsa.RSAPublicKey)
Paul Kehrercc8a26e2014-12-16 12:40:16 -0600143 True
144
Paul Kehrerb2de9482014-12-11 14:54:48 -0600145 .. attribute:: not_valid_before
146
147 :type: :class:`datetime.datetime`
148
Paul Kehrer78a81502014-12-16 14:47:52 -0600149 A naïve datetime representing the beginning of the validity period for
150 the certificate in UTC. This value is inclusive.
Paul Kehrerb2de9482014-12-11 14:54:48 -0600151
Paul Kehrercc8a26e2014-12-16 12:40:16 -0600152 .. doctest::
153
154 >>> cert.not_valid_before
155 datetime.datetime(2010, 1, 1, 8, 30)
156
Paul Kehrerb2de9482014-12-11 14:54:48 -0600157 .. attribute:: not_valid_after
158
159 :type: :class:`datetime.datetime`
160
Paul Kehrer78a81502014-12-16 14:47:52 -0600161 A naïve datetime representing the end of the validity period for the
162 certificate in UTC. This value is inclusive.
Paul Kehrerb2de9482014-12-11 14:54:48 -0600163
Paul Kehrercc8a26e2014-12-16 12:40:16 -0600164 .. doctest::
165
166 >>> cert.not_valid_after
167 datetime.datetime(2030, 12, 31, 8, 30)
168
Paul Kehrer719d5362015-01-01 20:03:52 -0600169 .. attribute:: issuer
170
171 .. versionadded:: 0.8
172
173 :type: :class:`Name`
174
175 The :class:`Name` of the issuer.
176
177 .. attribute:: subject
178
179 .. versionadded:: 0.8
180
181 :type: :class:`Name`
182
183 The :class:`Name` of the subject.
184
Paul Kehrer8802a5b2015-02-13 12:06:57 -0600185 .. attribute:: signature_hash_algorithm
Paul Kehrer56da2a52015-02-11 23:35:07 -0600186
Paul Kehrer8802a5b2015-02-13 12:06:57 -0600187 :type: :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm`
Paul Kehrer56da2a52015-02-11 23:35:07 -0600188
Paul Kehrere612ec72015-02-16 14:33:35 -0600189 Returns the
Paul Kehrer71d40c62015-02-19 08:21:04 -0600190 :class:`~cryptography.hazmat.primitives.hashes.HashAlgorithm` which
Paul Kehrer1a7ba872015-02-19 18:09:05 -0600191 was used in signing this certificate.
Paul Kehrer56da2a52015-02-11 23:35:07 -0600192
193 .. doctest::
194
Paul Kehrer8802a5b2015-02-13 12:06:57 -0600195 >>> from cryptography.hazmat.primitives import hashes
196 >>> isinstance(cert.signature_hash_algorithm, hashes.SHA256)
197 True
Paul Kehrer719d5362015-01-01 20:03:52 -0600198
Paul Kehrerfbb7ac82015-03-16 19:26:29 -0500199 .. attribute:: extensions
200
201 :type: :class:`Extensions`
202
203 The extensions encoded in the certificate.
204
205 :raises cryptography.x509.DuplicateExtension: If more than one
206 extension of the same type is found within the certificate.
207
Paul Kehrerfa56a232015-03-17 13:14:03 -0500208 .. doctest::
209
210 >>> for ext in cert.extensions:
211 ... print(ext)
212 <Extension(oid=<ObjectIdentifier(oid=2.5.29.19, name=basicConstraints)>, critical=True, value=<BasicConstraints(ca=True, path_length=None)>)>
213
Paul Kehrer719d5362015-01-01 20:03:52 -0600214.. class:: Name
215
216 .. versionadded:: 0.8
217
Paul Kehrer53d8d492015-02-13 18:47:30 -0600218 An X509 Name is an ordered list of attributes. The object is iterable to
Paul Kehrerd21596e2015-02-14 09:17:26 -0600219 get every attribute or you can use :meth:`Name.get_attributes_for_oid` to
Paul Kehrer719d5362015-01-01 20:03:52 -0600220 obtain the specific type you want. Names are sometimes represented as a
Paul Kehrer53d8d492015-02-13 18:47:30 -0600221 slash or comma delimited string (e.g. ``/CN=mydomain.com/O=My Org/C=US`` or
222 ``CN=mydomain.com, O=My Org, C=US``).
Paul Kehrer719d5362015-01-01 20:03:52 -0600223
Paul Kehrer53d8d492015-02-13 18:47:30 -0600224 .. doctest::
Paul Kehrer719d5362015-01-01 20:03:52 -0600225
Paul Kehrer8b21a4a2015-02-14 07:56:36 -0600226 >>> len(cert.subject)
Paul Kehrer53d8d492015-02-13 18:47:30 -0600227 3
Paul Kehrer8b21a4a2015-02-14 07:56:36 -0600228 >>> for attribute in cert.subject:
229 ... print(attribute)
230 <NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.6, name=countryName)>, value=u'US')>
231 <NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.10, name=organizationName)>, value=u'Test Certificates 2011')>
232 <NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.3, name=commonName)>, value=u'Good CA')>
Paul Kehrer719d5362015-01-01 20:03:52 -0600233
Paul Kehrere901d642015-02-11 18:50:58 -0600234 .. method:: get_attributes_for_oid(oid)
Paul Kehrer719d5362015-01-01 20:03:52 -0600235
Paul Kehrere901d642015-02-11 18:50:58 -0600236 :param oid: An :class:`ObjectIdentifier` instance.
Paul Kehrer719d5362015-01-01 20:03:52 -0600237
Paul Kehrere901d642015-02-11 18:50:58 -0600238 :returns: A list of :class:`NameAttribute` instances that match the
239 OID provided. If nothing matches an empty list will be returned.
Paul Kehrer719d5362015-01-01 20:03:52 -0600240
241 .. doctest::
242
Paul Kehrere901d642015-02-11 18:50:58 -0600243 >>> cert.subject.get_attributes_for_oid(x509.OID_COMMON_NAME)
244 [<NameAttribute(oid=<ObjectIdentifier(oid=2.5.4.3, name=commonName)>, value=u'Good CA')>]
Paul Kehrerb2de9482014-12-11 14:54:48 -0600245
Paul Kehrere76cd272014-12-14 19:00:51 -0600246.. class:: Version
Paul Kehrer016e08a2014-11-26 09:41:18 -1000247
248 .. versionadded:: 0.7
249
250 An enumeration for X.509 versions.
251
252 .. attribute:: v1
253
254 For version 1 X.509 certificates.
255
256 .. attribute:: v3
257
258 For version 3 X.509 certificates.
259
Paul Kehrer806bfb22015-02-02 17:05:24 -0600260.. class:: NameAttribute
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600261
262 .. versionadded:: 0.8
263
Paul Kehrer834d22f2015-02-06 11:01:07 -0600264 An X.509 name consists of a list of NameAttribute instances.
Paul Kehrer5b0a8d62015-01-30 20:05:55 -0600265
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600266 .. attribute:: oid
267
268 :type: :class:`ObjectIdentifier`
269
270 The attribute OID.
271
272 .. attribute:: value
273
Paul Kehrerd5852cb2015-01-30 08:25:23 -0600274 :type: :term:`text`
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600275
276 The value of the attribute.
277
278.. class:: ObjectIdentifier
279
280 .. versionadded:: 0.8
281
Paul Kehrer5b0a8d62015-01-30 20:05:55 -0600282 Object identifiers (frequently seen abbreviated as OID) identify the type
Paul Kehrer806bfb22015-02-02 17:05:24 -0600283 of a value (see: :class:`NameAttribute`).
Paul Kehrer5b0a8d62015-01-30 20:05:55 -0600284
Paul Kehrerd44f9a62015-02-04 14:47:34 -0600285 .. attribute:: dotted_string
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600286
287 :type: :class:`str`
288
Paul Kehrerfedf4f42015-02-06 11:22:07 -0600289 The dotted string value of the OID (e.g. ``"2.5.4.3"``)
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600290
Paul Kehrer8cf26422015-03-21 09:50:24 -0500291X.509 Extensions
292~~~~~~~~~~~~~~~~
293
Paul Kehrerfbb7ac82015-03-16 19:26:29 -0500294.. class:: Extensions
295
296 .. versionadded:: 0.9
297
298 An X.509 Extensions instance is an ordered list of extensions. The object
299 is iterable to get every extension.
300
Paul Kehrerfa56a232015-03-17 13:14:03 -0500301 .. method:: get_extension_for_oid(oid)
302
303 :param oid: An :class:`ObjectIdentifier` instance.
304
305 :returns: An instance of the extension class.
306
307 :raises cryptography.x509.ExtensionNotFound: If the certificate does
308 not have the extension requested.
309
310 :raises cryptography.x509.UnsupportedExtension: If the certificate
311 contains an extension that is not supported.
312
313 .. doctest::
314
315 >>> cert.extensions.get_extension_for_oid(x509.OID_BASIC_CONSTRAINTS)
316 <Extension(oid=<ObjectIdentifier(oid=2.5.29.19, name=basicConstraints)>, critical=True, value=<BasicConstraints(ca=True, path_length=None)>)>
317
Paul Kehrer8cf26422015-03-21 09:50:24 -0500318.. class:: Extension
319
320 .. versionadded:: 0.9
321
Paul Kehrer85894662015-03-22 13:19:31 -0500322 .. attribute:: oid
323
324 :type: :class:`ObjectIdentifier`
325
Paul Kehrer5553d572015-03-23 21:08:01 -0500326 The :ref:`extension OID <extension_oids>`.
Paul Kehrer8cf26422015-03-21 09:50:24 -0500327
328 .. attribute:: critical
329
330 :type: bool
331
Paul Kehrer58b75692015-03-22 23:24:58 -0500332 Determines whether a given extension is critical or not. :rfc:`5280`
333 requires that "A certificate-using system MUST reject the certificate
334 if it encounters a critical extension it does not recognize or a
335 critical extension that contains information that it cannot process".
Paul Kehrer8cf26422015-03-21 09:50:24 -0500336
Paul Kehrer85894662015-03-22 13:19:31 -0500337 .. attribute:: value
338
339 Returns an instance of the extension type corresponding to the OID.
340
Paul Kehrer8cf26422015-03-21 09:50:24 -0500341.. class:: BasicConstraints
342
343 .. versionadded:: 0.9
344
Paul Kehrer85894662015-03-22 13:19:31 -0500345 Basic constraints is an X.509 extension type that defines whether a given
Paul Kehrer8cf26422015-03-21 09:50:24 -0500346 certificate is allowed to sign additional certificates and what path
Paul Kehrer85894662015-03-22 13:19:31 -0500347 length restrictions may exist. It corresponds to
348 :data:`OID_BASIC_CONSTRAINTS`.
Paul Kehrer8cf26422015-03-21 09:50:24 -0500349
350 .. attribute:: ca
351
352 :type: bool
353
354 Whether the certificate can sign certificates.
355
356 .. attribute:: path_length
357
Paul Kehrerfd1444c2015-03-21 19:47:05 -0500358 :type: int or None
Paul Kehrer8cf26422015-03-21 09:50:24 -0500359
360 The maximum path length for certificates subordinate to this
361 certificate. This attribute only has meaning if ``ca`` is true.
362 If ``ca`` is true then a path length of None means there's no
363 restriction on the number of subordinate CAs in the certificate chain.
364 If it is zero or greater then that number defines the maximum length.
365 For example, a ``path_length`` of 1 means the certificate can sign a
366 subordinate CA, but the subordinate CA is not allowed to create
Paul Kehrerfd1444c2015-03-21 19:47:05 -0500367 subordinates with ``ca`` set to true.
Paul Kehrer8cf26422015-03-21 09:50:24 -0500368
369
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600370Object Identifiers
371~~~~~~~~~~~~~~~~~~
372
Paul Kehrer4bb46492015-02-07 16:59:14 -0600373X.509 elements are frequently identified by :class:`ObjectIdentifier`
374instances. The following common OIDs are available as constants.
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600375
Paul Kehrer56da2a52015-02-11 23:35:07 -0600376Name OIDs
377~~~~~~~~~
378
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600379.. data:: OID_COMMON_NAME
380
Paul Kehrerfb5ac9e2015-02-07 16:29:37 -0600381 Corresponds to the dotted string ``"2.5.4.3"``. Historically the domain
382 name would be encoded here for server certificates. :rfc:`2818` deprecates
383 this practice and names of that type should now be located in a
Paul Kehrer4bb46492015-02-07 16:59:14 -0600384 SubjectAlternativeName extension. This OID is typically seen in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600385
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600386.. data:: OID_COUNTRY_NAME
387
Paul Kehrer4bb46492015-02-07 16:59:14 -0600388 Corresponds to the dotted string ``"2.5.4.6"``. This OID is typically seen
389 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600390
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600391.. data:: OID_LOCALITY_NAME
392
Paul Kehrer4bb46492015-02-07 16:59:14 -0600393 Corresponds to the dotted string ``"2.5.4.7"``. This OID is typically seen
394 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600395
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600396.. data:: OID_STATE_OR_PROVINCE_NAME
397
Paul Kehrer4bb46492015-02-07 16:59:14 -0600398 Corresponds to the dotted string ``"2.5.4.8"``. This OID is typically seen
399 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600400
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600401.. data:: OID_ORGANIZATION_NAME
402
Paul Kehrer4bb46492015-02-07 16:59:14 -0600403 Corresponds to the dotted string ``"2.5.4.10"``. This OID is typically seen
404 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600405
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600406.. data:: OID_ORGANIZATIONAL_UNIT_NAME
407
Paul Kehrer4bb46492015-02-07 16:59:14 -0600408 Corresponds to the dotted string ``"2.5.4.11"``. This OID is typically seen
409 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600410
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600411.. data:: OID_SERIAL_NUMBER
412
Paul Kehrerfb5ac9e2015-02-07 16:29:37 -0600413 Corresponds to the dotted string ``"2.5.4.5"``. This is distinct from the
414 serial number of the certificate itself (which can be obtained with
Paul Kehrer4bb46492015-02-07 16:59:14 -0600415 :func:`Certificate.serial`). This OID is typically seen in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600416
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600417.. data:: OID_SURNAME
418
Paul Kehrer4bb46492015-02-07 16:59:14 -0600419 Corresponds to the dotted string ``"2.5.4.4"``. This OID is typically seen
420 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600421
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600422.. data:: OID_GIVEN_NAME
423
Paul Kehrer4bb46492015-02-07 16:59:14 -0600424 Corresponds to the dotted string ``"2.5.4.42"``. This OID is typically seen
425 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600426
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600427.. data:: OID_TITLE
428
Paul Kehrer4bb46492015-02-07 16:59:14 -0600429 Corresponds to the dotted string ``"2.5.4.12"``. This OID is typically seen
430 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600431
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600432.. data:: OID_GENERATION_QUALIFIER
433
Paul Kehrer4bb46492015-02-07 16:59:14 -0600434 Corresponds to the dotted string ``"2.5.4.44"``. This OID is typically seen
435 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600436
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600437.. data:: OID_DN_QUALIFIER
438
Paul Kehrerfb5ac9e2015-02-07 16:29:37 -0600439 Corresponds to the dotted string ``"2.5.4.46"``. This specifies
440 disambiguating information to add to the relative distinguished name of an
Paul Kehrer4bb46492015-02-07 16:59:14 -0600441 entry. See :rfc:`2256`. This OID is typically seen in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600442
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600443.. data:: OID_PSEUDONYM
444
Paul Kehrer4bb46492015-02-07 16:59:14 -0600445 Corresponds to the dotted string ``"2.5.4.65"``. This OID is typically seen
446 in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600447
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600448.. data:: OID_DOMAIN_COMPONENT
449
Paul Kehrerfb5ac9e2015-02-07 16:29:37 -0600450 Corresponds to the dotted string ``"0.9.2342.19200300.100.1.25"``. A string
Paul Kehrer4bb46492015-02-07 16:59:14 -0600451 holding one component of a domain name. See :rfc:`4519`. This OID is
452 typically seen in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600453
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600454.. data:: OID_EMAIL_ADDRESS
455
Paul Kehrer4bb46492015-02-07 16:59:14 -0600456 Corresponds to the dotted string ``"1.2.840.113549.1.9.1"``. This OID is
457 typically seen in X.509 names.
Paul Kehrer858b9b72015-02-05 09:50:31 -0600458
Paul Kehrer56da2a52015-02-11 23:35:07 -0600459Signature Algorithm OIDs
460~~~~~~~~~~~~~~~~~~~~~~~~
461
Paul Kehrer1a7ba872015-02-19 18:09:05 -0600462.. data:: OID_RSA_WITH_MD5
Paul Kehrer56da2a52015-02-11 23:35:07 -0600463
464 Corresponds to the dotted string ``"1.2.840.113549.1.1.4"``. This is
465 an MD5 digest signed by an RSA key.
466
Paul Kehrer1a7ba872015-02-19 18:09:05 -0600467.. data:: OID_RSA_WITH_SHA1
Paul Kehrer56da2a52015-02-11 23:35:07 -0600468
469 Corresponds to the dotted string ``"1.2.840.113549.1.1.5"``. This is
470 a SHA1 digest signed by an RSA key.
471
Paul Kehrer1a7ba872015-02-19 18:09:05 -0600472.. data:: OID_RSA_WITH_SHA224
Paul Kehrer56da2a52015-02-11 23:35:07 -0600473
474 Corresponds to the dotted string ``"1.2.840.113549.1.1.14"``. This is
475 a SHA224 digest signed by an RSA key.
476
Paul Kehrer1a7ba872015-02-19 18:09:05 -0600477.. data:: OID_RSA_WITH_SHA256
Paul Kehrer56da2a52015-02-11 23:35:07 -0600478
479 Corresponds to the dotted string ``"1.2.840.113549.1.1.11"``. This is
480 a SHA256 digest signed by an RSA key.
481
Paul Kehrer1a7ba872015-02-19 18:09:05 -0600482.. data:: OID_RSA_WITH_SHA384
Paul Kehrer56da2a52015-02-11 23:35:07 -0600483
484 Corresponds to the dotted string ``"1.2.840.113549.1.1.12"``. This is
485 a SHA384 digest signed by an RSA key.
486
Paul Kehrer1a7ba872015-02-19 18:09:05 -0600487.. data:: OID_RSA_WITH_SHA512
Paul Kehrer56da2a52015-02-11 23:35:07 -0600488
489 Corresponds to the dotted string ``"1.2.840.113549.1.1.13"``. This is
490 a SHA512 digest signed by an RSA key.
491
492.. data:: OID_ECDSA_WITH_SHA224
493
494 Corresponds to the dotted string ``"1.2.840.10045.4.3.1"``. This is
495 a SHA224 digest signed by an ECDSA key.
496
497.. data:: OID_ECDSA_WITH_SHA256
498
499 Corresponds to the dotted string ``"1.2.840.10045.4.3.2"``. This is
500 a SHA256 digest signed by an ECDSA key.
501
502.. data:: OID_ECDSA_WITH_SHA384
503
504 Corresponds to the dotted string ``"1.2.840.10045.4.3.3"``. This is
505 a SHA384 digest signed by an ECDSA key.
506
507.. data:: OID_ECDSA_WITH_SHA512
508
509 Corresponds to the dotted string ``"1.2.840.10045.4.3.4"``. This is
510 a SHA512 digest signed by an ECDSA key.
511
512.. data:: OID_DSA_WITH_SHA1
513
514 Corresponds to the dotted string ``"1.2.840.10040.4.3"``. This is
515 a SHA1 digest signed by a DSA key.
516
517.. data:: OID_DSA_WITH_SHA224
518
519 Corresponds to the dotted string ``"2.16.840.1.101.3.4.3.1"``. This is
520 a SHA224 digest signed by a DSA key.
521
522.. data:: OID_DSA_WITH_SHA256
523
Paul Kehrerfbb7ac82015-03-16 19:26:29 -0500524 Corresponds to the dotted string ``"2.16.840.1.101.3.4.3.2"``. This is
Paul Kehrer56da2a52015-02-11 23:35:07 -0600525 a SHA256 digest signed by a DSA key.
526
Paul Kehrer5553d572015-03-23 21:08:01 -0500527.. _extension_oids:
528
Paul Kehrer2bb94642015-03-21 09:54:17 -0500529Extension OIDs
530~~~~~~~~~~~~~~
531
532.. data:: OID_BASIC_CONSTRAINTS
533
534 Corresponds to the dotted string ``"2.5.29.19"``. The identifier for the
Paul Kehrer611d3d32015-03-22 13:31:18 -0500535 :class:`BasicConstraints` extension type.
Paul Kehrer2bb94642015-03-21 09:54:17 -0500536
Paul Kehrer56da2a52015-02-11 23:35:07 -0600537
Paul Kehrer912d3fb2015-01-29 11:19:22 -0600538Exceptions
539~~~~~~~~~~
540
Paul Kehrere76cd272014-12-14 19:00:51 -0600541.. class:: InvalidVersion
Paul Kehrera68fd332014-11-27 07:08:40 -1000542
543 This is raised when an X.509 certificate has an invalid version number.
Paul Kehrer016e08a2014-11-26 09:41:18 -1000544
Paul Kehrerd5cccf72014-12-15 17:20:33 -0600545 .. attribute:: parsed_version
546
Paul Kehrerbbffc402014-12-17 13:33:55 -0600547 :type: int
548
549 Returns the raw version that was parsed from the certificate.
Paul Kehrerd5cccf72014-12-15 17:20:33 -0600550
Paul Kehrerfbb7ac82015-03-16 19:26:29 -0500551.. class:: DuplicateExtension
552
553 This is raised when more than one X.509 extension of the same type is
554 found within a certificate.
555
556 .. attribute:: oid
557
558 :type: :class:`ObjectIdentifier`
559
560 Returns the OID.
561
562.. class:: UnsupportedExtension
563
564 This is raised when a certificate contains an unsupported extension type.
565
566 .. attribute:: oid
567
568 :type: :class:`ObjectIdentifier`
569
570 Returns the OID.
571
Paul Kehrerfa56a232015-03-17 13:14:03 -0500572.. class:: ExtensionNotFound
573
574 This is raised when calling :meth:`Extensions.get_extension_for_oid` with
575 an extension OID that is not present in the certificate.
576
577 .. attribute:: oid
578
579 :type: :class:`ObjectIdentifier`
580
581 Returns the OID.
582
Paul Kehrer016e08a2014-11-26 09:41:18 -1000583
584.. _`public key infrastructure`: https://en.wikipedia.org/wiki/Public_key_infrastructure
Paul Kehrera68fd332014-11-27 07:08:40 -1000585.. _`TLS`: https://en.wikipedia.org/wiki/Transport_Layer_Security