Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;thrift客户端不使用ssl(ssl\U连接挂起) 我想使用我的C++服务器和客户机中的节俭提供的SSL支持。我自己的thrift客户端在通过“transport->open()后总是挂在SSL_connect上 . 因此,我为windows构建了官方的thrift\thrift-0.9.1\test\cpp\src\TestServer.cpp和testclient.cpp。同样的事情也发生在我身上_C++_Ssl_Thrift - Fatal编程技术网

c++;thrift客户端不使用ssl(ssl\U连接挂起) 我想使用我的C++服务器和客户机中的节俭提供的SSL支持。我自己的thrift客户端在通过“transport->open()后总是挂在SSL_connect上 . 因此,我为windows构建了官方的thrift\thrift-0.9.1\test\cpp\src\TestServer.cpp和testclient.cpp。同样的事情也发生在我身上

c++;thrift客户端不使用ssl(ssl\U连接挂起) 我想使用我的C++服务器和客户机中的节俭提供的SSL支持。我自己的thrift客户端在通过“transport->open()后总是挂在SSL_connect上 . 因此,我为windows构建了官方的thrift\thrift-0.9.1\test\cpp\src\TestServer.cpp和testclient.cpp。同样的事情也发生在我身上,c++,ssl,thrift,C++,Ssl,Thrift,我真的需要任何帮助或指点 更新: 我还尝试使用了 在我使用0.9.1之前 因为我看到testserver.cpp正在执行以下操作 sslSocketFactory->loadCertificate("./server-certificate.pem"); sslSocketFactory->loadPrivateKey("./server-private-key.pem"); sslSocketFactory->ciphers("ALL:!ADH:!L

我真的需要任何帮助或指点

更新:

我还尝试使用了 在我使用0.9.1之前


因为我看到testserver.cpp正在执行以下操作

    sslSocketFactory->loadCertificate("./server-certificate.pem");
    sslSocketFactory->loadPrivateKey("./server-private-key.pem");
    sslSocketFactory->ciphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
    factory->ciphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
    factory->loadTrustedCertificates("./trusted-ca-certificate.pem");
    factory->authenticate(true);
testclient.cpp正在执行以下操作

    sslSocketFactory->loadCertificate("./server-certificate.pem");
    sslSocketFactory->loadPrivateKey("./server-private-key.pem");
    sslSocketFactory->ciphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
    factory->ciphers("ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH");
    factory->loadTrustedCertificates("./trusted-ca-certificate.pem");
    factory->authenticate(true);
因此,我采取了以下步骤来构建证书

openssl genrsa -out ca-private-key.pem 2048
openssl req -new -x509 -nodes -days 3600 -key ca-private-key.pem -out ca-certificate.pem 

openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-private-key.pem -out server-request.pem
openssl rsa -in server-private-key.pem -out server-private-key.pem
openssl x509 -req -in server-request.pem -days 3600 -CA ca-certificate.pem -CAkey ca-private-key.pem -set_serial 01 -out server-certificate.pem
不同测试用例的输出-


在挂起服务器端调用堆栈期间

在挂起客户端调用堆栈期间。显然,双方都在阅读!

上述客户机-服务器通信的Wireshark调试跟踪

Debug output through "openssl s_client" run against thriftserver-

openssl s_client -connect 192.168.0.4:9090 -state -debug
Loading 'screen' into random state - done
CONNECTED(00000100)
SSL_connect:before/connect initialization
write to 0x1e2b5c0 [0x1e2bf50] (321 bytes => 321 (0x141))
0000 - 16 03 01 01 3c 01 00 01-38 03 03 52 dc 25 39 ad   ....<...8..R.%9.
SSL_connect:SSLv2/v3 write client hello A      

通过在thriftserver上运行的“openssl s_客户端”调试输出-
openssl s_客户端-连接192.168.0.4:9090-状态-调试
将“屏幕”加载到随机状态-完成
已连接(00000100)
SSL_connect:在/connect初始化之前
写入0x1e2b5c0[0x1e2bf50](321字节=>321(0x141))
0000-16 03 01 3c 01 00 01-38 03 03 52 dc 25 39 ad。。。。268435456) 
来自客户。远程端未使用TFramedTransport?
openssl.exe s_客户端-连接本地主机:9090-状态-调试
将“屏幕”加载到随机状态-完成
已连接(0000018C)
SSL_connect:在/connect初始化之前
写入0x6db5c0[0x6dbf50](321字节=>321(0x141))
0000-16 03 01 3c 01 00 01-38 03 03 52 db 4b 8a dd-1(0xFFFFFF))
SSL_connect:SSLv2/v3读取服务器hello A中出错
写入:errno=10054

TestServer.exe--ssl--服务器类型非阻塞--传输框架
TestClient.exe--ssl--传输框架
服务器stderr说
Thrift:Sat Jan 18 19:36:01 2014 TNonblockingServer:帧大小太大(36929)
5616>268435456)从客户端。远程端未使用TFramedTransport?

通过逐步检查,我明确确认testclient使用的是框架传输。

我想我知道可能发生了什么,可能已经发现了错误

进一步调试之后,我看到虚拟函数createSocket是用参数“int”声明的

boost::shared_ptr createSocket(intsocket);

但是,基类TServerSocket.h将其声明为“THRIFT_SOCKET”,在windows上是ULONG_PTR

虚拟boost::shared_ptr createSocket(THRIFT_SOCKET客户端);

因此,正确的createSocket没有从内部调用

在做了这个更改之后,我能够继续前进,我再次用openssl s_客户端连接localhost:9090-state-debug确认了这一点


我会将我的补丁发送给thrift dev,以防他们愿意接受。

我想我知道可能发生了什么,可能已经发现了错误

进一步调试之后,我看到虚拟函数createSocket是用参数“int”声明的

boost::shared_ptr createSocket(intsocket);

但是,基类TServerSocket.h将其声明为“THRIFT_SOCKET”,在windows上是ULONG_PTR

虚拟boost::shared_ptr createSocket(THRIFT_SOCKET客户端);

因此,正确的createSocket没有从内部调用

在做了这个更改之后,我能够继续前进,我再次用openssl s_客户端连接localhost:9090-state-debug确认了这一点


我会将我的补丁发送给thrift dev,以防他们愿意接受。

我建议也在thrift邮件列表上询问这个问题。我建议也在thrift邮件列表上询问这个问题。我们查看补丁后可以知道:-)JensG-我在(77和78)提交了拉取请求。但这些家伙告诉我要先创造一张jira票。我将不得不抽出时间来做所有这些:)那些家伙:-)可以通过GitHub进行审查,但他们:-)出于法律原因需要JIRA票证,以便最终将其提交到ASF代码库中。请参阅以获取解释。因此,在大多数情况下,人们倾向于更多地根据JIRA票证行事。我们在查看补丁后可以看出:-)JensG-我在(77和78)提交了拉取请求。但这些家伙告诉我要先创造一张jira票。我将不得不抽出时间来做所有这些:)那些家伙:-)可以通过GitHub进行审查,但他们:-)出于法律原因需要JIRA票证,以便最终将其提交到ASF代码库中。请参阅以获取解释。因此,在大多数情况下,人们更倾向于在JIRA票上采取行动。
TestServer.exe --ssl --server-type nonblocking --transport framed
TestClient.exe --ssl --transport framed

Server stderr was saying 
Thrift: Sat Jan 18 19:36:01 2014 TNonblockingServer: frame size too large (36929
5616 > 268435456) from client <Host: ::1 Port: 23087>. Remote side not using TFramedTransport?