Qt 使用openssl库

在windows下面,QT开发使用ssl库一开始总会有些问题,这里记录一下最近解决的找不到库的经过。
安装QT时如果选择了支持openssl,那么qt就会编译一个版本的openssl库,通常会放在几个地方,这里就不多说了,在安装目录找一找就是。
然后自己下载了openssl的最新版本,最新版本有3.0和1.1.1q,目前没有听说qt已经支持3.0,所以只下了1.1.1q,按照文档编译之后,生成几个文件:在这里插入图片描述实际上qt自己差不多也是用的同样文件名的几个文件,之所以不使用qt自带的库,是懒得一个个找了,而且也不确定自己的程序能用。
这几个文件怎么处理呢?可以都放到项目目录中,当然可以建一个子目录,比方说lib,然后把这些文件都复制到这个目录里边。
相应的,在pro文件中加上LIBS += -L./lib -lssl -lcrypto,编译是没有问题的。
部署的时候用工具来处理库的依赖问题,就不多说了。
这里想说的是,在运行的时候,程序一定要能够找得到上面图片里边的这几个文件,不论是在系统环境变量中设置PATH,还是放到程序工作目录中。在开发的时候如果发现找不到库,那么可以把这些文件复制一份到release或者debug目录中,如果不打算或者不能修改环境变量的话。
总结一下,就是开发的时候,这些文件要存在于项目目录中,并且要在pro文件里设置好相应的参量,以确保编译通过。然而为了能够运行,还需要在编译生成文件的目标目录中也放一份,或者通过设置环境变量来确保程序可以找得到这些文件。
最后,最近偶然发现,windows平台下面使用mingw或者mingw64编译的库的时候,可以去msys2package找一找,有惊喜啊。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt使用OpenSSL,可以通过以下步骤实现: 1. 下载OpenSSL 可以从OpenSSL官网下载最新版本的OpenSSL,也可以使用系统自带的OpenSSL。如果是在Windows平台上,可以下载预编译的OpenSSL。 2. 配置Qt项目 在Qt项目中,需要在.pro文件中添加以下配置: ``` QT += network LIBS += -L/path/to/openssl/lib -lssl -lcrypto INCLUDEPATH += /path/to/openssl/include ``` 其中,/path/to/opensslOpenSSL的安装路径。通过上面的配置,可以将OpenSSL链接到Qt项目中。 3. 使用OpenSSLQt使用OpenSSL,可以参考以下示例代码: ```c++ #include <QSslSocket> #include <QSslCertificate> #include <QSslKey> int main() { // 初始化SSL QSslSocket::addDefaultCaCertificate(QSslCertificate::fromPath("ca.crt")); // 创建SSL套接字 QSslSocket socket; socket.setProtocol(QSsl::TlsV1_2); // 加载客户端证书和私钥 QSslCertificate clientCert("client.crt"); QSslKey clientKey("client.key", QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey, "password"); socket.setLocalCertificate(clientCert); socket.setPrivateKey(clientKey); // 连接服务器 socket.connectToHostEncrypted("server.com", 443); if (!socket.waitForConnected()) { qDebug() << "Error: " << socket.errorString(); return -1; } // 发送请求数据 const char *request = "Hello, world!"; socket.write(request, strlen(request)); socket.waitForBytesWritten(); // 读取响应数据 QByteArray response; while (socket.waitForReadyRead()) { response += socket.readAll(); } qDebug() << "Received: " << response; // 关闭套接字 socket.disconnectFromHost(); socket.waitForDisconnected(); return 0; } ``` 在上面的示例中,首先使用addDefaultCaCertificate函数添加了CA证书。然后创建了QSslSocket对象,并设置TLS 1.2协议。接着加载了客户端证书和私钥,并连接到服务器。在连接成功后,通过write函数发送请求数据,并通过waitForBytesWritten函数等待数据发送完成。然后通过waitForReadyRead函数等待服务器响应数据,并通过readAll函数读取响应数据。最后关闭套接字。 注意,在实际使用中,需要根据实际情况修改证书和私钥的文件名、地址和端口等参数。同时,还需要处理连接错误和读写错误等异常情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值