blob: a66774ef920347d41bfa1a4e464b2734db4cffe7 [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
36 The reason this module exists at all is that the SSL support in the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050037 socket module in the Python 2.1 distribution (which is what we used, of
38 course I cannot speak for later versions) is severely limited.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050039
40 When asking about SSL on the comp.lang.python newsgroup (or on
41 python-list@python.org) people usually pointed you to the M2Crypto
42 package. The M2Crypto.SSL module does implement a lot of OpenSSL's
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050043 functionality but unfortunately its error handling system does not seem
44 to be finished, especially for non-blocking I/O. I think that much of
45 the reason for this is that M2Crypto^1 is developed using SWIG^2. This
46 makes it awkward to create functions that e.g. can return both an
47 integer and NULL since (as far as I know) you basically write C
48 functions and SWIG makes wrapper functions that parses the Python
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050049 argument list and calls your C function, and finally transforms your
50 return value to a Python object.
51
52
53 2 Building and Installing
54
55 These instructions can also be found in the file INSTALL.
56
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050057 I have tested this on Debian Linux systems (woody and sid), Solaris 2.6
58 and 2.7. Others have successfully compiled it on Windows and NT.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050059
60
612.1 Building the Module on a Unix System
62
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050063 pyOpenSSL uses distutils, so there really shouldn't be any problems. To
64 build the library:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050065
66python setup.py build
67
68 If your OpenSSL header files aren't in /usr/include, you may need to
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050069 supply the -I flag to let the setup script know where to look. The same
70 goes for the libraries of course, use the -L flag. Note that build
71 won't accept these flags, so you have to run first build_ext and then
72 build! Example:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050073
74python setup.py build_ext -I/usr/local/ssl/include -L/usr/local/ssl/lib
75python setup.py build
76
77 Now you should have a directory called OpenSSL that contains e.g.
78 SSL.so and __init__.py somewhere in the build dicrectory, so just:
79
80python setup.py install
81
82 If you, for some arcane reason, don't want the module to appear in the
83 site-packages directory, use the --prefix option.
84
85 You can, of course, do
86
87python setup.py --help
88
89 to find out more about how to use the script.
90
91
922.2 Building the Module on a Windows System
93
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -050094 Big thanks to Itamar Shtull-Trauring and Oleg Orlov for their help with
95 Windows build instructions. Same as for Unix systems, we have to
Jean-Paul Calderone897bc252008-02-18 20:50:23 -050096 separate the build_ext and the build.
97
98 Building the library:
99
100setup.py build_ext -I ...\openssl\inc32 -L ...\openssl\out32dll
101setup.py build
102
103 Where ...\openssl is of course the location of your OpenSSL
104 installation.
105
106 Installation is the same as for Unix systems:
107
108setup.py install
109
110 And similarily, you can do
111
112setup.py --help
113
114 to get more information.
115
116
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500117 3 OpenSSL -- Python interface to OpenSSL
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500118
119 This package provides a high-level interface to the functions in the
120 OpenSSL library. The following modules are defined:
121
122 crypto
123 Generic cryptographic module. Note that if anything is
124 incomplete, this module is!
125
126 rand
127 An interface to the OpenSSL pseudo random number generator.
128
129 SSL
130 An interface to the SSL-specific parts of OpenSSL.
131
132
1333.1 crypto -- Generic cryptographic module
134
135 X509Type
136 A Python type object representing the X509 object type.
137
138 X509()
139 Factory function that creates an X509 object.
140
141 X509NameType
142 A Python type object representing the X509Name object type.
143
144 X509Name(x509name)
145 Factory function that creates a copy of x509name.
146
147 X509ReqType
148 A Python type object representing the X509Req object type.
149
150 X509Req()
151 Factory function that creates an X509Req object.
152
153 X509StoreType
154 A Python type object representing the X509Store object type.
155
156 PKeyType
157 A Python type object representing the PKey object type.
158
159 PKey()
160 Factory function that creates a PKey object.
161
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 Calderoneb6f57be2008-03-06 21:22:16 -0500169 A Python type object representing the X509Extension object type.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500170
171 X509Extension(typename, critical, value)
172 Factory function that creates a X509Extension object.
173
174 NetscapeSPKIType
175 A Python type object representing the NetscapeSPKI object type.
176
177 NetscapeSPKI([enc])
178 Factory function that creates a NetscapeSPKI object. If the enc
179 argument is present, it should be a base64-encoded string
180 representing a NetscapeSPKI object, as returned by the
181 b64_encode method.
182
183 FILETYPE_PEM
184
185 FILETYPE_ASN1
186 File type constants.
187
188 TYPE_RSA
189
190 TYPE_DSA
191 Key type constants.
192
193 exception Error
194 Generic exception used in the crypto module.
195
196 dump_certificate(type, cert)
197 Dump the certificate cert into a buffer string encoded with the
198 type type.
199
200 dump_certificate_request(type, req)
201 Dump the certificate request req into a buffer string encoded
202 with the type type.
203
204 dump_privatekey(type, pkey[, cipher, passphrase])
205 Dump the private key pkey into a buffer string encoded with the
206 type type, optionally (if type is FILETYPE_PEM) encrypting it
207 using cipher and passphrase.
208
209 passphrase must be either a string or a callback for providing
210 the pass phrase.
211
212 load_certificate(type, buffer)
213 Load a certificate (X509) from the string buffer encoded with
214 the type type.
215
216 load_certificate_request(type, buffer)
217 Load a certificate request (X509Req) from the string buffer
218 encoded with the type type.
219
220 load_privatekey(type, buffer[, passphrase])
221 Load a private key (PKey) from the string buffer encoded with
222 the type type (must be one of FILETYPE_PEM and FILETYPE_ASN1).
223
224 passphrase must be either a string or a callback for providing
225 the pass phrase.
226
227 load_pkcs7_data(type, buffer)
228 Load pkcs7 data from the string buffer encoded with the type
229 type.
230
231 load_pkcs12(buffer[, passphrase])
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500232 Load pkcs12 data from the string buffer. If the pkcs12 structure
233 is encrypted, a passphrase must be included.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500234
235
236 3.1.1 X509 objects
237
238 X509 objects have the following methods:
239
240 get_issuer()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500241 Return an X509Name object representing the issuer of the
242 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500243
244 get_pubkey()
245 Return a PKey object representing the public key of the
246 certificate.
247
248 get_serial_number()
249 Return the certificate serial number.
250
251 get_subject()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500252 Return an X509Name object representing the subject of the
253 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500254
255 get_version()
256 Return the certificate version.
257
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400258 get_notBefore()
259 Return a string giving the time before which the certificate is
260 not valid. The string is formatted as an ASN1 GENERALIZEDTIME:
261
262 YYYYMMDDhhmmssZ
263 YYYYMMDDhhmmss+hhmm
264 YYYYMMDDhhmmss-hhmm
265
Jean-Paul Calderone24c99262008-03-09 21:48:06 -0400266 If no value exists for this field, None is returned.
267
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400268 get_notAfter()
269 Return a string giving the time after which the certificate is
270 not valid. The string is formatted as an ASN1 GENERALIZEDTIME:
271
272 YYYYMMDDhhmmssZ
273 YYYYMMDDhhmmss+hhmm
274 YYYYMMDDhhmmss-hhmm
275
Jean-Paul Calderone24c99262008-03-09 21:48:06 -0400276 If no value exists for this field, None is returned.
277
Jean-Paul Calderone525ef802008-03-09 20:39:42 -0400278 set_notBefore(when)
279 Change the time before which the certificate is not valid. when
280 is a string formatted as an ASN1 GENERALIZEDTIME:
281
282 YYYYMMDDhhmmssZ
283 YYYYMMDDhhmmss+hhmm
284 YYYYMMDDhhmmss-hhmm
285
286 set_notAfter(when)
287 Change the time after which the certificate is not valid. when
288 is a string formatted as an ASN1 GENERALIZEDTIME:
289
290 YYYYMMDDhhmmssZ
291 YYYYMMDDhhmmss+hhmm
292 YYYYMMDDhhmmss-hhmm
293
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500294 gmtime_adj_notBefore(time)
295 Adjust the timestamp (in GMT) when the certificate starts being
296 valid.
297
298 gmtime_adj_notAfter(time)
299 Adjust the timestamp (in GMT) when the certificate stops being
300 valid.
301
302 has_expired()
303 Checks the certificate's time stamp against current time.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500304 Returns true if the certificate has expired and false otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500305
306 set_issuer(issuer)
307 Set the issuer of the certificate to issuer.
308
309 set_pubkey(pkey)
310 Set the public key of the certificate to pkey.
311
312 set_serial_number(serialno)
313 Set the serial number of the certificate to serialno.
314
315 set_subject(subject)
316 Set the subject of the certificate to subject.
317
318 set_version(version)
319 Set the certificate version to version.
320
321 sign(pkey, digest)
322 Sign the certificate, using the key pkey and the message digest
323 algorithm identified by the string digest.
324
325 subject_name_hash()
326 Return the hash of the certificate subject.
327
328 digest(digest_name)
329 Return a digest of the certificate, using the digest_name
330 method.
331
332 add_extensions(extensions)
333 Add the extensions in the sequence extensions to the
334 certificate.
335
336
337 3.1.2 X509Name objects
338
Jean-Paul Calderone2dd8ff52008-03-24 17:43:58 -0400339 X509Name objects have the following methods:
340
341 hash()
342 Return an integer giving the first four bytes of the MD5 digest
343 of the DER representation of the name.
344
Jean-Paul Calderoned2532d82008-03-25 15:20:39 -0400345 der()
346 Return a string giving the DER representation of the name.
347
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500348 X509Name objects have the following members:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500349
350 countryName
351 The country of the entity. C may be used as an alias for
352 countryName.
353
354 stateOrProvinceName
355 The state or province of the entity. ST may be used as an alias
356 for stateOrProvinceName·
357
358 localityName
359 The locality of the entity. L may be used as an alias for
360 localityName.
361
362 organizationName
363 The organization name of the entity. O may be used as an alias
364 for organizationName.
365
366 organizationalUnitName
367 The organizational unit of the entity. OU may be used as an
368 alias for organizationalUnitName.
369
370 commonName
371 The common name of the entity. CN may be used as an alias for
372 commonName.
373
374 emailAddress
375 The e-mail address of the entity.
376
377
378 3.1.3 X509Req objects
379
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500380 X509Req objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500381
382 get_pubkey()
383 Return a PKey object representing the public key of the
384 certificate request.
385
386 get_subject()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500387 Return an X509Name object representing the subject of the
388 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500389
390 set_pubkey(pkey)
391 Set the public key of the certificate request to pkey.
392
393 sign(pkey, digest)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500394 Sign the certificate request, using the key pkey and the message
395 digest algorithm identified by the string digest.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500396
397 verify(pkey)
398 Verify a certificate request using the public key pkey.
399
400
401 3.1.4 X509Store objects
402
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500403 The X509Store object has currently just one method:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500404
405 add_cert(cert)
406 Add the certificate cert to the certificate store.
407
408
409 3.1.5 PKey objects
410
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500411 The PKey object has the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500412
413 bits()
414 Return the number of bits of the key.
415
416 generate_key(type, bits)
417 Generate a public/private key pair of the type type (one of
418 TYPE_RSA and TYPE_DSA) with the size bits.
419
420 type()
421 Return the type of the key.
422
423
424 3.1.6 PKCS7 objects
425
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500426 PKCS7 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500427
428 type_is_signed()
429 FIXME
430
431 type_is_enveloped()
432 FIXME
433
434 type_is_signedAndEnveloped()
435 FIXME
436
437 type_is_data()
438 FIXME
439
440 get_type_name()
441 Get the type name of the PKCS7.
442
443
444 3.1.7 PKCS12 objects
445
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500446 PKCS12 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500447
448 get_certificate()
449 Return certificate portion of the PKCS12 structure.
450
451 get_privatekey()
452 Return private key portion of the PKCS12 structure
453
454 get_ca_certificates()
455 Return CA certificates within the PKCS12 object as a tuple.
456 Returns None if no CA certificates are present.
457
458
459 3.1.8 X509Extension objects
460
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500461 X509Extension objects currently only have one method:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500462
463 get_critical()
464 Return the critical field of the extension object.
465
466
467 3.1.9 NetscapeSPKI objects
468
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500469 NetscapeSPKI objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500470
471 b64_encode()
472 Return a base64-encoded string representation of the object.
473
474 get_pubkey()
475 Return the public key of object.
476
477 set_pubkey(key)
478 Set the public key of the object to key.
479
480 sign(key, digest_name)
481 Sign the NetscapeSPKI object using the given key and
482 digest_name.
483
484 verify(key)
485 Verify the NetscapeSPKI object using the given key.
486
487
4883.2 rand -- An interface to the OpenSSL pseudo random number generator
489
490 This module handles the OpenSSL pseudo random number generator (PRNG)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500491 and declares the following:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500492
493 add(string, entropy)
494 Mix bytes from string into the PRNG state. The entropy argument
495 is (the lower bound of) an estimate of how much randomness is
496 contained in string, measured in bytes. For more information,
497 see e.g. RFC 1750.
498
499 egd(path[, bytes])
500 Query the Entropy Gathering Daemon^3 on socket path for bytes
501 bytes of random data and and uses add to seed the PRNG. The
502 default value of bytes is 255.
503
504 load_file(path[, bytes])
505 Read bytes bytes (or all of it, if bytes is negative) of data
506 from the file path to seed the PRNG. The default value of bytes
507 is -1.
508
509 screen()
510 Add the current contents of the screen to the PRNG state.
511 Availability: Windows.
512
513 seed(string)
514 This is equivalent to calling add with entropy as the length of
515 the string.
516
517 status()
518 Returns true if the PRNG has been seeded with enough data, and
519 false otherwise.
520
521 write_file(path)
522 Write a number of random bytes (currently 1024) to the file
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500523 path. This file can then be used with load_file to seed the PRNG
524 again.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500525
526
5273.3 SSL -- An interface to the SSL-specific parts of OpenSSL
528
529 This module handles things specific to SSL. There are two objects
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500530 defined: Context, Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500531
532 SSLv2_METHOD
533
534 SSLv3_METHOD
535
536 SSLv23_METHOD
537
538 TLSv1_METHOD
539 These constants represent the different SSL methods to use when
540 creating a context object.
541
542 VERIFY_NONE
543
544 VERIFY_PEER
545
546 VERIFY_FAIL_IF_NO_PEER_CERT
547 These constants represent the verification mode used by the
548 Context object's set_verify method.
549
550 FILETYPE_PEM
551
552 FILETYPE_ASN1
553 File type constants used with the use_certificate_file and
554 use_privatekey_file methods of Context objects.
555
556 OP_SINGLE_DH_USE
557
558 OP_EPHEMERAL_RSA
559
560 OP_NO_SSLv2
561
562 OP_NO_SSLv3
563
564 OP_NO_TLSv1
565 Constants used with set_options of Context objects.
566 OP_SINGLE_DH_USE means to always create a new key when using
567 ephemeral Diffie-Hellman. OP_EPHEMERAL_RSA means to always use
568 ephemeral RSA keys when doing RSA operations. OP_NO_SSLv2,
569 OP_NO_SSLv3 and OP_NO_TLSv1 means to disable those specific
570 protocols. This is interesting if you're using e.g.
571 SSLv23_METHOD to get an SSLv2-compatible handshake, but don't
572 want to use SSLv2.
573
574 ContextType
575 A Python type object representing the Context object type.
576
577 Context(method)
578 Factory function that creates a new Context object given an SSL
579 method. The method should be SSLv2_METHOD, SSLv3_METHOD,
580 SSLv23_METHOD or TLSv1_METHOD.
581
582 ConnectionType
583 A Python type object representing the Connection object type.
584
585 Connection(context, socket)
586 Factory fucnction that creates a new Connection object given an
587 SSL context and a socket ^4 object.
588
589 exception Error
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500590 This exception is used as a base class for the other SSL-related
591 exceptions, but may also be raised directly.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500592
593 Whenever this exception is raised directly, it has a list of
594 error messages from the OpenSSL error queue, where each item is
595 a tuple (lib, function, reason). Here lib, function and reason
596 are all strings, describing where and what the problem is. See
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500597 err(3) for more information.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500598
599 exception ZeroReturnError
600 This exception matches the error return code
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500601 SSL_ERROR_ZERO_RETURN, and is raised when the SSL Connection has
602 been closed. In SSL 3.0 and TLS 1.0, this only occurs if a
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500603 closure alert has occurred in the protocol, i.e. the connection
604 has been closed cleanly. Note that this does not necessarily
605 mean that the transport layer (e.g. a socket) has been closed.
606
607 It may seem a little strange that this is an exception, but it
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500608 does match an SSL_ERROR code, and is very convenient.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500609
610 exception WantReadError
611 The operation did not complete; the same I/O method should be
612 called again later, with the same arguments. Any I/O method can
613 lead to this since new handshakes can occur at any time.
614
615 exception WantWriteError
616 See WantReadError.
617
618 exception WantX509LookupError
619 The operation did not complete because an application callback
620 has asked to be called again. The I/O method should be called
621 again later, with the same arguments. Note: This won't occur in
622 this version, as there are no such callbacks in this version.
623
624 exception SysCallError
625 The SysCallError occurs when there's an I/O error and OpenSSL's
626 error queue does not contain any information. This can mean two
627 things: An error in the transport protocol, or an end of file
628 that violates the protocol. The parameter to the exception is
629 always a pair (errnum, errstr).
630
631
632 3.3.1 Context objects
633
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500634 Context objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500635
636 check_privatekey()
637 Check if the private key (loaded with use_privatekey[_file])
638 matches the certificate (loaded with use_certificate[_file]).
Jean-Paul Calderonef05fbbe2008-03-06 21:52:35 -0500639 Returns None if they match, raises Error otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500640
641 get_app_data()
642 Retrieve application data as set by set_app_data.
643
644 get_cert_store()
645 Retrieve the certificate store (a X509Store object) that the
646 context uses. This can be used to add "trusted" certificates
647 without using the. load_verify_locations() method.
648
649 get_timeout()
650 Retrieve session timeout, as set by set_timeout. The default is
651 300 seconds.
652
653 get_verify_depth()
654 Retrieve the Context object's verify depth, as set by
655 set_verify_depth.
656
657 get_verify_mode()
658 Retrieve the Context object's verify mode, as set by
659 set_verify_mode.
660
661 load_client_ca(pemfile)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500662 Read a file with PEM-formatted certificates that will be sent to
663 the client when requesting a client certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500664
665 load_verify_locations(pemfile)
666 Specify where CA certificates for verification purposes are
667 located. These are trusted certificates. Note that the
668 certificates have to be in PEM format.
669
670 load_tmp_dh(dhfile)
671 Load parameters for Ephemeral Diffie-Hellman from dhfile.
672
673 set_app_data(data)
674 Associate data with this Context object. data can be retrieved
675 later using the get_app_data method.
676
677 set_cipher_list(ciphers)
678 Set the list of ciphers to be used in this context. See the
679 OpenSSL manual for more information (e.g. ciphers(1))
680
681 set_info_callback(callback)
682 Set the information callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500683 called from time to time during SSL handshakes. callback should
684 take three arguments: a Connection object and two integers. The
685 first integer specifies where in the SSL handshake the function
686 was called, and the other the return code from a (possibly
687 failed) internal function call.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500688
689 set_options(options)
690 Add SSL options. Options you have set before are not cleared!
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500691 This method should be used with the OP_* constants.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500692
693 set_passwd_cb(callback[, userdata])
694 Set the passphrase callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500695 called when a private key with a passphrase is loaded. callback
696 should take a boolean argument repeat and an arbitrary argument
697 data and return the passphrase entered by the user. If repeat is
698 true then callback should ask for the passphrase twice and make
699 sure that the two entries are equal. The data argument is the
700 userdata variable passed to the set_passwd_cb method. If an
701 error occurs, callback should return a false value (e.g. an
702 empty string).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500703
704 set_session_id(name)
705 Set the context name within which a session can be reused for
706 this Context object. This is needed when doing session
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500707 resumption, because there is no way for a stored session to know
708 which Context object it is associated with. name may be any
709 binary data.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500710
711 set_timeout(timeout)
712 Set the timeout for newly created sessions for this Context
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500713 object to timeout. timeout must be given in (whole) seconds. The
714 default value is 300 seconds. See the OpenSSL manual for more
715 information (e.g. SSL_CTX_set_timeout(3)).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500716
717 set_verify(mode, callback)
718 Set the verification flags for this Context object to mode and
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500719 specify that callback should be used for verification callbacks.
720 mode should be one of VERIFY_NONE and VERIFY_PEER. If
721 VERIFY_PEER is used, mode can be OR:ed with
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500722 VERIFY_FAIL_IF_NO_PEER_CERT and VERIFY_CLIENT_ONCE to further
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500723 control the behaviour. callback should take five arguments: A
724 Connection object, an X509 object, and three integer variables,
725 which are in turn potential error number, error depth and return
726 code. callback should return true if verification passes and
727 false otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500728
729 set_verify_depth(depth)
730 Set the maximum depth for the certificate chain verification
731 that shall be allowed for this Context object.
732
733 use_certificate(cert)
734 Use the certificate cert which has to be a X509 object.
735
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500736 add_extra_chain_cert(cert)
737 Adds the certificate cert, which has to be a X509 object, to the
738 certificate chain presented together with the certificate.
739
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500740 use_certificate_chain_file(file)
741 Load a certificate chain from file which must be PEM encoded.
742
743 use_privatekey(pkey)
744 Use the private key pkey which has to be a PKey object.
745
746 use_certificate_file(file[, format])
747 Load the first certificate found in file. The certificate must
748 be in the format specified by format, which is either
749 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
750
751 use_privatekey_file(file[, format])
752 Load the first private key found in file. The private key must
753 be in the format specified by format, which is either
754 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
755
756
757 3.3.2 Connection objects
758
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500759 Connection objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500760
761 accept()
762 Call the accept method of the underlying socket and set up SSL
763 on the returned socket, using the Context object supplied to
764 this Connection object at creation. Returns a pair (conn,
765 address). where conn is the new Connection object created, and
766 address is as returned by the socket's accept.
767
768 bind(address)
769 Call the bind method of the underlying socket.
770
771 close()
772 Call the close method of the underlying socket. Note: If you
773 want correct SSL closure, you need to call the shutdown method
774 first.
775
776 connect(address)
777 Call the connect method of the underlying socket and set up SSL
778 on the socket, using the Context object supplied to this
779 Connection object at creation.
780
781 connect_ex(address)
782 Call the connect_ex method of the underlying socket and set up
783 SSL on the socket, using the Context object supplied to this
784 Connection object at creation. Note that if the connect_ex
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500785 method of the socket doesn't return 0, SSL won't be initialized.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500786
787 do_handshake()
788 Perform an SSL handshake (usually called after renegotiate or
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500789 one of set_accept_state or set_accept_state). This can raise the
790 same exceptions as send and recv.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500791
792 fileno()
793 Retrieve the file descriptor number for the underlying socket.
794
795 listen(backlog)
796 Call the listen method of the underlying socket.
797
798 get_app_data()
799 Retrieve application data as set by set_app_data.
800
801 get_cipher_list()
802 Retrieve the list of ciphers used by the Connection object.
803 WARNING: This API has changed. It used to take an optional
804 parameter and just return a string, but not it returns the
805 entire list in one go.
806
807 get_context()
808 Retrieve the Context object associated with this Connection.
809
810 get_peer_certificate()
811 Retrieve the other side's certificate (if any)
812
813 getpeername()
814 Call the getpeername method of the underlying socket.
815
816 getsockname()
817 Call the getsockname method of the underlying socket.
818
819 getsockopt(level, optname[, buflen])
820 Call the getsockopt method of the underlying socket.
821
822 pending()
823 Retrieve the number of bytes that can be safely read from the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500824 SSL buffer (not the underlying transport buffer).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500825
826 recv(bufsize)
827 Receive data from the Connection. The return value is a string
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500828 representing the data received. The maximum amount of data to be
829 received at once, is specified by bufsize.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500830
831 renegotiate()
832 Renegotiate the SSL session. Call this if you wish to change
833 cipher suites or anything like that.
834
835 send(string)
836 Send the string data to the Connection.
837
838 sendall(string)
839 Send all of the string data to the Connection. This calls send
840 repeatedly until all data is sent. If an error occurs, it's
841 impossible to tell how much data has been sent.
842
843 set_accept_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500844 Set the connection to work in server mode. The handshake will be
845 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500846
847 set_app_data(data)
848 Associate data with this Connection object. data can be
849 retrieved later using the get_app_data method.
850
851 set_connect_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500852 Set the connection to work in client mode. The handshake will be
853 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500854
855 setblocking(flag)
856 Call the setblocking method of the underlying socket.
857
858 setsockopt(level, optname, value)
859 Call the setsockopt method of the underlying socket.
860
861 shutdown()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500862 Send the shutdown message to the Connection. Returns true if the
863 shutdown message exchange is completed and false otherwise (in
864 which case you call recv() or send() when the connection becomes
865 readable/writeable.
866
867 get_shutdown()
868 Get the shutdown state of the Connection. Returns a bitvector of
869 either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
870
871 set_shutdown(state)
872 Set the shutdown state of the Connection. state is a bitvector
873 of either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500874
875 sock_shutdown(how)
876 Call the shutdown method of the underlying socket.
877
878 state_string()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500879 Retrieve a verbose string detailing the state of the Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500880
881 want_read()
882 Checks if more data has to be read from the transport layer to
883 complete an operation.
884
885 want_write()
886 Checks if there is data to write to the transport layer to
887 complete an operation.
888
889
890 4 Internals
891
892 We ran into three main problems developing this: Exceptions, callbacks
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500893 and accessing socket methods. This is what this chapter is about.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500894
895
8964.1 Exceptions
897
898 We realized early that most of the exceptions would be raised by the
899 I/O functions of OpenSSL, so it felt natural to mimic OpenSSL's error
900 code system, translating them into Python exceptions. This naturally
901 gives us the exceptions SSL.ZeroReturnError, SSL.WantReadError,
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500902 SSL.WantWriteError, SSL.WantX509LookupError and SSL.SysCallError.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500903
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500904 For more information about this, see section 3.3.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500905
906
9074.2 Callbacks
908
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500909 There are a number of problems with callbacks. First of all, OpenSSL is
910 written as a C library, it's not meant to have Python callbacks, so a
911 way around that is needed. Another problem is thread support. A lot of
912 the OpenSSL I/O functions can block if the socket is in blocking mode,
913 and then you want other Python threads to be able to do other things.
914 The real trouble is if you've released the thread lock to do a
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500915 potentially blocking operation, and the operation calls a callback.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500916 Then we must take the thread lock back^5.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500917
918 There are two solutions to the first problem, both of which are
919 necessary. The first solution to use is if the C callback allows
920 ''userdata'' to be passed to it (an arbitrary pointer normally). This
921 is great! We can set our Python function object as the real userdata
922 and emulate userdata for the Python function in another way. The other
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500923 solution can be used if an object with an ''app_data'' system always is
924 passed to the callback. For example, the SSL object in OpenSSL has
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500925 app_data functions and in e.g. the verification callbacks, you can
926 retrieve the related SSL object. What we do is to set our wrapper
927 Connection object as app_data for the SSL object, and we can easily
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500928 find the Python callback.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500929
930 The other problem is also partially solved by app_data. Since we're
931 associating our wrapper objects with the ''real'' objects, we can
932 easily access data from the Connection object. The solution then is to
933 simply include a PyThreadState variable in the Connection declaration,
934 and write macros similar to Py_BEGIN_ALLOW_THREADS and
935 Py_END_ALLOW_THREADS that allows specifying of the PyThreadState
936 variable to use. Now we can simply ''begin allow threads'' before a
937 potentially blocking operation, and ''end allow threads'' before
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500938 calling a callback.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500939
940
9414.3 Acessing Socket Methods
942
943 We quickly saw the benefit of wrapping socket methods in the
944 SSL.Connection class, for an easy transition into using SSL. The
945 problem here is that the socket module lacks a C API, and all the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500946 methods are declared static. One approach would be to have OpenSSL as a
947 submodule to the socket module, placing all the code in socketmodule.c,
948 but this is obviously not a good solution, since you might not want to
949 import tonnes of extra stuff you're not going to use when importing the
950 socket module. The other approach is to somehow get a pointer to the
951 method to be called, either the C function, or a callable Python
952 object. This is not really a good solution either, since there's a lot
953 of lookups involved.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500954
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500955 The way it works is that you have to supply a ``socket-like'' transport
956 object to the SSL.Connection. The only requirement of this object is
957 that it has a fileno() method that returns a file descriptor that's
958 valid at the C level (i.e. you can use the system calls read and
959 write). If you want to use the connect() or accept() methods of the
960 SSL.Connection object, the transport object has to supply such methods
961 too. Apart from them, any method lookups in the SSL.Connection object
962 that fail are passed on to the underlying transport object.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500963
964 Future changes might be to allow Python-level transport objects, that
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500965 instead of having fileno() methods, have read() and write() methods, so
966 more advanced features of Python can be used. This would probably
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500967 entail some sort of OpenSSL ``BIOs'', but converting Python strings
968 back and forth is expensive, so this shouldn't be used unless
969 necessary. Other nice things would be to be able to pass in different
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500970 transport objects for reading and writing, but then the fileno() method
971 of SSL.Connection becomes virtually useless. Also, should the method
972 resolution be used on the read-transport or the write-transport?
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500973
974 About this document ...
975
976 Python OpenSSL Manual
977
978 This document was generated using the LaTeX2HTML translator.
979
980 LaTeX2HTML is Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos,
981 Computer Based Learning Unit, University of Leeds, and Copyright ©
982 1997, 1998, Ross Moore, Mathematics Department, Macquarie University,
983 Sydney.
984
985 The application of LaTeX2HTML to the Python documentation has been
986 heavily tailored by Fred L. Drake, Jr. Original navigation icons were
987 contributed by Christopher Petrilli.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500988 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500989
990 Footnotes
991
992 ... M2Crypto^1
993 See http://www.post1.com/home/ngps/m2/
994
995 ... SWIG^2
996 See http://swig.sourceforge.net/
997
998 ... Daemon^3
999 See http://www.lothar.com/tech/crypto/
1000
1001 ... socket^4
1002 Actually, all that is required is an object that behaves like a
1003 socket, you could even use files, even though it'd be tricky to
1004 get the handshakes right!
1005
1006 ... back^5
1007 I'm not sure why this is necessary, but otherwise I get a
1008 segmentation violation on PyEval_CallObject
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001009 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001010
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001011 Python OpenSSL Manual
1012 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001013
Jean-Paul Calderoned2532d82008-03-25 15:20:39 -04001014 Release 0.7a2.