如果客户端和服务器使用相同的证书文件通过SSL进行安全连接?

时间:2013-06-20 16:50:08

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

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

服务器端:

1)context_.use_certificate_chain_file(“mycert.pem”,错误);

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

context_.use_tmp_dh_file( “dHParam.pem”,错误);

客户端:

2)ctx.load_verify_file( “mycert.pem”,错误);

使用此代码,握手完美无缺。我的问题是,服务器和客户端如何在命令1和2中使用相同的证书(“mycert.pem”)?通过这种方法,客户端可以轻松地假装成服务器。你觉得我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

证书是公开信息。

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

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

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