0
点赞
收藏
分享

微信扫一扫

QT客户端与Java服务端进行https通信


网上也有一部分教程,不过我还是踩了许多的坑,所以整理了一下网上看到的和自己的一些收获。




首先:


,Tomcat.truststore(包含信任库),


首先说明一下这个两个文件 

  client.p12    pkcs12格式 

 Tomcat.truststore java存储的keystore格式,也可能是 .keystore文件


QT是无法直接使用这两个文件的,QT使用的是openssl,需要转化成pem文件使用

首先需要安装JDK,安装后将JKS文件转化为p12文件

运行以下命令:

JKS → P12

keytool -importkeystore-srckeystore Tomcat.truststore -srcstoretype JKS -deststoretype Der-destkeystore Tomcat.p12

这样将会在当前目录生成Tomcat.p12信任库

接下来首先安装openssl,然后:

提取用户证书:
openssl pkcs12 -in client.p12 -clcerts -nokeys -out client.pem   //pem格式


提取私钥:
openssl pkcs12 -in client.p12 -nocerts -out key.pem 


转换信任库为pem格式

openssl pkcs12 -in Tomcat.p12 -out  Tomcat.pem 





OK,准备工作完成,开始加载证书进行SSL连接了。




直接贴上我的配置代码:


QFilefile;

    QFilefile;
QSslConfiguration sslconfig;
sslconfig.setPeerVerifyMode(QSslSocket::VerifyNone);
sslconfig.setProtocol(QSsl::TlsV1_1);
//上边两句是万万不能少的,如果setPeerVerifyMode不设置,就会出现SSL握手失败

//加载客户端证书
file.setFileName("C:/Users/Administrator/Desktop/https/client.pem");
file.open(QIODevice::ReadOnly);
QSslCertificate local(&file, QSsl::Pem);
sslconfig.setLocalCertificate(local);
file.close();
//加载私钥
file.setFileName("C:/Users/Administrator/Desktop/https/key.pem");
file.open(QIODevice::ReadOnly);
QSslKey key(&file, QSsl::Rsa, QSsl::Pem,QSsl::PrivateKey,QByteArray("123456"));
sslconfig.setPrivateKey(key);
file.close();
//加载信任库
file.setFileName("C:/Users/Administrator/Desktop/https/truststore.pem");
file.open(QIODevice::ReadOnly);
QList<<span style=" color:#800080;">QSslCertificate> list = QSslCertificate::fromDevice(&file, QSsl::Pem);
sslconfig.setCaCertificates(list);
file.close();


request.setSslConfiguration(sslconfig); 将设置配置到request中

然后再发送http请求的时候,加入这个配置,就成了https的通信。


关于http的内容就不在赘述了

举报

相关推荐

0 条评论