OpenSSL在QT中的使用

现在需要把OpenSSL集成到QT里面。本来是想直接把Cygwin的动态库和头文件直接拿来用的,没想到链接的时候报了一票错误。那好吧,重新自己build一个,这样来的也干净些。

官网上下载源码,根据里面的INSTALL.W32一步步来。首先需要一个Mingw的bash。编译器链接器还有GNU Make都在装QT的时候装好了(没有VS的license,只能选Mingw版本的QT,配置起来也省事,咩哈哈)。

Mingw的bash通过MSYS安装,同样是到Mingw的官网上下载。其实这玩意只给我们安装了一个mingw-get,打开后,我靠,新立得的Deja Vu有木有!选上我们需要安装的包,等他检查依赖,然后就咯吱咯吱的开始安装了。对了,除了bash,还要选上perl。

上个图吧,免得无真相。。。是不是很像新立得!!!

然后启动MSYS,复制源码到MSYS的主目录。吐槽下,这里没有Cygwin的/cygdrive,搞的很不方便。

解压源码(必须要在bash下用tar解压!),cd到源码目录,然后执行:

$ ./Configure --prefix=$PWD/dist shared mingw

之后,

make depend && make && make install

等待他咯吱咯吱的编译就好了。

编译成功后会在dist目录生成 ".a" 文件和dll,这个就是我们需要的静态&动态库。

启动QT creator,新建工程,修改pro文件,添加如下配置:

INCLUDEPATH += X:\Your-open-ssl-code-location\openssl-dist\include\

LIBS    += X:\Your-open-ssl-bin-location\openssl-dist\lib\libssl.dll.a \
           X:\Your-open-ssl-bin-location\openssl-dist\lib\libcrypto.dll.a

然后在code里调用个openssl的函数试下:

复制代码

#include "mainwindow.h"

#include <openssl/ssl.h>
#include <openssl/err.h>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    SSL_library_init();
    SSL_load_error_strings();
    ssl_ctx = SSL_CTX_new(SSLv23_client_method());
}

复制代码

CTRL+B编译,应该是一路绿灯的通过~

运行的时候会出现程序意外终止,表害怕,把“libeay32.dll”和“ssleay32.dll"放到debug目录,注意不是二进制所在的Debug目录,是他的上一层! 这会儿应该就可以没有错误的运行了~

至此,openssl已经成功的集成在了QT中。这个方法比重新编译QT Sdk 快多了有木有~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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. 使用OpenSSL库 在Qt使用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、付费专栏及课程。

余额充值