【问题标题】:ssl with self signed certificate using python使用python的带有自签名证书的ssl
【发布时间】:2015-10-01 09:50:42
【问题描述】:

我正在尝试使用我的自签名证书在 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,但我得到了同样的错误。

【问题讨论】:

  • 使用的是什么Python版本?
  • 我的python版本是2.7.10 32bit
  • 你检查过这个 (docs.python.org/2/library/ssl.html)
  • 是的,我从那里获取了我的代码。

标签: python ssl server pem cer


【解决方案1】:

当您查看_ssl.c:2580 的原始来源时,您会发现SSL_CTX_use_certificate_chain_file 失败了。由于既没有设置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;

documentation 还说:

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

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 2021-10-22
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    相关资源
    最近更新 更多