【发布时间】:2018-08-24 05:29:05
【问题描述】:
我正在使用 Akka Streams 创建一个 TCP 服务器,该服务器使用 akka.stream.scaladsl.TLS 和客户端证书身份验证。我正在创建一个回显服务器作为第一个概念证明。
与此同时,我是 Scala/Akka/Akka Streams 的新手,因此我用 Python 创建了一个类似的服务器和 TCP 客户端,以提供工具来测试我在 Scala 中的工作。 Python 服务器/客户端使用客户端证书身份验证运行。客户端连接服务器时,执行以下步骤:
- 创建和配置 SSLContext
- 使用 socket.create_connection() 创建一个套接字
- 使用 SSLContext.wrap_socket() 用 SSLContext 包装套接字。这将创建对等连接
- 连接后,打印服务器证书
- 无限循环请求输入并将每个输入发送到服务器
我相信我已经使用 Akka Streams 和 akka.stream.scaladsl.TLS 完成了服务器,但是当我尝试使用我的 Python 客户端进行连接时,客户端永远无法通过使用 context.wrap_socket(sock, server_hostname=host) 连接到对等方。服务器成功绑定 TCP 连接并创建对应的 IncomingConnection 对象。客户端/服务器也永远不会超时(客户端只是等待握手?)。
我最大的问题是我看不到来自我的 TLS BidiFlow 的信息,akka.stream.scaladsl.TLS。我不知道我在握手的哪一步卡住了,这使得故障排除非常困难。
有没有办法在整个 TLS 握手过程中输出一些信息?好像所有的功能都被封装了,不知道有什么办法可以排错。
否则,我正在尝试使用 openssl 进行故障排除并获得以下信息:
bash$ openssl s_client -connect myserver.com:443 -state -debug
CONNECTED(00000003)
SSL_connect:before/connect initialization
write to 0x7fd914100080 [0x7fd915001000] (318 bytes => 318 (0x13E))
0000 - 16 03 01 01 39 01 00 01-35 03 03 e3 ff 5d fb 26 ....9...5....].&
0010 - 15 e3 32 89 37 e2 cb 95-f5 00 bd df 13 3d ae a6 ..2.7........=..
0020 - d7 37 db 4e 80 19 63 ad-d6 6c f1 00 00 98 cc 14 .7.N..c..l......
0030 - cc 13 cc 15 c0 30 c0 2c-c0 28 c0 24 c0 14 c0 0a .....0.,.(.$....
0040 - 00 a3 00 9f 00 6b 00 6a-00 39 00 38 ff 85 00 c4 .....k.j.9.8....
0050 - 00 c3 00 88 00 87 00 81-c0 32 c0 2e c0 2a c0 26 .........2...*.&
0060 - c0 0f c0 05 00 9d 00 3d-00 35 00 c0 00 84 c0 2f .......=.5...../
0070 - c0 2b c0 27 c0 23 c0 13-c0 09 00 a2 00 9e 00 67 .+.'.#.........g
0080 - 00 40 00 33 00 32 00 be-00 bd 00 45 00 44 c0 31 .@.3.2.....E.D.1
0090 - c0 2d c0 29 c0 25 c0 0e-c0 04 00 9c 00 3c 00 2f .-.).%.......<./
00a0 - 00 ba 00 41 c0 11 c0 07-c0 0c c0 02 00 05 00 04 ...A............
00b0 - c0 12 c0 08 00 16 00 13-c0 0d c0 03 00 0a 00 15 ................
00c0 - 00 12 00 09 00 ff 01 00-00 74 00 0b 00 04 03 00 .........t......
00d0 - 01 02 00 0a 00 3a 00 38-00 0e 00 0d 00 19 00 1c .....:.8........
00e0 - 00 0b 00 0c 00 1b 00 18-00 09 00 0a 00 1a 00 16 ................
00f0 - 00 17 00 08 00 06 00 07-00 14 00 15 00 04 00 05 ................
0100 - 00 12 00 13 00 01 00 02-00 03 00 0f 00 10 00 11 ................
0110 - 00 23 00 00 00 0d 00 26-00 24 06 01 06 02 06 03 .#.....&.$......
0120 - ef ef 05 01 05 02 05 03-04 01 04 02 04 03 ee ee ................
0130 - ed ed 03 01 03 02 03 03-02 01 02 02 02 03 ..............
SSL_connect:unknown state
此时 openssl 刚刚挂起。
【问题讨论】:
标签: scala ssl openssl akka akka-stream