【问题标题】:certificates for client side in tlstls中客户端的证书
【发布时间】:2012-09-06 23:56:59
【问题描述】:

我被这个问题困扰了好几天,仍然无法弄清楚。我只想在 python 中构建一个简单的 TLS c/s 通信。对于服务器,我使用 EC2,客户端我使用自己的笔记本电脑。我设置并测试了正常的套接字通信,一切正常。

当我从官方文档中尝试this tutorial 时,我遇到了问题。对于以下客户端代码:

# require a certificate from the server
ssl_sock = ssl.wrap_socket(s,
                           ca_certs="/etc/ca_certs_file",
                           cert_reqs=ssl.CERT_REQUIRED)

据我所知,/etc/ca_certs_file 部分应该是来自 CA 的一些证书。我很困惑我应该在哪里寻找它们。我实际上在 EC2 服务器上的 /etc/ssl/certs 中找到了一些 .pem 文件,但在客户端(我的笔记本电脑)上什么也没有。

我也试过根据this tutorial on openssl生成用户证书,我按照步骤,为服务器生成cakey.pemcacert.pem,为客户端生成userkey.pemusercert-req.pem,都在同一个目录下在我的 EC2 服务器中。当我执行openssl ca -in usercert-req.pem -out usercert.pem 时,它会输出错误:

Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
unable to load certificate
140420412405408:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE

那么实际上应该如何生成这个证书文件?在服务器端生成,然后等待客户端通过空中请求它们,或者在客户端生成,或者从第三方获取并直接在客户端使用?

有人可以提供任何指导吗?任何帮助表示赞赏。

【问题讨论】:

    标签: python openssl ssl


    【解决方案1】:

    这将创建一个自签名证书对,私钥将在同一个文件中:

    openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
    

    然后从服务器端的python:

    new_client_socket, address = server_socket.accept()
    secured_client_socket = ssl.wrap_socket(new_client_socket,
                                            server_side=True,
                                            certfile='cert.pem',
                                            keyfile='cert.pem',
                                            ssl_version=ssl.PROTOCOL_TLSv1)
    

    和客户端应用程序:

    unsecured_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket = ssl.wrap_socket(unsecured_client_socket,
                                    ca_certs='cert.pem',
                                    cert_reqs=ssl.CERT_REQUIRED,
                                    ssl_version=ssl.PROTOCOL_TLSv1)
    

    【讨论】:

    • 感谢您的回复。那么通过命令,我们是不是生成了两个同名的.pem文件,以便所有信息都保存在一个文件中呢?
    • 是的,两个密钥将放在同一个文件中,无论您在何处生成该文件,只需将其复制到另一端,因此客户端和服务器都将使用同一个文件。顺便说一句,如果您指定两个不同的文件名,密钥当然会放在两个不同的文件中。
    • 请注意,这是不安全的,因为密钥文件只对服务器可见。
    猜你喜欢
    • 2019-10-25
    • 2019-05-02
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多