【问题标题】:If the client and server use the same certificate file for a secure connection over SSL?如果客户端和服务器使用相同的证书文件通过 SSL 进行安全连接?
【发布时间】:2013-06-20 16:50:08
【问题描述】:

我想弄清楚客户端和服务器之间的安全连接是如何建立的。我尝试了 boost::asio 库提供的 SSL 示例。我的问题是关于客户端和服务器使用的证书。具体来说,我生成了一个私钥(mykey.pem)。然后我使用这个私钥生成一个自签名证书(mycert.pem),我使用这些文件如下:

服务器端:

1)context_.use_certificate_chain_file("mycert.pem", error);

context_.use_private_key_file("mykey.pem", boost::asio::ssl::context::pem, error);

context_.use_tmp_dh_file("dHParam.pem",error);

客户端:

2)ctx.load_verify_file("mycert.pem",error);

有了这段代码,握手就完美地完成了。我的问题是,为什么服务器和客户端在命令 1 和 2 中都使用相同的证书(“mycert.pem”)?通过这种方法,客户端可以轻松地伪装成服务器。对吗?你认为我在这里遗漏了什么吗?

【问题讨论】:

    标签: ssl client-server ssl-certificate boost-asio


    【解决方案1】:

    证书是公开信息。

    这是允许实体证明其身份的私钥。客户端通过 SSL/TLS 握手保证只有私钥与服务器证书中的公钥匹配的一方才能在另一端拥有合适的主密钥,从而能够解密通信。它解决的问题是远程方是否确实是颁发证书的一方。 (这类似于检查带照片的身份证上的照片是否与您面前的人匹配。)

    在客户端配置证书(而不是私钥)可以告诉它您愿意信任哪些证书。它解决的问题是是否相信证书所说的内容(特别是它所说的关于服务器身份的内容)。这通常使用 PKI 完成,以便通过第 3 方(CA)建立信任。 (这类似于检查带照片的身份证件本身是否真实,并且您可以相信它所说的内容。)

    您通过信任此特定服务器证书所做的就是绕过使用 CA 来进行例外处理,并表明您愿意信任此特定证书是真实的。 (这对于少数证书来说很好,但使用 CA 可以让您的信任结构更易于管理并添加其他功能,例如撤销证书的能力。)

    【讨论】:

    • 非常感谢@Bruno 的精彩解释。真的很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多