问题标签 [qsslsocket]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为什么在移动到另一个线程时出现运行时错误,使用套接字 (TCP/Web)?`QObject::moveToThread()` 是同步调用吗?
我正在将一些套接字从主线程移动到工作线程,并在新线程上处理,readyRead()
等。我很少看到以下危险警告:close()
write()
“QSocketNotifier:不能从另一个线程启用或禁用套接字通知”
通常在此警告之后执行会导致未定义的行为(崩溃/未捕获的异常/正常)。
已经检查了插座的所有信号/插槽,它们看起来是正确的。根据我的经验,如果有任何编码不规则,通常上述警告会很频繁或很快。
现在我怀疑moveToThread()
它是否按预期工作!因为从QEvent文档QEvent::ThreadChange
中,在此函数调用期间,a 作为当前线程上的最后一个事件引发。
对象被移动到另一个线程。这是在前一个线程中发送给该对象的最后一个事件。见1。1在线程亲和性改变之前,一个事件被发送到这个对象。您可以处理此事件以执行任何特殊处理。
QObject::moveToThread()
QEvent::ThreadChange
在我的代码中,我没有检查此事件。相反,我假设,一旦moveToThread()
完成,线程亲和力就会改变,并且对象上的新“信号/插槽”在新线程上得到保证。
问题:
- 将套接字移动到另一个线程是否安全?
- 将
moveToThread()
确保该对象上的信号在此函数之后也被移动到新线程? - 应该如何设计以确保 Socket 没有螺纹不规则性?
顺便说一句,在最新的 Qt 调试器中,它位于以下代码段:
qt - Qt Linux Mint 19.2 QSslSocket
我开发了小型 Qt 应用程序,用于通过 smtp 465 端口发送邮件。它适用于我的开发人员 linux mint 19.2 机器。当我将带有所有库的应用程序部署到 Mint 17.3 机器时,我得到 QAbstractSocketError::HostNotFoundError。我正在使用 QSslSocket。
如果我将我的应用程序和库部署到另一台 linux mint 19.2 机器上,它可以正常工作。所以问题是薄荷 19.2 和 17.3 的区别。我用尽了所有的可能性/想法。
ps
两台机器上安装的 OpenSsl 相同!
qt - 使用 Qt 进行双向 SSL 身份验证
我是 ssl / 网络的新手,想利用互 ssl(客户端验证服务器,服务器验证对等方)我在网上找到了一份白皮书(http://www.infidigm.net/articles/qsslsocket_for_ssl_beginners/),它给了我一些指导设置我的证书和密钥。现在本文使用本地主机 IP 地址作为客户端证书文件。我想将其切换为注册域名(scp.radiant.io)。这个 FQDN 对于我的 ubuntu 操作系统是本地的,用于测试目的
更新了我的本地主机以拥有一个域名 (scp.radiant.io)。通过修改这个文件
sudo nano /etc/hosts/
说127.0.0.1 scp.radiant.io localhost
接下来我为客户端和服务器创建证书和私钥
一个。下面的服务器生成证书示例的步骤。为客户端运行相同的命令以创建客户端证书
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
湾。这会生成一个 CaCerts(server_ca.pem 和 client_ca.pem)
C。这会生成一个本地证书文件(server_local.pem 和 client_local.pem).. 这是我将 FQDN 设置为 scp.radiant.io
d。这会生成一个 LocalKey(server_local.key 和 client_local.key)
我使用生成的证书文件在 QSslSocket 上为双方设置 ssl 配置,如下所示
运行此代码时,我的 ssl 错误中出现以下错误。
"The host name did not match any of the valid hosts for this certificate
现在,如果我更改客户端套接字以在连接时使用
sslSocket->connectToHostEncrypted("scp.radiant.io",1200,"scp.radiant.io");
它,它将起作用。
我不明白为什么在连接加密时必须设置 peerVerifyHost 参数。我也想为我的 WebSockets 实现使用相同的证书,但是 QWebSocket 类不允许您在连接时设置 peerverifyHost。所以我必须在我的 FQDN 的证书级别或操作系统级别做错了什么。任何网络和 SSL 帮助都会有所帮助
windows - 平台什么时候不支持ssl?(QSslSocket::supportsSsl() 返回 false)
我是一个使用 https 连接到 rest api 的 qt 应用程序开发人员。我将 ssl dll 库与应用程序(与构建 qt 的版本相同)一起部署,但有时在 Windows 上会发生,用户向我报告我的应用程序中的互联网连接无法正常工作。在调试时,我发现 qsslSocket::supportsSsl 返回 false 并且正在使用的 openssl 版本是空字符串。这什么时候发生?用户可以使用他的互联网浏览器并向我发送电子邮件。可能是什么问题?