blob: 15016829c5186c6207c63707fc83899549cf4a8c [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()
241 Return a borrowed reference to a X509Name object representing
242 the issuer of the certificate. When the corresponding X509 or
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500243 X509Req object is destroyed, this object will be invalid!
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500244
245 get_pubkey()
246 Return a PKey object representing the public key of the
247 certificate.
248
249 get_serial_number()
250 Return the certificate serial number.
251
252 get_subject()
253 Return a borrowed reference to a X509Name object representing
254 the subject of the certificate. When the corresponding X509 or
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500255 X509Req object is destroyed, this object will be invalid!
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500256
257 get_version()
258 Return the certificate version.
259
260 gmtime_adj_notBefore(time)
261 Adjust the timestamp (in GMT) when the certificate starts being
262 valid.
263
264 gmtime_adj_notAfter(time)
265 Adjust the timestamp (in GMT) when the certificate stops being
266 valid.
267
268 has_expired()
269 Checks the certificate's time stamp against current time.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500270 Returns true if the certificate has expired and false otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500271
272 set_issuer(issuer)
273 Set the issuer of the certificate to issuer.
274
275 set_pubkey(pkey)
276 Set the public key of the certificate to pkey.
277
278 set_serial_number(serialno)
279 Set the serial number of the certificate to serialno.
280
281 set_subject(subject)
282 Set the subject of the certificate to subject.
283
284 set_version(version)
285 Set the certificate version to version.
286
287 sign(pkey, digest)
288 Sign the certificate, using the key pkey and the message digest
289 algorithm identified by the string digest.
290
291 subject_name_hash()
292 Return the hash of the certificate subject.
293
294 digest(digest_name)
295 Return a digest of the certificate, using the digest_name
296 method.
297
298 add_extensions(extensions)
299 Add the extensions in the sequence extensions to the
300 certificate.
301
302
303 3.1.2 X509Name objects
304
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500305 X509Name objects have the following members:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500306
307 countryName
308 The country of the entity. C may be used as an alias for
309 countryName.
310
311 stateOrProvinceName
312 The state or province of the entity. ST may be used as an alias
313 for stateOrProvinceName·
314
315 localityName
316 The locality of the entity. L may be used as an alias for
317 localityName.
318
319 organizationName
320 The organization name of the entity. O may be used as an alias
321 for organizationName.
322
323 organizationalUnitName
324 The organizational unit of the entity. OU may be used as an
325 alias for organizationalUnitName.
326
327 commonName
328 The common name of the entity. CN may be used as an alias for
329 commonName.
330
331 emailAddress
332 The e-mail address of the entity.
333
334
335 3.1.3 X509Req objects
336
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500337 X509Req objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500338
339 get_pubkey()
340 Return a PKey object representing the public key of the
341 certificate request.
342
343 get_subject()
344 Return a borrowed reference to a X509Name object representing
345 the subject of the certificate. When the corresponding X509 or
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500346 X509Req object is destroyed, this object will be invalid!
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500347
348 set_pubkey(pkey)
349 Set the public key of the certificate request to pkey.
350
351 sign(pkey, digest)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500352 Sign the certificate request, using the key pkey and the message
353 digest algorithm identified by the string digest.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500354
355 verify(pkey)
356 Verify a certificate request using the public key pkey.
357
358
359 3.1.4 X509Store objects
360
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500361 The X509Store object has currently just one method:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500362
363 add_cert(cert)
364 Add the certificate cert to the certificate store.
365
366
367 3.1.5 PKey objects
368
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500369 The PKey object has the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500370
371 bits()
372 Return the number of bits of the key.
373
374 generate_key(type, bits)
375 Generate a public/private key pair of the type type (one of
376 TYPE_RSA and TYPE_DSA) with the size bits.
377
378 type()
379 Return the type of the key.
380
381
382 3.1.6 PKCS7 objects
383
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500384 PKCS7 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500385
386 type_is_signed()
387 FIXME
388
389 type_is_enveloped()
390 FIXME
391
392 type_is_signedAndEnveloped()
393 FIXME
394
395 type_is_data()
396 FIXME
397
398 get_type_name()
399 Get the type name of the PKCS7.
400
401
402 3.1.7 PKCS12 objects
403
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500404 PKCS12 objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500405
406 get_certificate()
407 Return certificate portion of the PKCS12 structure.
408
409 get_privatekey()
410 Return private key portion of the PKCS12 structure
411
412 get_ca_certificates()
413 Return CA certificates within the PKCS12 object as a tuple.
414 Returns None if no CA certificates are present.
415
416
417 3.1.8 X509Extension objects
418
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500419 X509Extension objects currently only have one method:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500420
421 get_critical()
422 Return the critical field of the extension object.
423
424
425 3.1.9 NetscapeSPKI objects
426
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500427 NetscapeSPKI objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500428
429 b64_encode()
430 Return a base64-encoded string representation of the object.
431
432 get_pubkey()
433 Return the public key of object.
434
435 set_pubkey(key)
436 Set the public key of the object to key.
437
438 sign(key, digest_name)
439 Sign the NetscapeSPKI object using the given key and
440 digest_name.
441
442 verify(key)
443 Verify the NetscapeSPKI object using the given key.
444
445
4463.2 rand -- An interface to the OpenSSL pseudo random number generator
447
448 This module handles the OpenSSL pseudo random number generator (PRNG)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500449 and declares the following:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500450
451 add(string, entropy)
452 Mix bytes from string into the PRNG state. The entropy argument
453 is (the lower bound of) an estimate of how much randomness is
454 contained in string, measured in bytes. For more information,
455 see e.g. RFC 1750.
456
457 egd(path[, bytes])
458 Query the Entropy Gathering Daemon^3 on socket path for bytes
459 bytes of random data and and uses add to seed the PRNG. The
460 default value of bytes is 255.
461
462 load_file(path[, bytes])
463 Read bytes bytes (or all of it, if bytes is negative) of data
464 from the file path to seed the PRNG. The default value of bytes
465 is -1.
466
467 screen()
468 Add the current contents of the screen to the PRNG state.
469 Availability: Windows.
470
471 seed(string)
472 This is equivalent to calling add with entropy as the length of
473 the string.
474
475 status()
476 Returns true if the PRNG has been seeded with enough data, and
477 false otherwise.
478
479 write_file(path)
480 Write a number of random bytes (currently 1024) to the file
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500481 path. This file can then be used with load_file to seed the PRNG
482 again.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500483
484
4853.3 SSL -- An interface to the SSL-specific parts of OpenSSL
486
487 This module handles things specific to SSL. There are two objects
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500488 defined: Context, Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500489
490 SSLv2_METHOD
491
492 SSLv3_METHOD
493
494 SSLv23_METHOD
495
496 TLSv1_METHOD
497 These constants represent the different SSL methods to use when
498 creating a context object.
499
500 VERIFY_NONE
501
502 VERIFY_PEER
503
504 VERIFY_FAIL_IF_NO_PEER_CERT
505 These constants represent the verification mode used by the
506 Context object's set_verify method.
507
508 FILETYPE_PEM
509
510 FILETYPE_ASN1
511 File type constants used with the use_certificate_file and
512 use_privatekey_file methods of Context objects.
513
514 OP_SINGLE_DH_USE
515
516 OP_EPHEMERAL_RSA
517
518 OP_NO_SSLv2
519
520 OP_NO_SSLv3
521
522 OP_NO_TLSv1
523 Constants used with set_options of Context objects.
524 OP_SINGLE_DH_USE means to always create a new key when using
525 ephemeral Diffie-Hellman. OP_EPHEMERAL_RSA means to always use
526 ephemeral RSA keys when doing RSA operations. OP_NO_SSLv2,
527 OP_NO_SSLv3 and OP_NO_TLSv1 means to disable those specific
528 protocols. This is interesting if you're using e.g.
529 SSLv23_METHOD to get an SSLv2-compatible handshake, but don't
530 want to use SSLv2.
531
532 ContextType
533 A Python type object representing the Context object type.
534
535 Context(method)
536 Factory function that creates a new Context object given an SSL
537 method. The method should be SSLv2_METHOD, SSLv3_METHOD,
538 SSLv23_METHOD or TLSv1_METHOD.
539
540 ConnectionType
541 A Python type object representing the Connection object type.
542
543 Connection(context, socket)
544 Factory fucnction that creates a new Connection object given an
545 SSL context and a socket ^4 object.
546
547 exception Error
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500548 This exception is used as a base class for the other SSL-related
549 exceptions, but may also be raised directly.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500550
551 Whenever this exception is raised directly, it has a list of
552 error messages from the OpenSSL error queue, where each item is
553 a tuple (lib, function, reason). Here lib, function and reason
554 are all strings, describing where and what the problem is. See
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500555 err(3) for more information.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500556
557 exception ZeroReturnError
558 This exception matches the error return code
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500559 SSL_ERROR_ZERO_RETURN, and is raised when the SSL Connection has
560 been closed. In SSL 3.0 and TLS 1.0, this only occurs if a
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500561 closure alert has occurred in the protocol, i.e. the connection
562 has been closed cleanly. Note that this does not necessarily
563 mean that the transport layer (e.g. a socket) has been closed.
564
565 It may seem a little strange that this is an exception, but it
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500566 does match an SSL_ERROR code, and is very convenient.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500567
568 exception WantReadError
569 The operation did not complete; the same I/O method should be
570 called again later, with the same arguments. Any I/O method can
571 lead to this since new handshakes can occur at any time.
572
573 exception WantWriteError
574 See WantReadError.
575
576 exception WantX509LookupError
577 The operation did not complete because an application callback
578 has asked to be called again. The I/O method should be called
579 again later, with the same arguments. Note: This won't occur in
580 this version, as there are no such callbacks in this version.
581
582 exception SysCallError
583 The SysCallError occurs when there's an I/O error and OpenSSL's
584 error queue does not contain any information. This can mean two
585 things: An error in the transport protocol, or an end of file
586 that violates the protocol. The parameter to the exception is
587 always a pair (errnum, errstr).
588
589
590 3.3.1 Context objects
591
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500592 Context objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500593
594 check_privatekey()
595 Check if the private key (loaded with use_privatekey[_file])
596 matches the certificate (loaded with use_certificate[_file]).
597 Returns true if they match, false otherwise.
598
599 get_app_data()
600 Retrieve application data as set by set_app_data.
601
602 get_cert_store()
603 Retrieve the certificate store (a X509Store object) that the
604 context uses. This can be used to add "trusted" certificates
605 without using the. load_verify_locations() method.
606
607 get_timeout()
608 Retrieve session timeout, as set by set_timeout. The default is
609 300 seconds.
610
611 get_verify_depth()
612 Retrieve the Context object's verify depth, as set by
613 set_verify_depth.
614
615 get_verify_mode()
616 Retrieve the Context object's verify mode, as set by
617 set_verify_mode.
618
619 load_client_ca(pemfile)
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500620 Read a file with PEM-formatted certificates that will be sent to
621 the client when requesting a client certificate.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500622
623 load_verify_locations(pemfile)
624 Specify where CA certificates for verification purposes are
625 located. These are trusted certificates. Note that the
626 certificates have to be in PEM format.
627
628 load_tmp_dh(dhfile)
629 Load parameters for Ephemeral Diffie-Hellman from dhfile.
630
631 set_app_data(data)
632 Associate data with this Context object. data can be retrieved
633 later using the get_app_data method.
634
635 set_cipher_list(ciphers)
636 Set the list of ciphers to be used in this context. See the
637 OpenSSL manual for more information (e.g. ciphers(1))
638
639 set_info_callback(callback)
640 Set the information callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500641 called from time to time during SSL handshakes. callback should
642 take three arguments: a Connection object and two integers. The
643 first integer specifies where in the SSL handshake the function
644 was called, and the other the return code from a (possibly
645 failed) internal function call.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500646
647 set_options(options)
648 Add SSL options. Options you have set before are not cleared!
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500649 This method should be used with the OP_* constants.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500650
651 set_passwd_cb(callback[, userdata])
652 Set the passphrase callback to callback. This function will be
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500653 called when a private key with a passphrase is loaded. callback
654 should take a boolean argument repeat and an arbitrary argument
655 data and return the passphrase entered by the user. If repeat is
656 true then callback should ask for the passphrase twice and make
657 sure that the two entries are equal. The data argument is the
658 userdata variable passed to the set_passwd_cb method. If an
659 error occurs, callback should return a false value (e.g. an
660 empty string).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500661
662 set_session_id(name)
663 Set the context name within which a session can be reused for
664 this Context object. This is needed when doing session
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500665 resumption, because there is no way for a stored session to know
666 which Context object it is associated with. name may be any
667 binary data.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500668
669 set_timeout(timeout)
670 Set the timeout for newly created sessions for this Context
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500671 object to timeout. timeout must be given in (whole) seconds. The
672 default value is 300 seconds. See the OpenSSL manual for more
673 information (e.g. SSL_CTX_set_timeout(3)).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500674
675 set_verify(mode, callback)
676 Set the verification flags for this Context object to mode and
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500677 specify that callback should be used for verification callbacks.
678 mode should be one of VERIFY_NONE and VERIFY_PEER. If
679 VERIFY_PEER is used, mode can be OR:ed with
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500680 VERIFY_FAIL_IF_NO_PEER_CERT and VERIFY_CLIENT_ONCE to further
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500681 control the behaviour. callback should take five arguments: A
682 Connection object, an X509 object, and three integer variables,
683 which are in turn potential error number, error depth and return
684 code. callback should return true if verification passes and
685 false otherwise.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500686
687 set_verify_depth(depth)
688 Set the maximum depth for the certificate chain verification
689 that shall be allowed for this Context object.
690
691 use_certificate(cert)
692 Use the certificate cert which has to be a X509 object.
693
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500694 add_extra_chain_cert(cert)
695 Adds the certificate cert, which has to be a X509 object, to the
696 certificate chain presented together with the certificate.
697
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500698 use_certificate_chain_file(file)
699 Load a certificate chain from file which must be PEM encoded.
700
701 use_privatekey(pkey)
702 Use the private key pkey which has to be a PKey object.
703
704 use_certificate_file(file[, format])
705 Load the first certificate found in file. The certificate must
706 be in the format specified by format, which is either
707 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
708
709 use_privatekey_file(file[, format])
710 Load the first private key found in file. The private key must
711 be in the format specified by format, which is either
712 FILETYPE_PEM or FILETYPE_ASN1. The default is FILETYPE_PEM.
713
714
715 3.3.2 Connection objects
716
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500717 Connection objects have the following methods:
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500718
719 accept()
720 Call the accept method of the underlying socket and set up SSL
721 on the returned socket, using the Context object supplied to
722 this Connection object at creation. Returns a pair (conn,
723 address). where conn is the new Connection object created, and
724 address is as returned by the socket's accept.
725
726 bind(address)
727 Call the bind method of the underlying socket.
728
729 close()
730 Call the close method of the underlying socket. Note: If you
731 want correct SSL closure, you need to call the shutdown method
732 first.
733
734 connect(address)
735 Call the connect method of the underlying socket and set up SSL
736 on the socket, using the Context object supplied to this
737 Connection object at creation.
738
739 connect_ex(address)
740 Call the connect_ex method of the underlying socket and set up
741 SSL on the socket, using the Context object supplied to this
742 Connection object at creation. Note that if the connect_ex
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500743 method of the socket doesn't return 0, SSL won't be initialized.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500744
745 do_handshake()
746 Perform an SSL handshake (usually called after renegotiate or
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500747 one of set_accept_state or set_accept_state). This can raise the
748 same exceptions as send and recv.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500749
750 fileno()
751 Retrieve the file descriptor number for the underlying socket.
752
753 listen(backlog)
754 Call the listen method of the underlying socket.
755
756 get_app_data()
757 Retrieve application data as set by set_app_data.
758
759 get_cipher_list()
760 Retrieve the list of ciphers used by the Connection object.
761 WARNING: This API has changed. It used to take an optional
762 parameter and just return a string, but not it returns the
763 entire list in one go.
764
765 get_context()
766 Retrieve the Context object associated with this Connection.
767
768 get_peer_certificate()
769 Retrieve the other side's certificate (if any)
770
771 getpeername()
772 Call the getpeername method of the underlying socket.
773
774 getsockname()
775 Call the getsockname method of the underlying socket.
776
777 getsockopt(level, optname[, buflen])
778 Call the getsockopt method of the underlying socket.
779
780 pending()
781 Retrieve the number of bytes that can be safely read from the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500782 SSL buffer (not the underlying transport buffer).
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500783
784 recv(bufsize)
785 Receive data from the Connection. The return value is a string
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500786 representing the data received. The maximum amount of data to be
787 received at once, is specified by bufsize.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500788
789 renegotiate()
790 Renegotiate the SSL session. Call this if you wish to change
791 cipher suites or anything like that.
792
793 send(string)
794 Send the string data to the Connection.
795
796 sendall(string)
797 Send all of the string data to the Connection. This calls send
798 repeatedly until all data is sent. If an error occurs, it's
799 impossible to tell how much data has been sent.
800
801 set_accept_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500802 Set the connection to work in server mode. The handshake will be
803 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500804
805 set_app_data(data)
806 Associate data with this Connection object. data can be
807 retrieved later using the get_app_data method.
808
809 set_connect_state()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500810 Set the connection to work in client mode. The handshake will be
811 handled automatically by read/write.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500812
813 setblocking(flag)
814 Call the setblocking method of the underlying socket.
815
816 setsockopt(level, optname, value)
817 Call the setsockopt method of the underlying socket.
818
819 shutdown()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500820 Send the shutdown message to the Connection. Returns true if the
821 shutdown message exchange is completed and false otherwise (in
822 which case you call recv() or send() when the connection becomes
823 readable/writeable.
824
825 get_shutdown()
826 Get the shutdown state of the Connection. Returns a bitvector of
827 either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
828
829 set_shutdown(state)
830 Set the shutdown state of the Connection. state is a bitvector
831 of either or both of SENT_SHUTDOWN and RECEIVED_SHUTDOWN.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500832
833 sock_shutdown(how)
834 Call the shutdown method of the underlying socket.
835
836 state_string()
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500837 Retrieve a verbose string detailing the state of the Connection.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500838
839 want_read()
840 Checks if more data has to be read from the transport layer to
841 complete an operation.
842
843 want_write()
844 Checks if there is data to write to the transport layer to
845 complete an operation.
846
847
848 4 Internals
849
850 We ran into three main problems developing this: Exceptions, callbacks
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500851 and accessing socket methods. This is what this chapter is about.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500852
853
8544.1 Exceptions
855
856 We realized early that most of the exceptions would be raised by the
857 I/O functions of OpenSSL, so it felt natural to mimic OpenSSL's error
858 code system, translating them into Python exceptions. This naturally
859 gives us the exceptions SSL.ZeroReturnError, SSL.WantReadError,
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500860 SSL.WantWriteError, SSL.WantX509LookupError and SSL.SysCallError.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500861
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500862 For more information about this, see section 3.3.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500863
864
8654.2 Callbacks
866
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500867 There are a number of problems with callbacks. First of all, OpenSSL is
868 written as a C library, it's not meant to have Python callbacks, so a
869 way around that is needed. Another problem is thread support. A lot of
870 the OpenSSL I/O functions can block if the socket is in blocking mode,
871 and then you want other Python threads to be able to do other things.
872 The real trouble is if you've released the thread lock to do a
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500873 potentially blocking operation, and the operation calls a callback.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500874 Then we must take the thread lock back^5.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500875
876 There are two solutions to the first problem, both of which are
877 necessary. The first solution to use is if the C callback allows
878 ''userdata'' to be passed to it (an arbitrary pointer normally). This
879 is great! We can set our Python function object as the real userdata
880 and emulate userdata for the Python function in another way. The other
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500881 solution can be used if an object with an ''app_data'' system always is
882 passed to the callback. For example, the SSL object in OpenSSL has
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500883 app_data functions and in e.g. the verification callbacks, you can
884 retrieve the related SSL object. What we do is to set our wrapper
885 Connection object as app_data for the SSL object, and we can easily
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500886 find the Python callback.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500887
888 The other problem is also partially solved by app_data. Since we're
889 associating our wrapper objects with the ''real'' objects, we can
890 easily access data from the Connection object. The solution then is to
891 simply include a PyThreadState variable in the Connection declaration,
892 and write macros similar to Py_BEGIN_ALLOW_THREADS and
893 Py_END_ALLOW_THREADS that allows specifying of the PyThreadState
894 variable to use. Now we can simply ''begin allow threads'' before a
895 potentially blocking operation, and ''end allow threads'' before
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500896 calling a callback.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500897
898
8994.3 Acessing Socket Methods
900
901 We quickly saw the benefit of wrapping socket methods in the
902 SSL.Connection class, for an easy transition into using SSL. The
903 problem here is that the socket module lacks a C API, and all the
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500904 methods are declared static. One approach would be to have OpenSSL as a
905 submodule to the socket module, placing all the code in socketmodule.c,
906 but this is obviously not a good solution, since you might not want to
907 import tonnes of extra stuff you're not going to use when importing the
908 socket module. The other approach is to somehow get a pointer to the
909 method to be called, either the C function, or a callable Python
910 object. This is not really a good solution either, since there's a lot
911 of lookups involved.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500912
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500913 The way it works is that you have to supply a ``socket-like'' transport
914 object to the SSL.Connection. The only requirement of this object is
915 that it has a fileno() method that returns a file descriptor that's
916 valid at the C level (i.e. you can use the system calls read and
917 write). If you want to use the connect() or accept() methods of the
918 SSL.Connection object, the transport object has to supply such methods
919 too. Apart from them, any method lookups in the SSL.Connection object
920 that fail are passed on to the underlying transport object.
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500921
922 Future changes might be to allow Python-level transport objects, that
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500923 instead of having fileno() methods, have read() and write() methods, so
924 more advanced features of Python can be used. This would probably
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500925 entail some sort of OpenSSL ``BIOs'', but converting Python strings
926 back and forth is expensive, so this shouldn't be used unless
927 necessary. Other nice things would be to be able to pass in different
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500928 transport objects for reading and writing, but then the fileno() method
929 of SSL.Connection becomes virtually useless. Also, should the method
930 resolution be used on the read-transport or the write-transport?
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500931
932 About this document ...
933
934 Python OpenSSL Manual
935
936 This document was generated using the LaTeX2HTML translator.
937
938 LaTeX2HTML is Copyright © 1993, 1994, 1995, 1996, 1997, Nikos Drakos,
939 Computer Based Learning Unit, University of Leeds, and Copyright ©
940 1997, 1998, Ross Moore, Mathematics Department, Macquarie University,
941 Sydney.
942
943 The application of LaTeX2HTML to the Python documentation has been
944 heavily tailored by Fred L. Drake, Jr. Original navigation icons were
945 contributed by Christopher Petrilli.
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500946 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500947
948 Footnotes
949
950 ... M2Crypto^1
951 See http://www.post1.com/home/ngps/m2/
952
953 ... SWIG^2
954 See http://swig.sourceforge.net/
955
956 ... Daemon^3
957 See http://www.lothar.com/tech/crypto/
958
959 ... socket^4
960 Actually, all that is required is an object that behaves like a
961 socket, you could even use files, even though it'd be tricky to
962 get the handshakes right!
963
964 ... back^5
965 I'm not sure why this is necessary, but otherwise I get a
966 segmentation violation on PyEval_CallObject
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500967 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500968
Jean-Paul Calderoneb6f57be2008-03-06 21:22:16 -0500969 Python OpenSSL Manual
970 __________________________________________________________________
Jean-Paul Calderone897bc252008-02-18 20:50:23 -0500971
972 Release 0.6.