繁体   English   中英

使用python自签名证书的ssl

[英]ssl with self signed certificate using python

我正在尝试使用自签名证书在python中构建一个简单的服务器。 我使用makecert创建了.cer,.pfx,.pvk文件。

context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_cert_chain(certfile="ServerSSL.cer")

Traceback (most recent call last):
  File "ssl_server.py", line 4, in <module>
    context.load_cert_chain(certfile="ServerSSL.cer")
ssl.SSLError: [SSL] PEM lib (_ssl.c:2580)

我做错了什么? 我也尝试通过更改后缀将我的cer文件转换为pem,我得到了同样的错误。

当你看看原始出处_ssl.c:2580你可以看到, SSL_CTX_use_certificate_chain_file失败。 由于既没有errno pw_info.error也没有errno ,因此找到原因并不容易。 问题可能是由crt文件引起的。 在文本编辑器中打开它,检查文件是否看起来完全如下 - 同时验证新行。 如果它们不完全匹配,则函数调用将失败。

2567:    PySSL_BEGIN_ALLOW_THREADS_S(pw_info.thread_state);
2568:    r = SSL_CTX_use_certificate_chain_file(self->ctx, certfile_bytes);
2569:    PySSL_END_ALLOW_THREADS_S(pw_info.thread_state);
2570:    if (r != 1) {
2571:        if (pw_info.error) {
2572:            ERR_clear_error();
2573:            /* the password callback has already set the error information */
2574:        }
2575:        else if (errno != 0) {
2576:            ERR_clear_error();
2577:            PyErr_SetFromErrno(PyExc_IOError);
2578:        }
2579:        else {
2580:            _setSSLError(NULL, 0, __FILE__, __LINE__);
2581:        }
2582:        goto error;

文件还说:

证书必须采用PEM格式,并且必须从主题证书(实际客户端或服务器证书)开始排序,然后是中间CA证书(如果适用),并以最高级别(根)CA结束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM