mirror of https://github.com/python/cpython
bpo-43920: Make load_verify_locations(cadata) error message consistent (GH-25554)
Signed-off-by: Christian Heimes <christian@python.org>
This commit is contained in:
parent
e9194ea6ea
commit
b9ad88be03
|
@ -1433,12 +1433,17 @@ class ContextTests(unittest.TestCase):
|
|||
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
||||
self.assertRaises(TypeError, ctx.load_verify_locations, cadata=object)
|
||||
|
||||
with self.assertRaisesRegex(ssl.SSLError, "no start line"):
|
||||
with self.assertRaisesRegex(
|
||||
ssl.SSLError,
|
||||
"no start line: cadata does not contain a certificate"
|
||||
):
|
||||
ctx.load_verify_locations(cadata="broken")
|
||||
with self.assertRaisesRegex(ssl.SSLError, "not enough data"):
|
||||
with self.assertRaisesRegex(
|
||||
ssl.SSLError,
|
||||
"not enough data: cadata does not contain a certificate"
|
||||
):
|
||||
ctx.load_verify_locations(cadata=b"broken")
|
||||
|
||||
|
||||
@unittest.skipIf(Py_DEBUG_WIN32, "Avoid mixing debug/release CRT on Windows")
|
||||
def test_load_dh_params(self):
|
||||
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
OpenSSL 3.0.0: :meth:`~ssl.SSLContext.load_verify_locations` now returns a
|
||||
consistent error message when cadata contains no valid certificate.
|
|
@ -3791,7 +3791,7 @@ _add_ca_certs(PySSLContext *self, const void *data, Py_ssize_t len,
|
|||
{
|
||||
BIO *biobuf = NULL;
|
||||
X509_STORE *store;
|
||||
int retval = 0, err, loaded = 0;
|
||||
int retval = -1, err, loaded = 0;
|
||||
|
||||
assert(filetype == SSL_FILETYPE_ASN1 || filetype == SSL_FILETYPE_PEM);
|
||||
|
||||
|
@ -3845,23 +3845,32 @@ _add_ca_certs(PySSLContext *self, const void *data, Py_ssize_t len,
|
|||
}
|
||||
|
||||
err = ERR_peek_last_error();
|
||||
if ((filetype == SSL_FILETYPE_ASN1) &&
|
||||
(loaded > 0) &&
|
||||
(ERR_GET_LIB(err) == ERR_LIB_ASN1) &&
|
||||
(ERR_GET_REASON(err) == ASN1_R_HEADER_TOO_LONG)) {
|
||||
if (loaded == 0) {
|
||||
const char *msg = NULL;
|
||||
if (filetype == SSL_FILETYPE_PEM) {
|
||||
msg = "no start line: cadata does not contain a certificate";
|
||||
} else {
|
||||
msg = "not enough data: cadata does not contain a certificate";
|
||||
}
|
||||
_setSSLError(get_state_ctx(self), msg, 0, __FILE__, __LINE__);
|
||||
retval = -1;
|
||||
} else if ((filetype == SSL_FILETYPE_ASN1) &&
|
||||
(ERR_GET_LIB(err) == ERR_LIB_ASN1) &&
|
||||
(ERR_GET_REASON(err) == ASN1_R_HEADER_TOO_LONG)) {
|
||||
/* EOF ASN1 file, not an error */
|
||||
ERR_clear_error();
|
||||
retval = 0;
|
||||
} else if ((filetype == SSL_FILETYPE_PEM) &&
|
||||
(loaded > 0) &&
|
||||
(ERR_GET_LIB(err) == ERR_LIB_PEM) &&
|
||||
(ERR_GET_REASON(err) == PEM_R_NO_START_LINE)) {
|
||||
/* EOF PEM file, not an error */
|
||||
ERR_clear_error();
|
||||
retval = 0;
|
||||
} else {
|
||||
} else if (err != 0) {
|
||||
_setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__);
|
||||
retval = -1;
|
||||
} else {
|
||||
retval = 0;
|
||||
}
|
||||
|
||||
BIO_free(biobuf);
|
||||
|
|
Loading…
Reference in New Issue