blob: 8a7a403bf5102b76f07dbfe72b0bd818059d3d5e [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 Calderonec54cc182008-03-26 21:11:07 -0400348 get_components()
349 Return a list of two-tuples of strings giving the components of
350 the name.
351
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500352 X509Name objects have the following members:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500353
354 countryName
355 The country of the entity. C may be used as an alias for
356 countryName.
357
358 stateOrProvinceName
359 The state or province of the entity. ST may be used as an alias
360 for stateOrProvinceName·
361
362 localityName
363 The locality of the entity. L may be used as an alias for
364 localityName.
365
366 organizationName
367 The organization name of the entity. O may be used as an alias
368 for organizationName.
369
370 organizationalUnitName
371 The organizational unit of the entity. OU may be used as an
372 alias for organizationalUnitName.
373
374 commonName
375 The common name of the entity. CN may be used as an alias for
376 commonName.
377
378 emailAddress
379 The e-mail address of the entity.
380
381
382 3.1.3 X509Req objects
383
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500384 X509Req objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500385
386 get_pubkey()
387 Return a PKey object representing the public key of the
388 certificate request.
389
390 get_subject()
Jean-Paul Calderone2aa2b332008-03-06 21:43:14 -0500391 Return an X509Name object representing the subject of the
392 certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500393
394 set_pubkey(pkey)
395 Set the public key of the certificate request to pkey.
396
397 sign(pkey, digest)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500398 Sign the certificate request, using the key pkey and the message
399 digest algorithm identified by the string digest.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500400
401 verify(pkey)
402 Verify a certificate request using the public key pkey.
403
404
405 3.1.4 X509Store objects
406
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500407 The X509Store object has currently just one method:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500408
409 add_cert(cert)
410 Add the certificate cert to the certificate store.
411
412
413 3.1.5 PKey objects
414
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500415 The PKey object has the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500416
417 bits()
418 Return the number of bits of the key.
419
420 generate_key(type, bits)
421 Generate a public/private key pair of the type type (one of
422 TYPE_RSA and TYPE_DSA) with the size bits.
423
424 type()
425 Return the type of the key.
426
427
428 3.1.6 PKCS7 objects
429
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500430 PKCS7 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500431
432 type_is_signed()
433 FIXME
434
435 type_is_enveloped()
436 FIXME
437
438 type_is_signedAndEnveloped()
439 FIXME
440
441 type_is_data()
442 FIXME
443
444 get_type_name()
445 Get the type name of the PKCS7.
446
447
448 3.1.7 PKCS12 objects
449
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500450 PKCS12 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500451
452 get_certificate()
453 Return certificate portion of the PKCS12 structure.
454
455 get_privatekey()
456 Return private key portion of the PKCS12 structure
457
458 get_ca_certificates()
459 Return CA certificates within the PKCS12 object as a tuple.
460 Returns None if no CA certificates are present.
461
462
463 3.1.8 X509Extension objects
464
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500465 X509Extension objects currently only have one method:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500466
467 get_critical()
468 Return the critical field of the extension object.
469
470
471 3.1.9 NetscapeSPKI objects
472
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500473 NetscapeSPKI objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500474
475 b64_encode()
476 Return a base64-encoded string representation of the object.
477
478 get_pubkey()
479 Return the public key of object.
480
481 set_pubkey(key)
482 Set the public key of the object to key.
483
484 sign(key, digest_name)
485 Sign the NetscapeSPKI object using the given key and
486 digest_name.
487
488 verify(key)
489 Verify the NetscapeSPKI object using the given key.
490
491
4923.2 rand -- An interface to the OpenSSL pseudo random number generator
493
494 This module handles the OpenSSL pseudo random number generator (PRNG)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500495 and declares the following:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500496
497 add(string, entropy)
498 Mix bytes from string into the PRNG state. The entropy argument
499 is (the lower bound of) an estimate of how much randomness is
500 contained in string, measured in bytes. For more information,
501 see e.g. RFC 1750.
502
503 egd(path[, bytes])
504 Query the Entropy Gathering Daemon^3 on socket path for bytes
505 bytes of random data and and uses add to seed the PRNG. The
506 default value of bytes is 255.
507
508 load_file(path[, bytes])
509 Read bytes bytes (or all of it, if bytes is negative) of data
510 from the file path to seed the PRNG. The default value of bytes
511 is -1.
512
513 screen()
514 Add the current contents of the screen to the PRNG state.
515 Availability: Windows.
516
517 seed(string)
518 This is equivalent to calling add with entropy as the length of
519 the string.
520
521 status()
522 Returns true if the PRNG has been seeded with enough data, and
523 false otherwise.
524
525 write_file(path)
526 Write a number of random bytes (currently 1024) to the file
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500527 path. This file can then be used with load_file to seed the PRNG
528 again.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500529
530
5313.3 SSL -- An interface to the SSL-specific parts of OpenSSL
532
533 This module handles things specific to SSL. There are two objects
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500534 defined: Context, Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500535
536 SSLv2_METHOD
537
538 SSLv3_METHOD
539
540 SSLv23_METHOD
541
542 TLSv1_METHOD
543 These constants represent the different SSL methods to use when
544 creating a context object.
545
546 VERIFY_NONE
547
548 VERIFY_PEER
549
550 VERIFY_FAIL_IF_NO_PEER_CERT
551 These constants represent the verification mode used by the
552 Context object's set_verify method.
553
554 FILETYPE_PEM
555
556 FILETYPE_ASN1
557 File type constants used with the use_certificate_file and
558 use_privatekey_file methods of Context objects.
559
560 OP_SINGLE_DH_USE
561
562 OP_EPHEMERAL_RSA
563
564 OP_NO_SSLv2
565
566 OP_NO_SSLv3
567
568 OP_NO_TLSv1
569 Constants used with set_options of Context objects.
570 OP_SINGLE_DH_USE means to always create a new key when using
571 ephemeral Diffie-Hellman. OP_EPHEMERAL_RSA means to always use
572 ephemeral RSA keys when doing RSA operations. OP_NO_SSLv2,
573 OP_NO_SSLv3 and OP_NO_TLSv1 means to disable those specific
574 protocols. This is interesting if you're using e.g.
575 SSLv23_METHOD to get an SSLv2-compatible handshake, but don't
576 want to use SSLv2.
577
578 ContextType
579 A Python type object representing the Context object type.
580
581 Context(method)
582 Factory function that creates a new Context object given an SSL
583 method. The method should be SSLv2_METHOD, SSLv3_METHOD,
584 SSLv23_METHOD or TLSv1_METHOD.
585
586 ConnectionType
587 A Python type object representing the Connection object type.
588
589 Connection(context, socket)
590 Factory fucnction that creates a new Connection object given an
591 SSL context and a socket ^4 object.
592
593 exception Error
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500594 This exception is used as a base class for the other SSL-related
595 exceptions, but may also be raised directly.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500596
597 Whenever this exception is raised directly, it has a list of
598 error messages from the OpenSSL error queue, where each item is
599 a tuple (lib, function, reason). Here lib, function and reason
600 are all strings, describing where and what the problem is. See
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500601 err(3) for more information.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500602
603 exception ZeroReturnError
604 This exception matches the error return code
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500605 SSL_ERROR_ZERO_RETURN, and is raised when the SSL Connection has
606 been closed. In SSL 3.0 and TLS 1.0, this only occurs if a
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500607 closure alert has occurred in the protocol, i.e. the connection
608 has been closed cleanly. Note that this does not necessarily
609 mean that the transport layer (e.g. a socket) has been closed.
610
611 It may seem a little strange that this is an exception, but it
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500612 does match an SSL_ERROR code, and is very convenient.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500613
614 exception WantReadError
615 The operation did not complete; the same I/O method should be
616 called again later, with the same arguments. Any I/O method can
617 lead to this since new handshakes can occur at any time.
618
619 exception WantWriteError
620 See WantReadError.
621
622 exception WantX509LookupError
623 The operation did not complete because an application callback
624 has asked to be called again. The I/O method should be called
625 again later, with the same arguments. Note: This won't occur in
626 this version, as there are no such callbacks in this version.
627
628 exception SysCallError
629 The SysCallError occurs when there's an I/O error and OpenSSL's
630 error queue does not contain any information. This can mean two
631 things: An error in the transport protocol, or an end of file
632 that violates the protocol. The parameter to the exception is
633 always a pair (errnum, errstr).
634
635
636 3.3.1 Context objects
637
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500638 Context objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500639
640 check_privatekey()
641 Check if the private key (loaded with use_privatekey[_file])
642 matches the certificate (loaded with use_certificate[_file]).
Jean-Paul Calderonef05fbbe2008-03-06 21:52:35 -0500643 Returns None if they match, raises Error otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500644
645 get_app_data()
646 Retrieve application data as set by set_app_data.
647
648 get_cert_store()
649 Retrieve the certificate store (a X509Store object) that the
650 context uses. This can be used to add "trusted" certificates
651 without using the. load_verify_locations() method.
652
653 get_timeout()
654 Retrieve session timeout, as set by set_timeout. The default is
655 300 seconds.
656
657 get_verify_depth()
658 Retrieve the Context object's verify depth, as set by
659 set_verify_depth.
660
661 get_verify_mode()
662 Retrieve the Context object's verify mode, as set by
663 set_verify_mode.
664
665 load_client_ca(pemfile)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500666 Read a file with PEM-formatted certificates that will be sent to
667 the client when requesting a client certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500668
669 load_verify_locations(pemfile)
670 Specify where CA certificates for verification purposes are
671 located. These are trusted certificates. Note that the
672 certificates have to be in PEM format.
673
674 load_tmp_dh(dhfile)
675 Load parameters for Ephemeral Diffie-Hellman from dhfile.
676
677 set_app_data(data)
678 Associate data with this Context object. data can be retrieved
679 later using the get_app_data method.
680
681 set_cipher_list(ciphers)
682 Set the list of ciphers to be used in this context. See the
683 OpenSSL manual for more information (e.g. ciphers(1))
684
685 set_info_callback(callback)
686 Set the information callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500687 called from time to time during SSL handshakes. callback should
688 take three arguments: a Connection object and two integers. The
689 first integer specifies where in the SSL handshake the function
690 was called, and the other the return code from a (possibly
691 failed) internal function call.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500692
693 set_options(options)
694 Add SSL options. Options you have set before are not cleared!
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500695 This method should be used with the OP_* constants.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500696
697 set_passwd_cb(callback[, userdata])
698 Set the passphrase callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500699 called when a private key with a passphrase is loaded. callback
700 should take a boolean argument repeat and an arbitrary argument
701 data and return the passphrase entered by the user. If repeat is
702 true then callback should ask for the passphrase twice and make
703 sure that the two entries are equal. The data argument is the
704 userdata variable passed to the set_passwd_cb method. If an
705 error occurs, callback should return a false value (e.g. an
706 empty string).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500707
708 set_session_id(name)
709 Set the context name within which a session can be reused for
710 this Context object. This is needed when doing session
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500711 resumption, because there is no way for a stored session to know
712 which Context object it is associated with. name may be any
713 binary data.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500714
715 set_timeout(timeout)
716 Set the timeout for newly created sessions for this Context
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500717 object to timeout. timeout must be given in (whole) seconds. The
718 default value is 300 seconds. See the OpenSSL manual for more
719 information (e.g. SSL_CTX_set_timeout(3)).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500720
721 set_verify(mode, callback)
722 Set the verification flags for this Context object to mode and
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500723 specify that callback should be used for verification callbacks.
724 mode should be one of VERIFY_NONE and VERIFY_PEER. If
725 VERIFY_PEER is used, mode can be OR:ed with
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500726 VERIFY_FAIL_IF_NO_PEER_CERT and VERIFY_CLIENT_ONCE to further
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500727 control the behaviour. callback should take five arguments: A
728 Connection object, an X509 object, and three integer variables,
729 which are in turn potential error number, error depth and return
730 code. callback should return true if verification passes and
731 false otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500732
733 set_verify_depth(depth)
734 Set the maximum depth for the certificate chain verification
735 that shall be allowed for this Context object.
736
737 use_certificate(cert)
738 Use the certificate cert which has to be a X509 object.
739
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500740 add_extra_chain_cert(cert)
741 Adds the certificate cert, which has to be a X509 object, to the
742 certificate chain presented together with the certificate.
743
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500744 use_certificate_chain_file(file)
745 Load a certificate chain from file which must be PEM encoded.
746
747 use_privatekey(pkey)
748 Use the private key pkey which has to be a PKey object.
749
750 use_certificate_file(file[, format])
751 Load the first certificate found in file. The certificate must
752 be in the format specified by format, which is either
753 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
754
755 use_privatekey_file(file[, format])
756 Load the first private key found in file. The private key must
757 be in the format specified by format, which is either
758 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
759
760
761 3.3.2 Connection objects
762
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500763 Connection objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500764
765 accept()
766 Call the accept method of the underlying socket and set up SSL
767 on the returned socket, using the Context object supplied to
768 this Connection object at creation. Returns a pair (conn,
769 address). where conn is the new Connection object created, and
770 address is as returned by the socket's accept.
771
772 bind(address)
773 Call the bind method of the underlying socket.
774
775 close()
776 Call the close method of the underlying socket. Note: If you
777 want correct SSL closure, you need to call the shutdown method
778 first.
779
780 connect(address)
781 Call the connect method of the underlying socket and set up SSL
782 on the socket, using the Context object supplied to this
783 Connection object at creation.
784
785 connect_ex(address)
786 Call the connect_ex method of the underlying socket and set up
787 SSL on the socket, using the Context object supplied to this
788 Connection object at creation. Note that if the connect_ex
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500789 method of the socket doesn't return 0, SSL won't be initialized.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500790
791 do_handshake()
792 Perform an SSL handshake (usually called after renegotiate or
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500793 one of set_accept_state or set_accept_state). This can raise the
794 same exceptions as send and recv.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500795
796 fileno()
797 Retrieve the file descriptor number for the underlying socket.
798
799 listen(backlog)
800 Call the listen method of the underlying socket.
801
802 get_app_data()
803 Retrieve application data as set by set_app_data.
804
805 get_cipher_list()
806 Retrieve the list of ciphers used by the Connection object.
807 WARNING: This API has changed. It used to take an optional
808 parameter and just return a string, but not it returns the
809 entire list in one go.
810
811 get_context()
812 Retrieve the Context object associated with this Connection.
813
814 get_peer_certificate()
815 Retrieve the other side's certificate (if any)
816
817 getpeername()
818 Call the getpeername method of the underlying socket.
819
820 getsockname()
821 Call the getsockname method of the underlying socket.
822
823 getsockopt(level, optname[, buflen])
824 Call the getsockopt method of the underlying socket.
825
826 pending()
827 Retrieve the number of bytes that can be safely read from the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500828 SSL buffer (not the underlying transport buffer).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500829
830 recv(bufsize)
831 Receive data from the Connection. The return value is a string
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500832 representing the data received. The maximum amount of data to be
833 received at once, is specified by bufsize.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500834
835 renegotiate()
836 Renegotiate the SSL session. Call this if you wish to change
837 cipher suites or anything like that.
838
839 send(string)
840 Send the string data to the Connection.
841
842 sendall(string)
843 Send all of the string data to the Connection. This calls send
844 repeatedly until all data is sent. If an error occurs, it's
845 impossible to tell how much data has been sent.
846
847 set_accept_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500848 Set the connection to work in server mode. The handshake will be
849 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500850
851 set_app_data(data)
852 Associate data with this Connection object. data can be
853 retrieved later using the get_app_data method.
854
855 set_connect_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500856 Set the connection to work in client mode. The handshake will be
857 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500858
859 setblocking(flag)
860 Call the setblocking method of the underlying socket.
861
862 setsockopt(level, optname, value)
863 Call the setsockopt method of the underlying socket.
864
865 shutdown()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500866 Send the shutdown message to the Connection. Returns true if the
867 shutdown message exchange is completed and false otherwise (in
868 which case you call recv() or send() when the connection becomes
869 readable/writeable.
870
871 get_shutdown()
872 Get the shutdown state of the Connection. Returns a bitvector of
873 either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
874
875 set_shutdown(state)
876 Set the shutdown state of the Connection. state is a bitvector
877 of either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500878
879 sock_shutdown(how)
880 Call the shutdown method of the underlying socket.
881
882 state_string()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500883 Retrieve a verbose string detailing the state of the Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500884
885 want_read()
886 Checks if more data has to be read from the transport layer to
887 complete an operation.
888
889 want_write()
890 Checks if there is data to write to the transport layer to
891 complete an operation.
892
893
894 4 Internals
895
896 We ran into three main problems developing this: Exceptions, callbacks
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500897 and accessing socket methods. This is what this chapter is about.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500898
899
9004.1 Exceptions
901
902 We realized early that most of the exceptions would be raised by the
903 I/O functions of OpenSSL, so it felt natural to mimic OpenSSL's error
904 code system, translating them into Python exceptions. This naturally
905 gives us the exceptions SSL.ZeroReturnError, SSL.WantReadError,
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500906 SSL.WantWriteError, SSL.WantX509LookupError and SSL.SysCallError.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500907
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500908 For more information about this, see section 3.3.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500909
910
9114.2 Callbacks
912
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500913 There are a number of problems with callbacks. First of all, OpenSSL is
914 written as a C library, it's not meant to have Python callbacks, so a
915 way around that is needed. Another problem is thread support. A lot of
916 the OpenSSL I/O functions can block if the socket is in blocking mode,
917 and then you want other Python threads to be able to do other things.
918 The real trouble is if you've released the thread lock to do a
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500919 potentially blocking operation, and the operation calls a callback.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500920 Then we must take the thread lock back^5.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500921
922 There are two solutions to the first problem, both of which are
923 necessary. The first solution to use is if the C callback allows
924 ''userdata'' to be passed to it (an arbitrary pointer normally). This
925 is great! We can set our Python function object as the real userdata
926 and emulate userdata for the Python function in another way. The other
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500927 solution can be used if an object with an ''app_data'' system always is
928 passed to the callback. For example, the SSL object in OpenSSL has
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500929 app_data functions and in e.g. the verification callbacks, you can
930 retrieve the related SSL object. What we do is to set our wrapper
931 Connection object as app_data for the SSL object, and we can easily
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500932 find the Python callback.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500933
934 The other problem is also partially solved by app_data. Since we're
935 associating our wrapper objects with the ''real'' objects, we can
936 easily access data from the Connection object. The solution then is to
937 simply include a PyThreadState variable in the Connection declaration,
938 and write macros similar to Py_BEGIN_ALLOW_THREADS and
939 Py_END_ALLOW_THREADS that allows specifying of the PyThreadState
940 variable to use. Now we can simply ''begin allow threads'' before a
941 potentially blocking operation, and ''end allow threads'' before
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500942 calling a callback.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500943
944
9454.3 Acessing Socket Methods
946
947 We quickly saw the benefit of wrapping socket methods in the
948 SSL.Connection class, for an easy transition into using SSL. The
949 problem here is that the socket module lacks a C API, and all the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500950 methods are declared static. One approach would be to have OpenSSL as a
951 submodule to the socket module, placing all the code in socketmodule.c,
952 but this is obviously not a good solution, since you might not want to
953 import tonnes of extra stuff you're not going to use when importing the
954 socket module. The other approach is to somehow get a pointer to the
955 method to be called, either the C function, or a callable Python
956 object. This is not really a good solution either, since there's a lot
957 of lookups involved.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500958
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500959 The way it works is that you have to supply a ``socket-like'' transport
960 object to the SSL.Connection. The only requirement of this object is
961 that it has a fileno() method that returns a file descriptor that's
962 valid at the C level (i.e. you can use the system calls read and
963 write). If you want to use the connect() or accept() methods of the
964 SSL.Connection object, the transport object has to supply such methods
965 too. Apart from them, any method lookups in the SSL.Connection object
966 that fail are passed on to the underlying transport object.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500967
968 Future changes might be to allow Python-level transport objects, that
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500969 instead of having fileno() methods, have read() and write() methods, so
970 more advanced features of Python can be used. This would probably
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500971 entail some sort of OpenSSL ``BIOs'', but converting Python strings
972 back and forth is expensive, so this shouldn't be used unless
973 necessary. Other nice things would be to be able to pass in different
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500974 transport objects for reading and writing, but then the fileno() method
975 of SSL.Connection becomes virtually useless. Also, should the method
976 resolution be used on the read-transport or the write-transport?
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500977
978 About this document ...
979
980 Python OpenSSL Manual
981
982 This document was generated using the LaTeX2HTML translator.
983
984 LaTeX2HTML is Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos,
985 Computer Based Learning Unit, University of Leeds, and Copyright ©
986 1997, 1998, Ross Moore, Mathematics Department, Macquarie University,
987 Sydney.
988
989 The application of LaTeX2HTML to the Python documentation has been
990 heavily tailored by Fred L. Drake, Jr. Original navigation icons were
991 contributed by Christopher Petrilli.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500992 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500993
994 Footnotes
995
996 ... M2Crypto^1
997 See http://www.post1.com/home/ngps/m2/
998
999 ... SWIG^2
1000 See http://swig.sourceforge.net/
1001
1002 ... Daemon^3
1003 See http://www.lothar.com/tech/crypto/
1004
1005 ... socket^4
1006 Actually, all that is required is an object that behaves like a
1007 socket, you could even use files, even though it'd be tricky to
1008 get the handshakes right!
1009
1010 ... back^5
1011 I'm not sure why this is necessary, but otherwise I get a
1012 segmentation violation on PyEval_CallObject
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001013 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001014
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -05001015 Python OpenSSL Manual
1016 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -05001017
Jean-Paul Calderoned2532d82008-03-25 15:20:39 -04001018 Release 0.7a2.