blob: 3ac1acdfcab54dc51a159c55dd1cba2705ef6a0d [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
6 Martin Sjögren
7
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05008 martin@strakt.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
133 A Python type object representing the X509 object type.
134
135 X509()
136 Factory function that creates an X509 object.
137
138 X509NameType
139 A Python type object representing the X509Name object type.
140
141 X509Name(x509name)
142 Factory function that creates a copy of x509name.
143
144 X509ReqType
145 A Python type object representing the X509Req object type.
146
147 X509Req()
148 Factory function that creates an X509Req object.
149
150 X509StoreType
151 A Python type object representing the X509Store object type.
152
153 PKeyType
154 A Python type object representing the PKey object type.
155
156 PKey()
157 Factory function that creates a PKey object.
158
159 PKCS7Type
160 A Python type object representing the PKCS7 object type.
161
162 PKCS12Type
163 A Python type object representing the PKCS12 object type.
164
165 X509ExtensionType
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500166 A Python type object representing the X509Extension object type.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500167
168 X509Extension(typename, critical, value)
169 Factory function that creates a X509Extension object.
170
171 NetscapeSPKIType
172 A Python type object representing the NetscapeSPKI object type.
173
174 NetscapeSPKI([enc])
175 Factory function that creates a NetscapeSPKI object. If the enc
176 argument is present, it should be a base64-encoded string
177 representing a NetscapeSPKI object, as returned by the
178 b64_encode method.
179
180 FILETYPE_PEM
181
182 FILETYPE_ASN1
183 File type constants.
184
185 TYPE_RSA
186
187 TYPE_DSA
188 Key type constants.
189
190 exception Error
191 Generic exception used in the crypto module.
192
193 dump_certificate(type, cert)
194 Dump the certificate cert into a buffer string encoded with the
195 type type.
196
197 dump_certificate_request(type, req)
198 Dump the certificate request req into a buffer string encoded
199 with the type type.
200
201 dump_privatekey(type, pkey[, cipher, passphrase])
202 Dump the private key pkey into a buffer string encoded with the
203 type type, optionally (if type is FILETYPE_PEM) encrypting it
204 using cipher and passphrase.
205
206 passphrase must be either a string or a callback for providing
207 the pass phrase.
208
209 load_certificate(type, buffer)
210 Load a certificate (X509) from the string buffer encoded with
211 the type type.
212
213 load_certificate_request(type, buffer)
214 Load a certificate request (X509Req) from the string buffer
215 encoded with the type type.
216
217 load_privatekey(type, buffer[, passphrase])
218 Load a private key (PKey) from the string buffer encoded with
219 the type type (must be one of FILETYPE_PEM and FILETYPE_ASN1).
220
221 passphrase must be either a string or a callback for providing
222 the pass phrase.
223
224 load_pkcs7_data(type, buffer)
225 Load pkcs7 data from the string buffer encoded with the type
226 type.
227
228 load_pkcs12(buffer[, passphrase])
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500229 Load pkcs12 data from the string buffer. If the pkcs12 structure
230 is encrypted, a passphrase must be included.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500231
232
233 3.1.1 X509 objects
234
235 X509 objects have the following methods:
236
237 get_issuer()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500238 Return an X509Name object representing the issuer of the
239 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500240
241 get_pubkey()
242 Return a PKey object representing the public key of the
243 certificate.
244
245 get_serial_number()
246 Return the certificate serial number.
247
248 get_subject()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500249 Return an X509Name object representing the subject of the
250 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500251
252 get_version()
253 Return the certificate version.
254
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400255 get_notBefore()
256 Return a string giving the time before which the certificate is
257 not valid. The string is formatted as an ASN1 GENERALIZEDTIME:
258
259 YYYYMMDDhhmmssZ
260 YYYYMMDDhhmmss+hhmm
261 YYYYMMDDhhmmss-hhmm
262
Jean-Paul Calderone24c99262008-03-09 21:48:06 -0400263 If no value exists for this field, None is returned.
264
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400265 get_notAfter()
266 Return a string giving the time after which the certificate is
267 not valid. The string is formatted as an ASN1 GENERALIZEDTIME:
268
269 YYYYMMDDhhmmssZ
270 YYYYMMDDhhmmss+hhmm
271 YYYYMMDDhhmmss-hhmm
272
Jean-Paul Calderone24c99262008-03-09 21:48:06 -0400273 If no value exists for this field, None is returned.
274
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400275 set_notBefore(when)
276 Change the time before which the certificate is not valid. when
277 is a string formatted as an ASN1 GENERALIZEDTIME:
278
279 YYYYMMDDhhmmssZ
280 YYYYMMDDhhmmss+hhmm
281 YYYYMMDDhhmmss-hhmm
282
283 set_notAfter(when)
284 Change the time after which the certificate is not valid. when
285 is a string formatted as an ASN1 GENERALIZEDTIME:
286
287 YYYYMMDDhhmmssZ
288 YYYYMMDDhhmmss+hhmm
289 YYYYMMDDhhmmss-hhmm
290
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500291 gmtime_adj_notBefore(time)
292 Adjust the timestamp (in GMT) when the certificate starts being
293 valid.
294
295 gmtime_adj_notAfter(time)
296 Adjust the timestamp (in GMT) when the certificate stops being
297 valid.
298
299 has_expired()
300 Checks the certificate's time stamp against current time.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500301 Returns true if the certificate has expired and false otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500302
303 set_issuer(issuer)
304 Set the issuer of the certificate to issuer.
305
306 set_pubkey(pkey)
307 Set the public key of the certificate to pkey.
308
309 set_serial_number(serialno)
310 Set the serial number of the certificate to serialno.
311
312 set_subject(subject)
313 Set the subject of the certificate to subject.
314
315 set_version(version)
316 Set the certificate version to version.
317
318 sign(pkey, digest)
319 Sign the certificate, using the key pkey and the message digest
320 algorithm identified by the string digest.
321
322 subject_name_hash()
323 Return the hash of the certificate subject.
324
325 digest(digest_name)
326 Return a digest of the certificate, using the digest_name
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500327 method. digest_name must be a string describing a digest
328 algorithm supported by OpenSSL (by EVP_get_digestbyname,
329 specifically). For example, "md5" or "sha1".
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500330
331 add_extensions(extensions)
332 Add the extensions in the sequence extensions to the
333 certificate.
334
335
336 3.1.2 X509Name objects
337
Jean-Paul Calderone2dd8ff52008-03-24 17:43:58 -0400338 X509Name objects have the following methods:
339
340 hash()
341 Return an integer giving the first four bytes of the MD5 digest
342 of the DER representation of the name.
343
Jean-Paul Calderoned2532d82008-03-25 15:20:39 -0400344 der()
345 Return a string giving the DER representation of the name.
346
Jean-Paul Calderonec54cc182008-03-26 21:11:07 -0400347 get_components()
348 Return a list of two-tuples of strings giving the components of
349 the name.
350
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500351 X509Name objects have the following members:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500352
353 countryName
354 The country of the entity. C may be used as an alias for
355 countryName.
356
357 stateOrProvinceName
358 The state or province of the entity. ST may be used as an alias
359 for stateOrProvinceName·
360
361 localityName
362 The locality of the entity. L may be used as an alias for
363 localityName.
364
365 organizationName
366 The organization name of the entity. O may be used as an alias
367 for organizationName.
368
369 organizationalUnitName
370 The organizational unit of the entity. OU may be used as an
371 alias for organizationalUnitName.
372
373 commonName
374 The common name of the entity. CN may be used as an alias for
375 commonName.
376
377 emailAddress
378 The e-mail address of the entity.
379
380
381 3.1.3 X509Req objects
382
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500383 X509Req objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500384
385 get_pubkey()
386 Return a PKey object representing the public key of the
387 certificate request.
388
389 get_subject()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500390 Return an X509Name object representing the subject of the
391 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500392
393 set_pubkey(pkey)
394 Set the public key of the certificate request to pkey.
395
396 sign(pkey, digest)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500397 Sign the certificate request, using the key pkey and the message
398 digest algorithm identified by the string digest.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500399
400 verify(pkey)
401 Verify a certificate request using the public key pkey.
402
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500403 set_version(version)
404 Set the version (RFC 2459, 4.1.2.1) of the certificate request
405 to version.
406
407 get_version()
408 Get the version (RFC 2459, 4.1.2.1) of the certificate request.
409
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500410
411 3.1.4 X509Store objects
412
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500413 The X509Store object has currently just one method:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500414
415 add_cert(cert)
416 Add the certificate cert to the certificate store.
417
418
419 3.1.5 PKey objects
420
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500421 The PKey object has the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500422
423 bits()
424 Return the number of bits of the key.
425
426 generate_key(type, bits)
427 Generate a public/private key pair of the type type (one of
428 TYPE_RSA and TYPE_DSA) with the size bits.
429
430 type()
431 Return the type of the key.
432
433
434 3.1.6 PKCS7 objects
435
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500436 PKCS7 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500437
438 type_is_signed()
439 FIXME
440
441 type_is_enveloped()
442 FIXME
443
444 type_is_signedAndEnveloped()
445 FIXME
446
447 type_is_data()
448 FIXME
449
450 get_type_name()
451 Get the type name of the PKCS7.
452
453
454 3.1.7 PKCS12 objects
455
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500456 PKCS12 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500457
458 get_certificate()
459 Return certificate portion of the PKCS12 structure.
460
461 get_privatekey()
462 Return private key portion of the PKCS12 structure
463
464 get_ca_certificates()
465 Return CA certificates within the PKCS12 object as a tuple.
466 Returns None if no CA certificates are present.
467
468
469 3.1.8 X509Extension objects
470
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500471 X509Extension objects have several methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500472
473 get_critical()
474 Return the critical field of the extension object.
475
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500476 get_short_name()
477 Return the short type name of the extension object.
478
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500479
480 3.1.9 NetscapeSPKI objects
481
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500482 NetscapeSPKI objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500483
484 b64_encode()
485 Return a base64-encoded string representation of the object.
486
487 get_pubkey()
488 Return the public key of object.
489
490 set_pubkey(key)
491 Set the public key of the object to key.
492
493 sign(key, digest_name)
494 Sign the NetscapeSPKI object using the given key and
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500495 digest_name. digest_name must be a string describing a digest
496 algorithm supported by OpenSSL (by EVP_get_digestbyname,
497 specifically). For example, "md5" or "sha1".
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500498
499 verify(key)
500 Verify the NetscapeSPKI object using the given key.
501
502
5033.2 rand -- An interface to the OpenSSL pseudo random number generator
504
505 This module handles the OpenSSL pseudo random number generator (PRNG)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500506 and declares the following:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500507
508 add(string, entropy)
509 Mix bytes from string into the PRNG state. The entropy argument
510 is (the lower bound of) an estimate of how much randomness is
511 contained in string, measured in bytes. For more information,
512 see e.g. RFC 1750.
513
514 egd(path[, bytes])
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -0400515 Query the Entropy Gathering Daemon^2 on socket path for bytes
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500516 bytes of random data and and uses add to seed the PRNG. The
517 default value of bytes is 255.
518
519 load_file(path[, bytes])
520 Read bytes bytes (or all of it, if bytes is negative) of data
521 from the file path to seed the PRNG. The default value of bytes
522 is -1.
523
524 screen()
525 Add the current contents of the screen to the PRNG state.
526 Availability: Windows.
527
528 seed(string)
529 This is equivalent to calling add with entropy as the length of
530 the string.
531
532 status()
533 Returns true if the PRNG has been seeded with enough data, and
534 false otherwise.
535
536 write_file(path)
537 Write a number of random bytes (currently 1024) to the file
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500538 path. This file can then be used with load_file to seed the PRNG
539 again.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500540
541
5423.3 SSL -- An interface to the SSL-specific parts of OpenSSL
543
544 This module handles things specific to SSL. There are two objects
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500545 defined: Context, Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500546
547 SSLv2_METHOD
548
549 SSLv3_METHOD
550
551 SSLv23_METHOD
552
553 TLSv1_METHOD
554 These constants represent the different SSL methods to use when
555 creating a context object.
556
557 VERIFY_NONE
558
559 VERIFY_PEER
560
561 VERIFY_FAIL_IF_NO_PEER_CERT
562 These constants represent the verification mode used by the
563 Context object's set_verify method.
564
565 FILETYPE_PEM
566
567 FILETYPE_ASN1
568 File type constants used with the use_certificate_file and
569 use_privatekey_file methods of Context objects.
570
571 OP_SINGLE_DH_USE
572
573 OP_EPHEMERAL_RSA
574
575 OP_NO_SSLv2
576
577 OP_NO_SSLv3
578
579 OP_NO_TLSv1
580 Constants used with set_options of Context objects.
581 OP_SINGLE_DH_USE means to always create a new key when using
582 ephemeral Diffie-Hellman. OP_EPHEMERAL_RSA means to always use
583 ephemeral RSA keys when doing RSA operations. OP_NO_SSLv2,
584 OP_NO_SSLv3 and OP_NO_TLSv1 means to disable those specific
585 protocols. This is interesting if you're using e.g.
586 SSLv23_METHOD to get an SSLv2-compatible handshake, but don't
587 want to use SSLv2.
588
589 ContextType
590 A Python type object representing the Context object type.
591
592 Context(method)
593 Factory function that creates a new Context object given an SSL
594 method. The method should be SSLv2_METHOD, SSLv3_METHOD,
595 SSLv23_METHOD or TLSv1_METHOD.
596
597 ConnectionType
598 A Python type object representing the Connection object type.
599
600 Connection(context, socket)
601 Factory fucnction that creates a new Connection object given an
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -0400602 SSL context and a socket ^3 object.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500603
604 exception Error
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500605 This exception is used as a base class for the other SSL-related
606 exceptions, but may also be raised directly.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500607
608 Whenever this exception is raised directly, it has a list of
609 error messages from the OpenSSL error queue, where each item is
610 a tuple (lib, function, reason). Here lib, function and reason
611 are all strings, describing where and what the problem is. See
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500612 err(3) for more information.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500613
614 exception ZeroReturnError
615 This exception matches the error return code
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500616 SSL_ERROR_ZERO_RETURN, and is raised when the SSL Connection has
617 been closed. In SSL 3.0 and TLS 1.0, this only occurs if a
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500618 closure alert has occurred in the protocol, i.e. the connection
619 has been closed cleanly. Note that this does not necessarily
620 mean that the transport layer (e.g. a socket) has been closed.
621
622 It may seem a little strange that this is an exception, but it
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500623 does match an SSL_ERROR code, and is very convenient.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500624
625 exception WantReadError
626 The operation did not complete; the same I/O method should be
627 called again later, with the same arguments. Any I/O method can
628 lead to this since new handshakes can occur at any time.
629
630 exception WantWriteError
631 See WantReadError.
632
633 exception WantX509LookupError
634 The operation did not complete because an application callback
635 has asked to be called again. The I/O method should be called
636 again later, with the same arguments. Note: This won't occur in
637 this version, as there are no such callbacks in this version.
638
639 exception SysCallError
640 The SysCallError occurs when there's an I/O error and OpenSSL's
641 error queue does not contain any information. This can mean two
642 things: An error in the transport protocol, or an end of file
643 that violates the protocol. The parameter to the exception is
644 always a pair (errnum, errstr).
645
646
647 3.3.1 Context objects
648
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500649 Context objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500650
651 check_privatekey()
652 Check if the private key (loaded with use_privatekey[_file])
653 matches the certificate (loaded with use_certificate[_file]).
Jean-Paul Calderonef05fbbe2008-03-06 21:52:35 -0500654 Returns None if they match, raises Error otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500655
656 get_app_data()
657 Retrieve application data as set by set_app_data.
658
659 get_cert_store()
660 Retrieve the certificate store (a X509Store object) that the
661 context uses. This can be used to add "trusted" certificates
662 without using the. load_verify_locations() method.
663
664 get_timeout()
665 Retrieve session timeout, as set by set_timeout. The default is
666 300 seconds.
667
668 get_verify_depth()
669 Retrieve the Context object's verify depth, as set by
670 set_verify_depth.
671
672 get_verify_mode()
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500673 Retrieve the Context object's verify mode, as set by set_verify.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500674
675 load_client_ca(pemfile)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500676 Read a file with PEM-formatted certificates that will be sent to
677 the client when requesting a client certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500678
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500679 load_verify_locations(pemfile, capath)
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500680 Specify where CA certificates for verification purposes are
681 located. These are trusted certificates. Note that the
Jean-Paul Calderone6c1d4f92009-03-07 09:10:30 -0500682 certificates have to be in PEM format. If capath is passed, it
683 must be a directory prepared using the c_rehash tool included
684 with OpenSSL. Either, but not both, of pemfile or capath may be
685 None.
686
687 set_default_verify_paths()
688 Specify that the platform provided CA certificates are to be
689 used for verification purposes. This method may not work
690 properly on OS X.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500691
692 load_tmp_dh(dhfile)
693 Load parameters for Ephemeral Diffie-Hellman from dhfile.
694
695 set_app_data(data)
696 Associate data with this Context object. data can be retrieved
697 later using the get_app_data method.
698
699 set_cipher_list(ciphers)
700 Set the list of ciphers to be used in this context. See the
701 OpenSSL manual for more information (e.g. ciphers(1))
702
703 set_info_callback(callback)
704 Set the information callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500705 called from time to time during SSL handshakes. callback should
706 take three arguments: a Connection object and two integers. The
707 first integer specifies where in the SSL handshake the function
708 was called, and the other the return code from a (possibly
709 failed) internal function call.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500710
711 set_options(options)
712 Add SSL options. Options you have set before are not cleared!
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500713 This method should be used with the OP_* constants.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500714
715 set_passwd_cb(callback[, userdata])
716 Set the passphrase callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500717 called when a private key with a passphrase is loaded. callback
Jean-Paul Calderone1eeb29e2008-10-19 11:50:53 -0400718 must accept three positional arguments. First, an integer giving
719 the maximum length of the passphrase it may return. If the
720 returned passphrase is longer than this, it will be truncated.
721 Second, a boolean value which will be true if the user should be
722 prompted for the passphrase twice and the callback should verify
723 that the two values supplied are equal. Third, the value given
724 as the userdata parameter to set_passwd_cb. If an error occurs,
725 callback should return a false value (e.g. an empty string).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500726
727 set_session_id(name)
728 Set the context name within which a session can be reused for
729 this Context object. This is needed when doing session
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500730 resumption, because there is no way for a stored session to know
731 which Context object it is associated with. name may be any
732 binary data.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500733
734 set_timeout(timeout)
735 Set the timeout for newly created sessions for this Context
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500736 object to timeout. timeout must be given in (whole) seconds. The
737 default value is 300 seconds. See the OpenSSL manual for more
738 information (e.g. SSL_CTX_set_timeout(3)).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500739
740 set_verify(mode, callback)
741 Set the verification flags for this Context object to mode and
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500742 specify that callback should be used for verification callbacks.
743 mode should be one of VERIFY_NONE and VERIFY_PEER. If
744 VERIFY_PEER is used, mode can be OR:ed with
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500745 VERIFY_FAIL_IF_NO_PEER_CERT and VERIFY_CLIENT_ONCE to further
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500746 control the behaviour. callback should take five arguments: A
747 Connection object, an X509 object, and three integer variables,
748 which are in turn potential error number, error depth and return
749 code. callback should return true if verification passes and
750 false otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500751
752 set_verify_depth(depth)
753 Set the maximum depth for the certificate chain verification
754 that shall be allowed for this Context object.
755
756 use_certificate(cert)
757 Use the certificate cert which has to be a X509 object.
758
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500759 add_extra_chain_cert(cert)
760 Adds the certificate cert, which has to be a X509 object, to the
761 certificate chain presented together with the certificate.
762
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500763 use_certificate_chain_file(file)
764 Load a certificate chain from file which must be PEM encoded.
765
766 use_privatekey(pkey)
767 Use the private key pkey which has to be a PKey object.
768
769 use_certificate_file(file[, format])
770 Load the first certificate found in file. The certificate must
771 be in the format specified by format, which is either
772 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
773
774 use_privatekey_file(file[, format])
775 Load the first private key found in file. The private key must
776 be in the format specified by format, which is either
777 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
778
779
780 3.3.2 Connection objects
781
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500782 Connection objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500783
784 accept()
785 Call the accept method of the underlying socket and set up SSL
786 on the returned socket, using the Context object supplied to
787 this Connection object at creation. Returns a pair (conn,
788 address). where conn is the new Connection object created, and
789 address is as returned by the socket's accept.
790
791 bind(address)
792 Call the bind method of the underlying socket.
793
794 close()
795 Call the close method of the underlying socket. Note: If you
796 want correct SSL closure, you need to call the shutdown method
797 first.
798
799 connect(address)
800 Call the connect method of the underlying socket and set up SSL
801 on the socket, using the Context object supplied to this
802 Connection object at creation.
803
804 connect_ex(address)
805 Call the connect_ex method of the underlying socket and set up
806 SSL on the socket, using the Context object supplied to this
807 Connection object at creation. Note that if the connect_ex
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500808 method of the socket doesn't return 0, SSL won't be initialized.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500809
810 do_handshake()
811 Perform an SSL handshake (usually called after renegotiate or
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500812 one of set_accept_state or set_accept_state). This can raise the
813 same exceptions as send and recv.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500814
815 fileno()
816 Retrieve the file descriptor number for the underlying socket.
817
818 listen(backlog)
819 Call the listen method of the underlying socket.
820
821 get_app_data()
822 Retrieve application data as set by set_app_data.
823
824 get_cipher_list()
825 Retrieve the list of ciphers used by the Connection object.
826 WARNING: This API has changed. It used to take an optional
827 parameter and just return a string, but not it returns the
828 entire list in one go.
829
830 get_context()
831 Retrieve the Context object associated with this Connection.
832
833 get_peer_certificate()
834 Retrieve the other side's certificate (if any)
835
836 getpeername()
837 Call the getpeername method of the underlying socket.
838
839 getsockname()
840 Call the getsockname method of the underlying socket.
841
842 getsockopt(level, optname[, buflen])
843 Call the getsockopt method of the underlying socket.
844
845 pending()
846 Retrieve the number of bytes that can be safely read from the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500847 SSL buffer (not the underlying transport buffer).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500848
849 recv(bufsize)
850 Receive data from the Connection. The return value is a string
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500851 representing the data received. The maximum amount of data to be
852 received at once, is specified by bufsize.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500853
854 renegotiate()
855 Renegotiate the SSL session. Call this if you wish to change
856 cipher suites or anything like that.
857
858 send(string)
859 Send the string data to the Connection.
860
861 sendall(string)
862 Send all of the string data to the Connection. This calls send
863 repeatedly until all data is sent. If an error occurs, it's
864 impossible to tell how much data has been sent.
865
866 set_accept_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500867 Set the connection to work in server mode. The handshake will be
868 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500869
870 set_app_data(data)
871 Associate data with this Connection object. data can be
872 retrieved later using the get_app_data method.
873
874 set_connect_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500875 Set the connection to work in client mode. The handshake will be
876 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500877
878 setblocking(flag)
879 Call the setblocking method of the underlying socket.
880
881 setsockopt(level, optname, value)
882 Call the setsockopt method of the underlying socket.
883
884 shutdown()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500885 Send the shutdown message to the Connection. Returns true if the
886 shutdown message exchange is completed and false otherwise (in
887 which case you call recv() or send() when the connection becomes
888 readable/writeable.
889
890 get_shutdown()
891 Get the shutdown state of the Connection. Returns a bitvector of
892 either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
893
894 set_shutdown(state)
895 Set the shutdown state of the Connection. state is a bitvector
896 of either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500897
898 sock_shutdown(how)
899 Call the shutdown method of the underlying socket.
900
901 state_string()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500902 Retrieve a verbose string detailing the state of the Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500903
904 want_read()
905 Checks if more data has to be read from the transport layer to
906 complete an operation.
907
908 want_write()
909 Checks if there is data to write to the transport layer to
910 complete an operation.
911
912
913 4 Internals
914
915 We ran into three main problems developing this: Exceptions, callbacks
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500916 and accessing socket methods. This is what this chapter is about.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500917
918
9194.1 Exceptions
920
921 We realized early that most of the exceptions would be raised by the
922 I/O functions of OpenSSL, so it felt natural to mimic OpenSSL's error
923 code system, translating them into Python exceptions. This naturally
924 gives us the exceptions SSL.ZeroReturnError, SSL.WantReadError,
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500925 SSL.WantWriteError, SSL.WantX509LookupError and SSL.SysCallError.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500926
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500927 For more information about this, see section 3.3.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500928
929
9304.2 Callbacks
931
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500932 There are a number of problems with callbacks. First of all, OpenSSL is
933 written as a C library, it's not meant to have Python callbacks, so a
934 way around that is needed. Another problem is thread support. A lot of
935 the OpenSSL I/O functions can block if the socket is in blocking mode,
936 and then you want other Python threads to be able to do other things.
Jean-Paul Calderone657d3ec2008-09-21 18:59:46 -0400937 The real trouble is if you've released the global CPython interpreter
938 lock to do a potentially blocking operation, and the operation calls a
939 callback. Then we must take the GIL back, since calling Python APIs
940 without holding it is not allowed.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500941
942 There are two solutions to the first problem, both of which are
943 necessary. The first solution to use is if the C callback allows
944 ''userdata'' to be passed to it (an arbitrary pointer normally). This
945 is great! We can set our Python function object as the real userdata
946 and emulate userdata for the Python function in another way. The other
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500947 solution can be used if an object with an ''app_data'' system always is
948 passed to the callback. For example, the SSL object in OpenSSL has
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500949 app_data functions and in e.g. the verification callbacks, you can
950 retrieve the related SSL object. What we do is to set our wrapper
951 Connection object as app_data for the SSL object, and we can easily
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500952 find the Python callback.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500953
Jean-Paul Calderone657d3ec2008-09-21 18:59:46 -0400954 The other problem is solved using thread local variables. Whenever the
955 GIL is released before calling into an OpenSSL API, the PyThreadState
956 pointer returned by PyEval_SaveState is stored in a global thread local
957 variable (using Python's own TLS API, PyThread_set_key_value). When it
958 is necessary to re-acquire the GIL, either after the OpenSSL API
959 returns or in a C callback invoked by that OpenSSL API, the value of
960 the thread local variable is retrieved (PyThread_get_key_value) and
961 used to re-acquire the GIL. This allows Python threads to execute while
962 OpenSSL APIs are running and allows use of any particular pyOpenSSL
963 object from any Python thread, since there is no per-thread state
964 associated with any of these objects and since OpenSSL is threadsafe
965 (as long as properly initialized, as pyOpenSSL initializes it).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500966
967
9684.3 Acessing Socket Methods
969
970 We quickly saw the benefit of wrapping socket methods in the
971 SSL.Connection class, for an easy transition into using SSL. The
972 problem here is that the socket module lacks a C API, and all the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500973 methods are declared static. One approach would be to have OpenSSL as a
974 submodule to the socket module, placing all the code in socketmodule.c,
975 but this is obviously not a good solution, since you might not want to
976 import tonnes of extra stuff you're not going to use when importing the
977 socket module. The other approach is to somehow get a pointer to the
978 method to be called, either the C function, or a callable Python
979 object. This is not really a good solution either, since there's a lot
980 of lookups involved.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500981
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500982 The way it works is that you have to supply a ``socket-like'' transport
983 object to the SSL.Connection. The only requirement of this object is
984 that it has a fileno() method that returns a file descriptor that's
985 valid at the C level (i.e. you can use the system calls read and
986 write). If you want to use the connect() or accept() methods of the
987 SSL.Connection object, the transport object has to supply such methods
988 too. Apart from them, any method lookups in the SSL.Connection object
989 that fail are passed on to the underlying transport object.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500990
991 Future changes might be to allow Python-level transport objects, that
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500992 instead of having fileno() methods, have read() and write() methods, so
993 more advanced features of Python can be used. This would probably
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500994 entail some sort of OpenSSL ``BIOs'', but converting Python strings
995 back and forth is expensive, so this shouldn't be used unless
996 necessary. Other nice things would be to be able to pass in different
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500997 transport objects for reading and writing, but then the fileno() method
998 of SSL.Connection becomes virtually useless. Also, should the method
999 resolution be used on the read-transport or the write-transport?
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001000
1001 About this document ...
1002
1003 Python OpenSSL Manual
1004
1005 This document was generated using the LaTeX2HTML translator.
1006
1007 LaTeX2HTML is Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos,
1008 Computer Based Learning Unit, University of Leeds, and Copyright ©
1009 1997, 1998, Ross Moore, Mathematics Department, Macquarie University,
1010 Sydney.
1011
1012 The application of LaTeX2HTML to the Python documentation has been
1013 heavily tailored by Fred L. Drake, Jr. Original navigation icons were
1014 contributed by Christopher Petrilli.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001015 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001016
1017 Footnotes
1018
1019 ... M2Crypto^1
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -04001020 See http://chandlerproject.org/Projects/MeTooCrypto
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001021
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -04001022 ... Daemon^2
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001023 See http://www.lothar.com/tech/crypto/
1024
Jean-Paul Calderonef1b839d2008-09-01 12:06:06 -04001025 ... socket^3
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001026 Actually, all that is required is an object that behaves like a
1027 socket, you could even use files, even though it'd be tricky to
1028 get the handshakes right!
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001029 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001030
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001031 Python OpenSSL Manual
1032 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001033
Jean-Paul Calderonef7f0fb42008-10-19 11:55:13 -04001034 Release 0.8.