]> git.ipfire.org Git - thirdparty/openssl.git/blame - CHANGES
Reject certificates with unhandled critical extensions.
[thirdparty/openssl.git] / CHANGES
CommitLineData
81a6c781 1
f1c236f8 2 OpenSSL CHANGES
651d0aff
RE
3 _______________
4
a9d2bc49 5 Changes between 0.9.6 and 0.9.7 [xx XXX 2001]
a43cf9fa 6
e9ad0d2c 7 OpenSSL 0.9.6a/0.9.6b (bugfix releases, 5 Apr 2001 and 9 July 2001)
e3fefbfd 8 and OpenSSL 0.9.7 were developed in parallel, based on OpenSSL 0.9.6.
e9ad0d2c 9
a9d2bc49 10 Change log entries are tagged as follows:
daba492c
BM
11 -) applies to 0.9.6a/0.9.6b/0.9.6c only
12 *) applies to 0.9.6a/0.9.6b/0.9.6c and 0.9.7
a9d2bc49
BM
13 +) applies to 0.9.7 only
14
f1558bb4
DSH
15 +) Test for certificates which contain unsupported critical extensions.
16 If such a certificate is found during a verify operation it is
17 rejected by default: this behaviour can be overridden by either
18 handling the new error X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION or
19 by setting the verify flag X509_V_FLAG_IGNORE_CRITICAL. A new function
20 X509_supported_extension() has also been added which returns 1 if a
21 particular extension is supported.
22 [Steve Henson]
23
a661b653
BM
24 +) New functions/macros
25
26 SSL_CTX_set_msg_callback(ctx, cb)
27 SSL_CTX_set_msg_callback_arg(ctx, arg)
28 SSL_set_msg_callback(ssl, cb)
29 SSL_set_msg_callback_arg(ssl, arg)
30
31 to request calling a callback function
32
33 void cb(int write_p, int version, int content_type,
34 const void *buf, size_t len, SSL *ssl, void *arg)
35
36 whenever a protocol message has been completely received
37 (write_p == 0) or sent (write_p == 1). Here 'version' is the
38 protocol version according to which the SSL library interprets
39 the current protocol message (SSL2_VERSION, SSL3_VERSION, or
40 TLS1_VERSION). 'content_type' is 0 in the case of SSL 2.0, or
41 the content type as defined in the SSL 3.0/TLS 1.0 protocol
42 specification (change_cipher_spec(20), alert(21), handshake(22)).
43 'buf' and 'len' point to the actual message, 'ssl' to the
44 SSL object, and 'arg' is the application-defined value set by
45 SSL[_CTX]_set_msg_callback_arg().
46
47 'openssl s_client' and 'openssl s_server' have new '-msg' options
48 to enable a callback that displays all protocol messages.
49
50 TODO: SSL 2.0, doc/ssl/, doc/apps/
51 [Bodo Moeller]
52
53 *) In ssl3_get_client_hello (ssl/s3_srvr.c), generate a fatal alert
54 (sent using the client's version number) if client_version is
55 smaller than the protocol version in use. Also change
56 ssl23_get_client_hello (ssl/s23_srvr.c) to select TLS 1.0 if
57 the client demanded SSL 3.0 but only TLS 1.0 is enabled; then
58 the client will at least see that alert.
59 [Bodo Moeller]
60
581f1c84
DSH
61 +) Modify the behaviour of EVP cipher functions in similar way to digests
62 to retain compatibility with existing code.
63 [Steve Henson]
64
20d2186c
DSH
65 +) Modify the behaviour of EVP_DigestInit() and EVP_DigestFinal() to retain
66 compatibility with existing code. In particular the 'ctx' parameter is
67 not assumed to be valid before the call to EVP_DigestInit() and it is tidied
68 up after a call to EVP_DigestFinal(). A new function EVP_DigestFinal_ex()
69 but does not free up the ctx. Also change function EVP_MD_CTX_copy() to
70 assume the destination is uninitialized: EVP_MD_CTX_copy_ex() do assumes
71 the destiation is valid. Also modify all the OpenSSL digest calls to call
72 EVP_DigestInit_ex(), EVP_DigestFinal_ex() and EVP_MD_CTX_copy_ex().
73 [Steve Henson]
74
48948d53
BM
75 +) Change ssl3_get_message (ssl/s3_both.c) and the functions using it
76 so that complete 'Handshake' protocol structures are kept in memory
77 instead of overwriting 'msg_type' and 'length' with 'body' data.
78 [Bodo Moeller]
79
80 *) Fix ssl3_get_message (ssl/s3_both.c) to handle message fragmentation
81 correctly.
82 [Bodo Moeller]
83
285046ec
RL
84 +) Add an implementation of SSL_add_dir_cert_subjects_to_stack for Win32.
85 [Massimo Santin via Richard Levitte]
86
07cee702
GT
87 +) Major restructuring to the underlying ENGINE code. This includes
88 reduction of linker bloat, separation of pure "ENGINE" manipulation
89 (initialisation, etc) from functionality dealing with implementations
90 of specific crypto iterfaces. This change also introduces integrated
91 support for symmetric ciphers and digest implementations - so ENGINEs
92 can now accelerate these by providing EVP_CIPHER and EVP_MD
93 implementations of their own. This is detailed in crypto/engine/README
94 as it couldn't be adequately described here. However, there are a few
95 API changes worth noting - some RSA, DSA, DH, and RAND functions that
96 were changed in the original introduction of ENGINE code have now
97 reverted back - the hooking from this code to ENGINE is now a good
98 deal more passive and at run-time, operations deal directly with
99 RSA_METHODs, DSA_METHODs (etc) as they did before, rather than
100 dereferencing through an ENGINE pointer any more. Also, the ENGINE
101 functions dealing with BN_MOD_EXP[_CRT] handlers have been removed -
102 they were not being used by the framework as there is no concept of a
103 BIGNUM_METHOD and they could not be generalised to the new
104 'ENGINE_TABLE' mechanism that underlies the new code. Similarly,
105 ENGINE_cpy() has been removed as it cannot be consistently defined in
106 the new code.
107 [Geoff Thorpe]
108
d46c1a81
DSH
109 +) Change ASN1_GENERALIZEDTIME_check() to allow fractional seconds.
110 [Steve Henson]
111
89eeccac
RL
112 +) Change mkdef.pl to sort symbols that get the same entry number,
113 and make sure the automatically generated functions ERR_load_*
114 become part of libeay.num as well.
115 [Richard Levitte]
116
3b0b5aba
BM
117 *) Avoid infinite loop in ssl3_get_message (ssl/s3_both.c) if a
118 client receives HelloRequest while in a handshake.
119 [Bodo Moeller; bug noticed by Andy Schneider <andy.schneider@bjss.co.uk>]
120
6b0e9fac
BM
121 +) New function SSL_renegotiate_pending(). This returns true once
122 renegotiation has been requested (either SSL_renegotiate() call
123 or HelloRequest/ClientHello receveived from the peer) and becomes
124 false once a handshake has been completed.
125 (For servers, SSL_renegotiate() followed by SSL_do_handshake()
126 sends a HelloRequest, but does not ensure that a handshake takes
127 place. SSL_renegotiate_pending() is useful for checking if the
128 client has followed the request.)
129 [Bodo Moeller]
130
131 +) New SSL option SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION.
132 By default, clients may request session resumption even during
133 renegotiation (if session ID contexts permit); with this option,
134 session resumption is possible only in the first handshake.
135 [Bodo Moeller]
136
2260ad21
BM
137 *) Bugfix in ssl3_accept (ssl/s3_srvr.c): Case SSL3_ST_SW_HELLO_REQ_C
138 should end in 'break', not 'goto end' which circuments various
b49124f6
BM
139 cleanups done in state SSL_ST_OK. But session related stuff
140 must be disabled for SSL_ST_OK in the case that we just sent a
141 HelloRequest.
2260ad21
BM
142
143 Also avoid some overhead by not calling ssl_init_wbio_buffer()
144 before just sending a HelloRequest.
b49124f6 145 [Bodo Moeller, Eric Rescorla <ekr@rtfm.com>]
8e2f6b79 146
ee60d9fb
BM
147 *) Fix ssl/s3_enc.c, ssl/t1_enc.c and ssl/s3_pkt.c so that we don't
148 reveal whether illegal block cipher padding was found or a MAC
149 verification error occured. (Neither SSLerr() codes nor alerts
150 are directly visible to potential attackers, but the information
151 may leak via logfiles.)
152
153 Similar changes are not required for the SSL 2.0 implementation
154 because the number of padding bytes is sent in clear for SSL 2.0,
155 and the extra bytes are just ignored. However ssl/s2_pkt.c
156 failed to verify that the purported number of padding bytes is in
157 the legal range.
158 [Bodo Moeller]
159
96bd6f73
DSH
160 +) Add some demos for certificate and certificate request creation.
161 [Steve Henson]
162
c0f5dd07
LJ
163 +) Make maximum certificate chain size accepted from the peer application
164 settable (SSL*_get/set_max_cert_list()), as proposed by
165 "Douglas E. Engert" <deengert@anl.gov>.
166 [Lutz Jaenicke]
167
6c36f7a9
LJ
168 +) Add support for shared libraries for Unixware-7 and support including
169 shared libraries for OpenUNIX-8 (Boyd Lynn Gerber <gerberb@zenez.com>).
170 [Lutz Jaenicke]
171
a9ed4da8
BM
172 *) Improve RSA_padding_check_PKCS1_OAEP() check again to avoid
173 'wristwatch attack' using huge encoding parameters (cf.
174 James H. Manger's CRYPTO 2001 paper). Note that the
175 RSA_PKCS1_OAEP_PADDING case of RSA_private_decrypt() does not use
e3fefbfd 176 encoding parameters and hence was not vulnerable.
a9ed4da8
BM
177 [Bodo Moeller]
178
4450107a 179 +) Add a "destroy" handler to ENGINEs that allows structural cleanup to
908efd3b
GT
180 be done prior to destruction. Use this to unload error strings from
181 ENGINEs that load their own error strings. NB: This adds two new API
182 functions to "get" and "set" this destroy handler in an ENGINE.
a9ed4da8 183 [Geoff Thorpe]
908efd3b 184
4450107a 185 +) Alter all existing ENGINE implementations (except "openssl" and
541814c4
GT
186 "openbsd") to dynamically instantiate their own error strings. This
187 makes them more flexible to be built both as statically-linked ENGINEs
188 and self-contained shared-libraries loadable via the "dynamic" ENGINE.
189 Also, add stub code to each that makes building them as self-contained
190 shared-libraries easier (see README.ENGINE).
191 [Geoff Thorpe]
192
4450107a 193 +) Add a "dynamic" ENGINE that provides a mechanism for binding ENGINE
541814c4
GT
194 implementations into applications that are completely implemented in
195 self-contained shared-libraries. The "dynamic" ENGINE exposes control
196 commands that can be used to configure what shared-library to load and
197 to control aspects of the way it is handled. Also, made an update to
198 the README.ENGINE file that brings its information up-to-date and
199 provides some information and instructions on the "dynamic" ENGINE
200 (ie. how to use it, how to build "dynamic"-loadable ENGINEs, etc).
201 [Geoff Thorpe]
202
d98a4b73
UM
203 *) BN_sqr() bug fix.
204