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。同样的事情也发生在我身上
我真的需要任何帮助或指点 更新: 我还尝试使用了 在我使用0.9.1之前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
因为我看到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?