能否使用OpenSSL运行两台互相校验对方证书链的服务器?
问题解答
完全可以实现,不过严格来说该场景下两台通信的主机需要同时承担服务端和客户端的双重角色,并非纯粹的"两台独立服务器"模式,本质是TLS双向认证(mTLS)的典型应用。
- 首先准备两套独立的节点证书,分别对应两台主机,两套证书的信任根CA需要提前导入对方的信任存储中。
- 在第一台主机上启动带客户端证书校验的OpenSSL服务端,命令示例:
openssl s_server -accept 4433 -cert server1.crt -key server1.key -CAfile ca_server2.crt -Verify 1
其中-Verify 1参数强制要求连接的客户端提供证书,并用指定的CA文件校验证书链,校验不通过直接断开连接。 - 在第二台主机上启动同配置的OpenSSL服务端,替换对应证书、密钥参数,CA文件改为第一台节点的信任根证书即可:
openssl s_server -accept 4433 -cert server2.crt -key server2.key -CAfile ca_server1.crt -Verify 1 - 两台主机分别以客户端身份向对方发起连接,连接时携带自身证书密钥,同时校验对方服务端的证书链:
第一台主机发起连接的命令:openssl s_client -connect <第二台主机IP>:4433 -cert server1.crt -key server1.key -CAfile ca_server2.crt -verify_return_error
第二台主机发起连接的命令:openssl s_client -connect <第一台主机IP>:4433 -cert server2.crt -key server2.key -CAfile ca_server1.crt -verify_return_error
如果仅需要单条TCP连接内的双向证书校验,不需要同时启动两个服务端,只要在单条TLS连接中开启服务端对客户端的证书校验、同时客户端校验服务端证书,就已经实现了两端互验证书链的需求,仅当两台主机都需要主动向对方发起连接、且接收方需要校验发起方身份时,才需要两侧都启动带校验规则的服务端进程。
内容的提问来源于stack exchange,提问作者user13739409
相关产品推荐
相关产品推荐

