使用Qt进行双向SSL身份验证

sauutmhj  于 2023-01-31  发布在  其他
关注(0)|答案(1)|浏览(358)

我是ssl / networking的新手,想使用mutal ssl(客户端验证服务器和服务器验证对等体)我在网上找到了一份白色(http://www.infidigm.net/articles/qsslsocket_for_ssl_beginners/),它给了我一些设置证书和密钥的指导。现在这份白皮书使用了一个本地主机ip地址作为客户端的证书文件。我想将其转换为注册域名(scp.radiant.io)。这个FQDN是我的ubuntuos本地的,用于测试目的
1.更新我的本地主机到有一个domianname(scp.radiant.io).通过修改这个文件sudo nano /etc/hosts/到说127.0.0.1 scp.radiant.io localhost
1.接下来,我为客户机和服务器创建证书和私钥
a.生成服务器证书示例的步骤如下。为客户端运行相同命令以创建客户端证书
openssl req -out server_ca.pem -new -x509 -nodes -subj "/C=$COUNTRY/ST=$STATE/L=$LOCALITY/O=$ORG/OU=$ORG_UNIT/CN=server/emailAddress=radiant.$EMAIL"
mv privkey.pem server_privatekey.pem
touch server_index.txt
echo "00" >> server_index.txt
openssl genrsa -out server_local.key 1024
openssl req -key ${NAME}_local.key -new -out server_local.req -subj "/C=$COUNTRY/ST=$STATE/L=$LOCALITY/O=$ORG/OU=$ORG_UNIT/CN=scp.radiant.io/emailAddress=$EMAIL"
openssl x509 -req -in ${NAME}_local.req -CA ${NAME}_ca.pem -CAkey server_privatekey.pem -CAserial server_index.txt -out server_local.pem
B.这将生成一个CaCerts(服务器_ca.pem和客户端_ca.pem)
c.这将生成本地证书文件(server_local.pem和client_local.pem)。这是我将FQDN设置为www.example.com的地方scp.radiant.io
d.这生成本地密钥(服务器_本地.密钥和客户端_本地.密钥)
1.我使用生成的cert文件在QSslSocket上为双方设置ssl配置,如下所示

//client socket setup
     config.setPrivateKey("server_local.key");
     config.setLocalCertificate("server_local.pem");
     config.addCaCertificate("client_ca.pem");
     config.setPeerVerifyMode("QSslSocket::VerifyPeer");
     sslSocket->setSslConfiguration(config); 
     sslSocket->connectToHostEncrypted("scp.radiant.io",1200);

    // server socket setup
     config.setPrivateKey("client_local.key");
     config.setLocalCertificate("client_local.pem");
     config.addCaCertificate("server_ca.pem");
     config.setPeerVerifyMode("QSslSocket::VerifyPeer");
     sslSocket->setSslConfiguration(config); 
     sslSocket->startServerEncryption()

1.当运行这段代码时,我在ssl错误中得到以下错误。"The host name did not match any of the valid hosts for this certificate
1.现在,如果我更改客户端套接字,在连接sslSocket->connectToHostEncrypted("scp.radiant.io",1200,"scp.radiant.io");时使用此套接字,它将工作。
我不明白为什么我必须在加密连接时设置peerVerifyHost参数。我也希望为我的WebSockets实现使用相同的证书,但QWebSocket类不允许您在连接时设置peerVerifyHost。因此,我一定是在证书级别或操作系统级别为我的FQDN做错了什么。任何网络和ssl帮助都会很有帮助

vlju58qv

vlju58qv1#

我认为您可以使用“ignoreSslErrors”忽略此错误,并让握手继续

相关问题