首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用python具有自签名证书的ssl

使用python具有自签名证书的ssl
EN

Stack Overflow用户
提问于 2015-10-01 01:50:42
回答 1查看 4.2K关注 0票数 3

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,并得到了相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-01 02:08:07

当您查看_ssl.c:2580的原始源时,您会发现SSL_CTX_use_certificate_chain_file失败了。由于没有设置pw_info.errorerrno,所以很难找到原因。这个问题可能是由crt文件引起的。在文本编辑器中打开它,并检查该文件是否与它应该看起来的一模一样-也验证了新行。如果它们不完全匹配,函数调用将失败。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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结束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32884500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文