blob: 1ed7b0eb3c0cb21c4ecff0dbf2f657742162144b [file] [log] [blame]
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001 Python OpenSSL Manual
2 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05003
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05004 Python OpenSSL Manual
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05005
Jean-Paul Calderone0ebe45a2009-04-25 10:40:31 -04006 Jean-Paul Calderone
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05007
Jean-Paul Calderone0ebe45a2009-04-25 10:40:31 -04008 exarkun@twistedmatrix.com
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05009
10 Abstract:
11
12 This module is a rather thin wrapper around (a subset of) the OpenSSL
13 library. With thin wrapper I mean that a lot of the object methods do
14 nothing more than calling a corresponding function in the OpenSSL
15 library.
16
17Contents
18
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050019 * 1 Introduction
20 * 2 Building and Installing
21 + 2.1 Building the Module on a Unix System
22 + 2.2 Building the Module on a Windows System
23 * 3 OpenSSL -- Python interface to OpenSSL
24 + 3.1 crypto -- Generic cryptographic module
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050025 + 3.2 rand -- An interface to the OpenSSL pseudo random number
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050026 generator
27 + 3.3 SSL -- An interface to the SSL-specific parts of OpenSSL
28 * 4 Internals
29 + 4.1 Exceptions
30 + 4.2 Callbacks
31 + 4.3 Acessing Socket Methods
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050032
33
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050034 1 Introduction
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050035
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -040036 The reason pyOpenSSL was created is that the SSL support in the socket
37 module in Python 2.1 (the contemporary version of Python when the
38 pyOpenSSL project was begun) was severely limited. Other OpenSSL
39 wrappers for Python at the time were also limited, though in different
40 ways. Unfortunately, Python's standard library SSL support has remained
41 weak, although other packages (such as M2Crypto^1) have made great
42 advances and now equal or exceed pyOpenSSL's functionality.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050043
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -040044 The reason pyOpenSSL continues to be maintained is that there is a
45 significant user community around it, as well as a large amount of
46 software which depends on it. It is a great benefit to many people for
47 pyOpenSSL to continue to exist and advance.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050048
49
50 2 Building and Installing
51
52 These instructions can also be found in the file INSTALL.
53
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050054 I have tested this on Debian Linux systems (woody and sid), Solaris 2.6
55 and 2.7. Others have successfully compiled it on Windows and NT.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050056
57
582.1 Building the Module on a Unix System
59
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050060 pyOpenSSL uses distutils, so there really shouldn't be any problems. To
61 build the library:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050062
63python setup.py build
64
65 If your OpenSSL header files aren't in /usr/include, you may need to
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050066 supply the -I flag to let the setup script know where to look. The same
67 goes for the libraries of course, use the -L flag. Note that build
68 won't accept these flags, so you have to run first build_ext and then
69 build! Example:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050070
71python setup.py build_ext -I/usr/local/ssl/include -L/usr/local/ssl/lib
72python setup.py build
73
74 Now you should have a directory called OpenSSL that contains e.g.
75 SSL.so and __init__.py somewhere in the build dicrectory, so just:
76
77python setup.py install
78
79 If you, for some arcane reason, don't want the module to appear in the
80 site-packages directory, use the --prefix option.
81
82 You can, of course, do
83
84python setup.py --help
85
86 to find out more about how to use the script.
87
88
892.2 Building the Module on a Windows System
90
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050091 Big thanks to Itamar Shtull-Trauring and Oleg Orlov for their help with
92 Windows build instructions. Same as for Unix systems, we have to
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050093 separate the build_ext and the build.
94
95 Building the library:
96
97setup.py build_ext -I ...\openssl\inc32 -L ...\openssl\out32dll
98setup.py build
99
100 Where ...\openssl is of course the location of your OpenSSL
101 installation.
102
103 Installation is the same as for Unix systems:
104
105setup.py install
106
107 And similarily, you can do
108
109setup.py --help
110
111 to get more information.
112
113
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500114 3 OpenSSL -- Python interface to OpenSSL
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500115
116 This package provides a high-level interface to the functions in the
117 OpenSSL library. The following modules are defined:
118
119 crypto
120 Generic cryptographic module. Note that if anything is
121 incomplete, this module is!
122
123 rand
124 An interface to the OpenSSL pseudo random number generator.
125
126 SSL
127 An interface to the SSL-specific parts of OpenSSL.
128
129
1303.1 crypto -- Generic cryptographic module
131
132 X509Type
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500133 See X509.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500134
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500135 class X509()
136 A class representing X.509 certificates.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500137
138 X509NameType
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500139 See X509Name.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500140
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500141 class X509Name(x509name)
142 A class representing X.509 Distinguished Names.
143
144 This constructor creates a copy of x509name which should be an
145 instance of X509Name.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500146
147 X509ReqType
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500148 See X509Req.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500149
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500150 class X509Req()
151 A class representing X.509 certificate requests.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500152
153 X509StoreType
154 A Python type object representing the X509Store object type.
155
156 PKeyType
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500157 See PKey.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500158
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500159 class PKey()
160 A class representing DSA or RSA keys.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500161
162 PKCS7Type
163 A Python type object representing the PKCS7 object type.
164
165 PKCS12Type
166 A Python type object representing the PKCS12 object type.
167
168 X509ExtensionType
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500169 See X509Extension.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500170
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500171 class X509Extension(typename, critical, value[, subject][, issuer])
172 A class representing an X.509 v3 certificate extensions. See
173 http://openssl.org/docs/apps/x509v3_config.html#STANDARD_EXTENSI
174 ONSfor typename strings and their options. Optional parameters
175 subject and issuer must be X509 objects.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500176
177 NetscapeSPKIType
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500178 See NetscapeSPKI.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500179
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500180 class NetscapeSPKI([enc])
181 A class representing Netscape SPKI objects.
182
183 If the enc argument is present, it should be a base64-encoded
184 string representing a NetscapeSPKI object, as returned by the
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500185 b64_encode method.
186
Jean-Paul Calderoneec155e52010-10-07 22:34:15 -0400187 class CRL()
188 A class representing Certifcate Revocation List objects.
189
190 class Revoked()
191 A class representing Revocation objects of CRL.
192
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500193 FILETYPE_PEM
194
195 FILETYPE_ASN1
196 File type constants.
197
198 TYPE_RSA
199
200 TYPE_DSA
201 Key type constants.
202
203 exception Error
204 Generic exception used in the crypto module.
205
206 dump_certificate(type, cert)
207 Dump the certificate cert into a buffer string encoded with the
208 type type.
209
210 dump_certificate_request(type, req)
211 Dump the certificate request req into a buffer string encoded
212 with the type type.
213
214 dump_privatekey(type, pkey[, cipher, passphrase])
215 Dump the private key pkey into a buffer string encoded with the
216 type type, optionally (if type is FILETYPE_PEM) encrypting it
217 using cipher and passphrase.
218
219 passphrase must be either a string or a callback for providing
220 the pass phrase.
221
222 load_certificate(type, buffer)
223 Load a certificate (X509) from the string buffer encoded with
224 the type type.
225
226 load_certificate_request(type, buffer)
227 Load a certificate request (X509Req) from the string buffer
228 encoded with the type type.
229
230 load_privatekey(type, buffer[, passphrase])
231 Load a private key (PKey) from the string buffer encoded with
232 the type type (must be one of FILETYPE_PEM and FILETYPE_ASN1).
233
234 passphrase must be either a string or a callback for providing
235 the pass phrase.
236
Jean-Paul Calderoneec155e52010-10-07 22:34:15 -0400237 load_crl(type, buffer)
238 Load Certificate Revocation List (CRL) data from a string
239 buffer. buffer encoded with the type type. The type type must
240 either FILETYPE_PEM or FILETYPE_ASN1).
241
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500242 load_pkcs7_data(type, buffer)
243 Load pkcs7 data from the string buffer encoded with the type
244 type.
245
246 load_pkcs12(buffer[, passphrase])
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500247 Load pkcs12 data from the string buffer. If the pkcs12 structure
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500248 is encrypted, a passphrase must be included. The MAC is always
249 checked and thus required.
250
251 See also the man page for the C function PKCS12_parse.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500252
Jean-Paul Calderoneec155e52010-10-07 22:34:15 -0400253 sign(key, data, digest)
254 Sign a data string using the given key and message digest.
255
256 key is a PKey instance. data is a str instance. digest is a str
257 naming a supported message digest type, for example ``sha1''.
258 New in version 0.11.
259
260 verify(certificate, signature, data, digest)
261 Verify the signature for a data string.
262
263 certificate is a X509 instance corresponding to the private key
264 which generated the signature. signature is a str instance
265 giving the signature itself. data is a str instance giving the
266 data to which the signature applies. digest is a str instance
267 naming the message digest type of the signature, for example
268 ``sha1''. New in version 0.11.
269
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500270
271 3.1.1 X509 objects
272
273 X509 objects have the following methods:
274
275 get_issuer()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500276 Return an X509Name object representing the issuer of the
277 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500278
279 get_pubkey()
280 Return a PKey object representing the public key of the
281 certificate.
282
283 get_serial_number()
284 Return the certificate serial number.
285
286 get_subject()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500287 Return an X509Name object representing the subject of the
288 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500289
290 get_version()
291 Return the certificate version.
292
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400293 get_notBefore()
294 Return a string giving the time before which the certificate is
295 not valid. The string is formatted as an ASN1 GENERALIZEDTIME:
296
297 YYYYMMDDhhmmssZ
298 YYYYMMDDhhmmss+hhmm
299 YYYYMMDDhhmmss-hhmm
300
Jean-Paul Calderone24c99262008-03-09 21:48:06 -0400301 If no value exists for this field, None is returned.
302
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400303 get_notAfter()
304 Return a string giving the time after which the certificate is
305 not valid. The string is formatted as an ASN1 GENERALIZEDTIME:
306
307 YYYYMMDDhhmmssZ
308 YYYYMMDDhhmmss+hhmm
309 YYYYMMDDhhmmss-hhmm
310
Jean-Paul Calderone24c99262008-03-09 21:48:06 -0400311 If no value exists for this field, None is returned.
312
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400313 set_notBefore(when)
314 Change the time before which the certificate is not valid. when
315 is a string formatted as an ASN1 GENERALIZEDTIME:
316
317 YYYYMMDDhhmmssZ
318 YYYYMMDDhhmmss+hhmm
319 YYYYMMDDhhmmss-hhmm
320
321 set_notAfter(when)
322 Change the time after which the certificate is not valid. when
323 is a string formatted as an ASN1 GENERALIZEDTIME:
324
325 YYYYMMDDhhmmssZ
326 YYYYMMDDhhmmss+hhmm
327 YYYYMMDDhhmmss-hhmm
328
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500329 gmtime_adj_notBefore(time)
330 Adjust the timestamp (in GMT) when the certificate starts being
331 valid.
332
333 gmtime_adj_notAfter(time)
334 Adjust the timestamp (in GMT) when the certificate stops being
335 valid.
336
337 has_expired()
338 Checks the certificate's time stamp against current time.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500339 Returns true if the certificate has expired and false otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500340
341 set_issuer(issuer)
342 Set the issuer of the certificate to issuer.
343
344 set_pubkey(pkey)
345 Set the public key of the certificate to pkey.
346
347 set_serial_number(serialno)
348 Set the serial number of the certificate to serialno.
349
350 set_subject(subject)
351 Set the subject of the certificate to subject.
352
353 set_version(version)
354 Set the certificate version to version.
355
356 sign(pkey, digest)
357 Sign the certificate, using the key pkey and the message digest
358 algorithm identified by the string digest.
359
360 subject_name_hash()
361 Return the hash of the certificate subject.
362
363 digest(digest_name)
364 Return a digest of the certificate, using the digest_name
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500365 method. digest_name must be a string describing a digest
366 algorithm supported by OpenSSL (by EVP_get_digestbyname,
367 specifically). For example, "md5" or "sha1".
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500368
369 add_extensions(extensions)
370 Add the extensions in the sequence extensions to the
371 certificate.
372
373
374 3.1.2 X509Name objects
375
Jean-Paul Calderone2dd8ff52008-03-24 17:43:58 -0400376 X509Name objects have the following methods:
377
378 hash()
379 Return an integer giving the first four bytes of the MD5 digest
380 of the DER representation of the name.
381
Jean-Paul Calderoned2532d82008-03-25 15:20:39 -0400382 der()
383 Return a string giving the DER representation of the name.
384
Jean-Paul Calderonec54cc182008-03-26 21:11:07 -0400385 get_components()
386 Return a list of two-tuples of strings giving the components of
387 the name.
388
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500389 X509Name objects have the following members:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500390
391 countryName
392 The country of the entity. C may be used as an alias for
393 countryName.
394
395 stateOrProvinceName
396 The state or province of the entity. ST may be used as an alias
397 for stateOrProvinceName·
398
399 localityName
400 The locality of the entity. L may be used as an alias for
401 localityName.
402
403 organizationName
404 The organization name of the entity. O may be used as an alias
405 for organizationName.
406
407 organizationalUnitName
408 The organizational unit of the entity. OU may be used as an
409 alias for organizationalUnitName.
410
411 commonName
412 The common name of the entity. CN may be used as an alias for
413 commonName.
414
415 emailAddress
416 The e-mail address of the entity.
417
418
419 3.1.3 X509Req objects
420
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500421 X509Req objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500422
423 get_pubkey()
424 Return a PKey object representing the public key of the
425 certificate request.
426
427 get_subject()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500428 Return an X509Name object representing the subject of the
429 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500430
431 set_pubkey(pkey)
432 Set the public key of the certificate request to pkey.
433
434 sign(pkey, digest)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500435 Sign the certificate request, using the key pkey and the message
436 digest algorithm identified by the string digest.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500437
438 verify(pkey)
439 Verify a certificate request using the public key pkey.
440
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500441 set_version(version)
442 Set the version (RFC 2459, 4.1.2.1) of the certificate request
443 to version.
444
445 get_version()
446 Get the version (RFC 2459, 4.1.2.1) of the certificate request.
447
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500448
449 3.1.4 X509Store objects
450
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500451 The X509Store object has currently just one method:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500452
453 add_cert(cert)
454 Add the certificate cert to the certificate store.
455
456
457 3.1.5 PKey objects
458
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500459 The PKey object has the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500460
461 bits()
462 Return the number of bits of the key.
463
464 generate_key(type, bits)
465 Generate a public/private key pair of the type type (one of
466 TYPE_RSA and TYPE_DSA) with the size bits.
467
468 type()
469 Return the type of the key.
470
471
472 3.1.6 PKCS7 objects
473
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500474 PKCS7 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500475
476 type_is_signed()
477 FIXME
478
479 type_is_enveloped()
480 FIXME
481
482 type_is_signedAndEnveloped()
483 FIXME
484
485 type_is_data()
486 FIXME
487
488 get_type_name()
489 Get the type name of the PKCS7.
490
491
492 3.1.7 PKCS12 objects
493
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500494 PKCS12 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500495
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500496 export([passphrase=None][, iter=2048][, maciter=1])
497 Returns a PKCS12 object as a string.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500498
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500499 The optional passphrase must be a string not a callback.
500
501 See also the man page for the C function PKCS12_create.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500502
503 get_ca_certificates()
504 Return CA certificates within the PKCS12 object as a tuple.
505 Returns None if no CA certificates are present.
506
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500507 get_certificate()
508 Return certificate portion of the PKCS12 structure.
509
510 get_friendlyname()
511 Return friendlyName portion of the PKCS12 structure.
512
513 get_privatekey()
514 Return private key portion of the PKCS12 structure
515
516 set_ca_certificates(cacerts)
517 Replace or set the CA certificates within the PKCS12 object with
518 the sequence cacerts.
519
520 Set cacerts to None to remove all CA certificates.
521
522 set_certificate(cert)
523 Replace or set the certificate portion of the PKCS12 structure.
524
525 set_friendlyname(name)
526 Replace or set the friendlyName portion of the PKCS12 structure.
527
528 set_privatekey(pkey)
529 Replace or set private key portion of the PKCS12 structure
530
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500531
532 3.1.8 X509Extension objects
533
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500534 X509Extension objects have several methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500535
536 get_critical()
537 Return the critical field of the extension object.
538
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500539 get_short_name()
540 Return the short type name of the extension object.
541
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500542
543 3.1.9 NetscapeSPKI objects
544
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500545 NetscapeSPKI objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500546
547 b64_encode()
548 Return a base64-encoded string representation of the object.
549
550 get_pubkey()
551 Return the public key of object.
552
553 set_pubkey(key)
554 Set the public key of the object to key.
555
556 sign(key, digest_name)
557 Sign the NetscapeSPKI object using the given key and
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500558 digest_name. digest_name must be a string describing a digest
559 algorithm supported by OpenSSL (by EVP_get_digestbyname,
560 specifically). For example, "md5" or "sha1".
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500561
562 verify(key)
563 Verify the NetscapeSPKI object using the given key.
564
565
Jean-Paul Calderoneec155e52010-10-07 22:34:15 -0400566 3.1.10 CRL objects
567
568 CRL objects have the following methods:
569
570 add_revoked(revoked)
571 Add a Revoked object to the CRL, by value not reference.
572
573 export(cert, key[, type=FILETYPE_PEM][, days=100])
574 Use cert and key to sign the CRL and return the CRL as a string.
575 days is the number of days before the next CRL is due.
576
577 get_revoked()
578 Return a tuple of Revoked objects, by value not reference.
579
580
581 3.1.11 Revoked objects
582
583 Revoked objects have the following methods:
584
585 all_reasons()
586 Return a list of all supported reasons.
587
588 get_reason()
589 Return the revocation reason as a str. Can be None, which
590 differs from "Unspecified".
591
592 get_rev_date()
593 Return the revocation date as a str. The string is formatted as
594 an ASN1 GENERALIZEDTIME.
595
596 get_serial()
597 Return a str containing a hex number of the serial of the
598 revoked certificate.
599
600 set_reason(reason)
601 Set the revocation reason. reason must be None or a string, but
602 the values are limited. Spaces and case are ignored. See
603 all_reasons.
604
605 set_rev_date(date)
606 Set the revocation date. The string is formatted as an ASN1
607 GENERALIZEDTIME.
608
609 set_serial(serial)
610 serial is a string containing a hex number of the serial of the
611 revoked certificate.
612
613
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05006143.2 rand -- An interface to the OpenSSL pseudo random number generator
615
616 This module handles the OpenSSL pseudo random number generator (PRNG)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500617 and declares the following:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500618
619 add(string, entropy)
620 Mix bytes from string into the PRNG state. The entropy argument
621 is (the lower bound of) an estimate of how much randomness is
622 contained in string, measured in bytes. For more information,
623 see e.g. RFC 1750.
624
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500625 bytes(num_bytes)
626 Get some random bytes from the PRNG as a string.
627
628 This is a wrapper for the C function RAND_bytes.
629
630 cleanup()
631 Erase the memory used by the PRNG.
632
633 This is a wrapper for the C function RAND_cleanup.
634
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500635 egd(path[, bytes])
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -0400636 Query the Entropy Gathering Daemon^2 on socket path for bytes
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500637 bytes of random data and and uses add to seed the PRNG. The
638 default value of bytes is 255.
639
640 load_file(path[, bytes])
641 Read bytes bytes (or all of it, if bytes is negative) of data
642 from the file path to seed the PRNG. The default value of bytes
643 is -1.
644
645 screen()
646 Add the current contents of the screen to the PRNG state.
647 Availability: Windows.
648
649 seed(string)
650 This is equivalent to calling add with entropy as the length of
651 the string.
652
653 status()
654 Returns true if the PRNG has been seeded with enough data, and
655 false otherwise.
656
657 write_file(path)
658 Write a number of random bytes (currently 1024) to the file
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500659 path. This file can then be used with load_file to seed the PRNG
660 again.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500661
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500662 exception Error
663 If the current RAND method supports any errors, this is raised
664 when needed. The default method does not raise this when the
665 entropy pool is depleted.
666
667 Whenever this exception is raised directly, it has a list of
668 error messages from the OpenSSL error queue, where each item is
669 a tuple (lib, function, reason). Here lib, function and reason
670 are all strings, describing where and what the problem is. See
671 err(3) for more information.
672
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500673
6743.3 SSL -- An interface to the SSL-specific parts of OpenSSL
675
676 This module handles things specific to SSL. There are two objects
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500677 defined: Context, Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500678
679 SSLv2_METHOD
680
681 SSLv3_METHOD
682
683 SSLv23_METHOD
684
685 TLSv1_METHOD
686 These constants represent the different SSL methods to use when
687 creating a context object.
688
689 VERIFY_NONE
690
691 VERIFY_PEER
692
693 VERIFY_FAIL_IF_NO_PEER_CERT
694 These constants represent the verification mode used by the
695 Context object's set_verify method.
696
697 FILETYPE_PEM
698
699 FILETYPE_ASN1
700 File type constants used with the use_certificate_file and
701 use_privatekey_file methods of Context objects.
702
703 OP_SINGLE_DH_USE
704
705 OP_EPHEMERAL_RSA
706
707 OP_NO_SSLv2
708
709 OP_NO_SSLv3
710
711 OP_NO_TLSv1
712 Constants used with set_options of Context objects.
713 OP_SINGLE_DH_USE means to always create a new key when using
714 ephemeral Diffie-Hellman. OP_EPHEMERAL_RSA means to always use
715 ephemeral RSA keys when doing RSA operations. OP_NO_SSLv2,
716 OP_NO_SSLv3 and OP_NO_TLSv1 means to disable those specific
717 protocols. This is interesting if you're using e.g.
718 SSLv23_METHOD to get an SSLv2-compatible handshake, but don't
719 want to use SSLv2.
720
721 ContextType
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500722 See Context.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500723
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500724 class Context(method)
725 A class representing SSL contexts. Contexts define the
726 parameters of one or more SSL connections.
727
728 method should be SSLv2_METHOD, SSLv3_METHOD, SSLv23_METHOD or
729 TLSv1_METHOD.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500730
731 ConnectionType
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500732 See Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500733
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500734 class Connection(context, socket)
735 A class representing SSL connections.
736
737 context should be an instance of Context and socket should be a
738 socket ^3 object. socket may be None; in this case, the
739 Connection is created with a memory BIO: see the bio_read,
740 bio_write, and bio_shutdown methods.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500741
742 exception Error
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500743 This exception is used as a base class for the other SSL-related
744 exceptions, but may also be raised directly.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500745
746 Whenever this exception is raised directly, it has a list of
747 error messages from the OpenSSL error queue, where each item is
748 a tuple (lib, function, reason). Here lib, function and reason
749 are all strings, describing where and what the problem is. See
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500750 err(3) for more information.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500751
752 exception ZeroReturnError
753 This exception matches the error return code
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500754 SSL_ERROR_ZERO_RETURN, and is raised when the SSL Connection has
755 been closed. In SSL 3.0 and TLS 1.0, this only occurs if a
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500756 closure alert has occurred in the protocol, i.e. the connection
757 has been closed cleanly. Note that this does not necessarily
758 mean that the transport layer (e.g. a socket) has been closed.
759
760 It may seem a little strange that this is an exception, but it
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500761 does match an SSL_ERROR code, and is very convenient.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500762
763 exception WantReadError
764 The operation did not complete; the same I/O method should be
765 called again later, with the same arguments. Any I/O method can
766 lead to this since new handshakes can occur at any time.
767
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500768 The wanted read is for dirty data sent over the network, not the
769 clean data inside the tunnel. For a socket based SSL connection,
770 read means data coming at us over the network. Until that read
771 succeeds, the attempted OpenSSL.SSL.Connection.recv,
772 OpenSSL.SSL.Connection.send, or
773 OpenSSL.SSL.Connection.do_handshake is prevented or incomplete.
774 You probably want to select() on the socket before trying again.
775
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500776 exception WantWriteError
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500777 See WantReadError. The socket send buffer may be too full to
778 write more data.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500779
780 exception WantX509LookupError
781 The operation did not complete because an application callback
782 has asked to be called again. The I/O method should be called
783 again later, with the same arguments. Note: This won't occur in
784 this version, as there are no such callbacks in this version.
785
786 exception SysCallError
787 The SysCallError occurs when there's an I/O error and OpenSSL's
788 error queue does not contain any information. This can mean two
789 things: An error in the transport protocol, or an end of file
790 that violates the protocol. The parameter to the exception is
791 always a pair (errnum, errstr).
792
793
794 3.3.1 Context objects
795
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500796 Context objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500797
798 check_privatekey()
799 Check if the private key (loaded with use_privatekey[_file])
800 matches the certificate (loaded with use_certificate[_file]).
Jean-Paul Calderonef05fbbe2008-03-06 21:52:35 -0500801 Returns None if they match, raises Error otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500802
803 get_app_data()
804 Retrieve application data as set by set_app_data.
805
806 get_cert_store()
807 Retrieve the certificate store (a X509Store object) that the
808 context uses. This can be used to add "trusted" certificates
809 without using the. load_verify_locations() method.
810
811 get_timeout()
812 Retrieve session timeout, as set by set_timeout. The default is
813 300 seconds.
814
815 get_verify_depth()
816 Retrieve the Context object's verify depth, as set by
817 set_verify_depth.
818
819 get_verify_mode()
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500820 Retrieve the Context object's verify mode, as set by set_verify.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500821
822 load_client_ca(pemfile)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500823 Read a file with PEM-formatted certificates that will be sent to
824 the client when requesting a client certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500825
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500826 set_client_ca_list(certificate_authorities)
827 Replace the current list of preferred certificate signers that
828 would be sent to the client when requesting a client certificate
829 with the certificate_authorities sequence of
830 OpenSSL.crypto.X509Names.
831
832 New in version 0.10.
833
834 add_client_ca(certificate_authority)
835 Extract a OpenSSL.crypto.X509Name from the certificate_authority
836 OpenSSL.crypto.X509 certificate and add it to the list of
837 preferred certificate signers sent to the client when requesting
838 a client certificate.
839
840 New in version 0.10.
841
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500842 load_verify_locations(pemfile, capath)
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500843 Specify where CA certificates for verification purposes are
844 located. These are trusted certificates. Note that the
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500845 certificates have to be in PEM format. If capath is passed, it
846 must be a directory prepared using the c_rehash tool included
847 with OpenSSL. Either, but not both, of pemfile or capath may be
848 None.
849
850 set_default_verify_paths()
851 Specify that the platform provided CA certificates are to be
852 used for verification purposes. This method may not work
853 properly on OS X.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500854
855 load_tmp_dh(dhfile)
856 Load parameters for Ephemeral Diffie-Hellman from dhfile.
857
858 set_app_data(data)
859 Associate data with this Context object. data can be retrieved
860 later using the get_app_data method.
861
862 set_cipher_list(ciphers)
863 Set the list of ciphers to be used in this context. See the
864 OpenSSL manual for more information (e.g. ciphers(1))
865
866 set_info_callback(callback)
867 Set the information callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500868 called from time to time during SSL handshakes. callback should
869 take three arguments: a Connection object and two integers. The
870 first integer specifies where in the SSL handshake the function
871 was called, and the other the return code from a (possibly
872 failed) internal function call.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500873
874 set_options(options)
875 Add SSL options. Options you have set before are not cleared!
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500876 This method should be used with the OP_* constants.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500877
878 set_passwd_cb(callback[, userdata])
879 Set the passphrase callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500880 called when a private key with a passphrase is loaded. callback
Jean-Paul Calderone1eeb29e2008-10-19 11:50:53 -0400881 must accept three positional arguments. First, an integer giving
882 the maximum length of the passphrase it may return. If the
883 returned passphrase is longer than this, it will be truncated.
884 Second, a boolean value which will be true if the user should be
885 prompted for the passphrase twice and the callback should verify
886 that the two values supplied are equal. Third, the value given
887 as the userdata parameter to set_passwd_cb. If an error occurs,
888 callback should return a false value (e.g. an empty string).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500889
890 set_session_id(name)
891 Set the context name within which a session can be reused for
892 this Context object. This is needed when doing session
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500893 resumption, because there is no way for a stored session to know
894 which Context object it is associated with. name may be any
895 binary data.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500896
897 set_timeout(timeout)
898 Set the timeout for newly created sessions for this Context
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500899 object to timeout. timeout must be given in (whole) seconds. The
900 default value is 300 seconds. See the OpenSSL manual for more
901 information (e.g. SSL_CTX_set_timeout(3)).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500902
903 set_verify(mode, callback)
904 Set the verification flags for this Context object to mode and
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500905 specify that callback should be used for verification callbacks.
906 mode should be one of VERIFY_NONE and VERIFY_PEER. If
907 VERIFY_PEER is used, mode can be OR:ed with
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500908 VERIFY_FAIL_IF_NO_PEER_CERT and VERIFY_CLIENT_ONCE to further
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500909 control the behaviour. callback should take five arguments: A
910 Connection object, an X509 object, and three integer variables,
911 which are in turn potential error number, error depth and return
912 code. callback should return true if verification passes and
913 false otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500914
915 set_verify_depth(depth)
916 Set the maximum depth for the certificate chain verification
917 that shall be allowed for this Context object.
918
919 use_certificate(cert)
920 Use the certificate cert which has to be a X509 object.
921
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500922 add_extra_chain_cert(cert)
923 Adds the certificate cert, which has to be a X509 object, to the
924 certificate chain presented together with the certificate.
925
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500926 use_certificate_chain_file(file)
927 Load a certificate chain from file which must be PEM encoded.
928
929 use_privatekey(pkey)
930 Use the private key pkey which has to be a PKey object.
931
932 use_certificate_file(file[, format])
933 Load the first certificate found in file. The certificate must
934 be in the format specified by format, which is either
935 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
936
937 use_privatekey_file(file[, format])
938 Load the first private key found in file. The private key must
939 be in the format specified by format, which is either
940 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
941
942
943 3.3.2 Connection objects
944
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500945 Connection objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500946
947 accept()
948 Call the accept method of the underlying socket and set up SSL
949 on the returned socket, using the Context object supplied to
950 this Connection object at creation. Returns a pair (conn,
951 address). where conn is the new Connection object created, and
952 address is as returned by the socket's accept.
953
954 bind(address)
955 Call the bind method of the underlying socket.
956
957 close()
958 Call the close method of the underlying socket. Note: If you
959 want correct SSL closure, you need to call the shutdown method
960 first.
961
962 connect(address)
963 Call the connect method of the underlying socket and set up SSL
964 on the socket, using the Context object supplied to this
965 Connection object at creation.
966
967 connect_ex(address)
968 Call the connect_ex method of the underlying socket and set up
969 SSL on the socket, using the Context object supplied to this
970 Connection object at creation. Note that if the connect_ex
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500971 method of the socket doesn't return 0, SSL won't be initialized.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500972
973 do_handshake()
974 Perform an SSL handshake (usually called after renegotiate or
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500975 one of set_accept_state or set_accept_state). This can raise the
976 same exceptions as send and recv.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500977
978 fileno()
979 Retrieve the file descriptor number for the underlying socket.
980
981 listen(backlog)
982 Call the listen method of the underlying socket.
983
984 get_app_data()
985 Retrieve application data as set by set_app_data.
986
987 get_cipher_list()
988 Retrieve the list of ciphers used by the Connection object.
989 WARNING: This API has changed. It used to take an optional
990 parameter and just return a string, but not it returns the
991 entire list in one go.
992
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -0500993 get_client_ca_list()
994 Retrieve the list of preferred client certificate issuers sent
995 by the server as OpenSSL.crypto.X509Name objects.
996
997 If this is a client Connection, the list will be empty until the
998 connection with the server is established.
999
1000 If this is a server Connection, return the list of certificate
1001 authorities that will be sent or has been sent to the client, as
1002 controlled by this Connection's Context.
1003
1004 New in version 0.10.
1005
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001006 get_context()
1007 Retrieve the Context object associated with this Connection.
1008
1009 get_peer_certificate()
1010 Retrieve the other side's certificate (if any)
1011
1012 getpeername()
1013 Call the getpeername method of the underlying socket.
1014
1015 getsockname()
1016 Call the getsockname method of the underlying socket.
1017
1018 getsockopt(level, optname[, buflen])
1019 Call the getsockopt method of the underlying socket.
1020
1021 pending()
1022 Retrieve the number of bytes that can be safely read from the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001023 SSL buffer (not the underlying transport buffer).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001024
1025 recv(bufsize)
1026 Receive data from the Connection. The return value is a string
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001027 representing the data received. The maximum amount of data to be
1028 received at once, is specified by bufsize.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001029
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -05001030 bio_write(bytes)
1031 If the Connection was created with a memory BIO, this method can
1032 be used to add bytes to the read end of that memory BIO. The
1033 Connection can then read the bytes (for example, in response to
1034 a call to recv).
1035
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001036 renegotiate()
1037 Renegotiate the SSL session. Call this if you wish to change
1038 cipher suites or anything like that.
1039
1040 send(string)
1041 Send the string data to the Connection.
1042
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -05001043 bio_read(bufsize)
1044 If the Connection was created with a memory BIO, this method can
1045 be used to read bytes from the write end of that memory BIO.
1046 Many Connection methods will add bytes which must be read in
1047 this manner or the buffer will eventually fill up and the
1048 Connection will be able to take no further actions.
1049
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001050 sendall(string)
1051 Send all of the string data to the Connection. This calls send
1052 repeatedly until all data is sent. If an error occurs, it's
1053 impossible to tell how much data has been sent.
1054
1055 set_accept_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001056 Set the connection to work in server mode. The handshake will be
1057 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001058
1059 set_app_data(data)
1060 Associate data with this Connection object. data can be
1061 retrieved later using the get_app_data method.
1062
1063 set_connect_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001064 Set the connection to work in client mode. The handshake will be
1065 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001066
1067 setblocking(flag)
1068 Call the setblocking method of the underlying socket.
1069
1070 setsockopt(level, optname, value)
1071 Call the setsockopt method of the underlying socket.
1072
1073 shutdown()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001074 Send the shutdown message to the Connection. Returns true if the
1075 shutdown message exchange is completed and false otherwise (in
1076 which case you call recv() or send() when the connection becomes
1077 readable/writeable.
1078
1079 get_shutdown()
1080 Get the shutdown state of the Connection. Returns a bitvector of
1081 either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
1082
1083 set_shutdown(state)
1084 Set the shutdown state of the Connection. state is a bitvector
1085 of either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001086
1087 sock_shutdown(how)
1088 Call the shutdown method of the underlying socket.
1089
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -05001090 bio_shutdown()
1091 If the Connection was created with a memory BIO, this method can
1092 be used to indicate that ``end of file'' has been reached on the
1093 read end of that memory BIO.
1094
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001095 state_string()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001096 Retrieve a verbose string detailing the state of the Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001097
Jean-Paul Calderone215d51b2009-11-13 09:19:21 -05001098 client_random()
1099 Retrieve the random value used with the client hello message.
1100
1101 server_random()
1102 Retrieve the random value used with the server hello message.
1103
1104 master_key()
1105 Retrieve the value of the master key for this session.
1106
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001107 want_read()
1108 Checks if more data has to be read from the transport layer to
1109 complete an operation.
1110
1111 want_write()
1112 Checks if there is data to write to the transport layer to
1113 complete an operation.
1114
1115
1116 4 Internals
1117
1118 We ran into three main problems developing this: Exceptions, callbacks
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001119 and accessing socket methods. This is what this chapter is about.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001120
1121
11224.1 Exceptions
1123
1124 We realized early that most of the exceptions would be raised by the
1125 I/O functions of OpenSSL, so it felt natural to mimic OpenSSL's error
1126 code system, translating them into Python exceptions. This naturally
1127 gives us the exceptions SSL.ZeroReturnError, SSL.WantReadError,
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001128 SSL.WantWriteError, SSL.WantX509LookupError and SSL.SysCallError.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001129
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001130 For more information about this, see section 3.3.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001131
1132
11334.2 Callbacks
1134
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001135 There are a number of problems with callbacks. First of all, OpenSSL is
1136 written as a C library, it's not meant to have Python callbacks, so a
1137 way around that is needed. Another problem is thread support. A lot of
1138 the OpenSSL I/O functions can block if the socket is in blocking mode,
1139 and then you want other Python threads to be able to do other things.
Jean-Paul Calderone657d3ec2008-09-21 18:59:46 -04001140 The real trouble is if you've released the global CPython interpreter
1141 lock to do a potentially blocking operation, and the operation calls a
1142 callback. Then we must take the GIL back, since calling Python APIs
1143 without holding it is not allowed.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001144
1145 There are two solutions to the first problem, both of which are
1146 necessary. The first solution to use is if the C callback allows
1147 ''userdata'' to be passed to it (an arbitrary pointer normally). This
1148 is great! We can set our Python function object as the real userdata
1149 and emulate userdata for the Python function in another way. The other
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001150 solution can be used if an object with an ''app_data'' system always is
1151 passed to the callback. For example, the SSL object in OpenSSL has
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001152 app_data functions and in e.g. the verification callbacks, you can
1153 retrieve the related SSL object. What we do is to set our wrapper
1154 Connection object as app_data for the SSL object, and we can easily
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001155 find the Python callback.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001156
Jean-Paul Calderone657d3ec2008-09-21 18:59:46 -04001157 The other problem is solved using thread local variables. Whenever the
1158 GIL is released before calling into an OpenSSL API, the PyThreadState
1159 pointer returned by PyEval_SaveState is stored in a global thread local
1160 variable (using Python's own TLS API, PyThread_set_key_value). When it
1161 is necessary to re-acquire the GIL, either after the OpenSSL API
1162 returns or in a C callback invoked by that OpenSSL API, the value of
1163 the thread local variable is retrieved (PyThread_get_key_value) and
1164 used to re-acquire the GIL. This allows Python threads to execute while
1165 OpenSSL APIs are running and allows use of any particular pyOpenSSL
1166 object from any Python thread, since there is no per-thread state
1167 associated with any of these objects and since OpenSSL is threadsafe
1168 (as long as properly initialized, as pyOpenSSL initializes it).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001169
1170
11714.3 Acessing Socket Methods
1172
1173 We quickly saw the benefit of wrapping socket methods in the
1174 SSL.Connection class, for an easy transition into using SSL. The
1175 problem here is that the socket module lacks a C API, and all the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001176 methods are declared static. One approach would be to have OpenSSL as a
1177 submodule to the socket module, placing all the code in socketmodule.c,
1178 but this is obviously not a good solution, since you might not want to
1179 import tonnes of extra stuff you're not going to use when importing the
1180 socket module. The other approach is to somehow get a pointer to the
1181 method to be called, either the C function, or a callable Python
1182 object. This is not really a good solution either, since there's a lot
1183 of lookups involved.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001184
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001185 The way it works is that you have to supply a ``socket-like'' transport
1186 object to the SSL.Connection. The only requirement of this object is
1187 that it has a fileno() method that returns a file descriptor that's
1188 valid at the C level (i.e. you can use the system calls read and
1189 write). If you want to use the connect() or accept() methods of the
1190 SSL.Connection object, the transport object has to supply such methods
1191 too. Apart from them, any method lookups in the SSL.Connection object
1192 that fail are passed on to the underlying transport object.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001193
1194 Future changes might be to allow Python-level transport objects, that
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001195 instead of having fileno() methods, have read() and write() methods, so
1196 more advanced features of Python can be used. This would probably
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001197 entail some sort of OpenSSL ``BIOs'', but converting Python strings
1198 back and forth is expensive, so this shouldn't be used unless
1199 necessary. Other nice things would be to be able to pass in different
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001200 transport objects for reading and writing, but then the fileno() method
1201 of SSL.Connection becomes virtually useless. Also, should the method
1202 resolution be used on the read-transport or the write-transport?
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001203
1204 About this document ...
1205
1206 Python OpenSSL Manual
1207
1208 This document was generated using the LaTeX2HTML translator.
1209
1210 LaTeX2HTML is Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos,
1211 Computer Based Learning Unit, University of Leeds, and Copyright ©
1212 1997, 1998, Ross Moore, Mathematics Department, Macquarie University,
1213 Sydney.
1214
1215 The application of LaTeX2HTML to the Python documentation has been
1216 heavily tailored by Fred L. Drake, Jr. Original navigation icons were
1217 contributed by Christopher Petrilli.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001218 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001219
1220 Footnotes
1221
1222 ... M2Crypto^1
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -04001223 See http://chandlerproject.org/Projects/MeTooCrypto
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001224
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -04001225 ... Daemon^2
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001226 See http://www.lothar.com/tech/crypto/
1227
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -04001228 ... socket^3
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001229 Actually, all that is required is an object that behaves like a
1230 socket, you could even use files, even though it'd be tricky to
1231 get the handshakes right!
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001232 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001233
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001234 Python OpenSSL Manual
1235 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001236
Jean-Paul Calderoneec155e52010-10-07 22:34:15 -04001237 Release 0.11a1.