实现SSL网关多服务端证书支持的思路

所内国密SSL网关的项目面临一个这样的问题,用户希望该网关同时支持使用国密SSL证书和标准的RSA证书的客户端,即意味着服务端有多个服务端证书,同时要求客户端在使用国密SSL证书时启用国密SSL协议,在客户端使用RSA证书时使用标准的TLS1.2协议。

这个问题的根本即在于服务端如何根据客户端的证书类型,选择对应的服务端证书。

先定位范围,我们知道,根据SSL握手协议,在客户端向服务端发起ClientHello之后,服务端就要向客户端返回服务端证书。可知握手过程中是服务端先向客户端发送证书。所以,服务端要根据客户端所使用的证书类型来确定在该连接中使用国密证书还是RSA证书,在不改动TLS协议的前提下,只有通过扩展ClientHello请求来实现了。

事实上Apache这种支持多个Virutal Host的应用早就面临了类似问题,TLS的SNI扩展就是用来解决问题的。

https://en.wikipedia.org/wiki/Server_Name_Indication

SNI的原理就是通过扩展ClientHello消息,将客户端需要访问的HostName提前告知Apache服务器,使得服务器在SSL握手之前就了解到客户端要访问的HostName,随后选择相应的服务端证书发送给客户端。

网关的问题也可以通过类似方案解决,客户端在连接网关服务器之前是知道自己使用的那种类型的证书的,通过SNI扩展,在ClientHello阶段发送约定好的标志,网关根据标志来确定向客户端发送国密证书还是RSA证书。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值