本帖最后由 东北区技术支持 于 2020-7-30 15:02 编辑
一、 项目背景 XXXX以前使用InChorus的SSL安全加密设备对企业网银等生产系统的客户端访问过程进行加密传输,现在需要迁移到某公司AD设备进行SSL加密。 迁移的生产系统包括手机银行、微信银行、企业网银等,其中企业网银要求客户端使用UKEY进行认证,属于双向SSL认证加密传输。 在企业网银的测试上线过程中,出现了一些问题,无法正常上线使用。通过大量排查和调试,找到问题原因并提供解决方案,输出本文档以供交付使用。 二、 问题描述 1. 问题1:IE8等浏览器无法打开企业网银页面 企业网银经过某公司AD加密传输后,客户端浏览器使用IE8等浏览器登录访问,无法打开网银页面,但IP能ping通,端口也测试正常。 2. 问题2:企业网银服务器证书错误 使用赛门铁克对网银系统进行安全扫描,提示网银服务器证书不受信任,存在安全告警。 3. 问题3:企业网银客户端签名证书错误 客户端登录企业网银时,输入密码后提示数字签名错误,无法成功登录。 一、 问题原因和解决方案 1. IE8等浏览器无法打开企业网银页面 问题分析: 企业网银的客户端使用浏览器通过https方式访问,需要进行SSL加密传输。通过抓包分析,发现客户端与服务器之间SSL握手失败。对比SSL握手过程,发现服务器提供的加密套件(Cipher Suite)包含TLS1.1和TLS1.2,而客户端提供的加密套件只有TLS1.0和SSL3.0。两端没有相同的加密套件,导致SSL协商失败,无法建立SSL加密通道。 检查客户端浏览器(IE8.0)配置,默认只启用了TLS1.0和SSL3.0。 检查某公司AD设备的SSL协议配置,只启用了TLS1.1和TLS1.2,因此导致上述浏览器无法打开企业网银页面。 解决方案: 由于SSL3.0前段时间被爆出协议漏洞,目前主流浏览器厂商已经默认停用该协议,改为支持TLS1.1和TLS1.2,如下图为最新的IE11的默认配置。 某公司AD设备也从保证SSL安全传输的角度考虑,默认配置为未启用SSL3.0和SSL1.0。因此对于部分浏览器无法访问企业网银页面,建议用户升级浏览器。 从用户角度考虑,部分用户不熟悉浏览器配置或不适合升级浏览器,因此我们建议修改某公司AD设备的SSL加密配置,启用SSL3.0和TLS1.0的协议配置,禁用TLS1.2协议版本。 1. 企业网银服务器证书错误 问题分析: 查看服务器证书,是由VeriSign的下一级CA签发的,属于多级证书路径。在某公司AD配置服务器证书时,只提供了服务器证书,没有配置该证书对应的CA路径。 这种情况对于主流的PC端浏览器都是正常的,因为浏览器本身包含大部分受信任的CA证书链,能够自动识别并信任该CA签发的服务器证书。但是对于手机浏览器等,可能因为CA链不完整,只包含根CA,因此在访问过程中可能会提示服务器证书不受信任。 同时赛门铁克等安全厂商在进行扫描时,默认也不会集成完整的CA证书链,导致安全扫描时提示服务器证书不受信任,产生安全告警。 解决方案: 配置AD的服务器证书时,需要将完整的CA证书链合并到服务器证书中,即可消除客户端浏览器证书告警和赛门铁克扫描的告警。 1. 企业网银客户端签名错误 问题分析: 由于企业网银的服务端代码无法查看,不能获取到客户端签名校验的完整流程,因此无法及时定位问题原因。 通过不断的抓包分析、尝试,逐个排除可疑问题,问题最终定位到证书透传的过程中。 某公司AD设备部署在客户端与服务器之间,由AD跟客户端浏览器建立SSL隧道,客户端进行证书认证,然后访问服务器。同时服务器需要获取客户端证书认证后的身份信息,但服务器本身不参与SSL交互,因此需要AD设备将证书信息透传给服务器。
使用wfetch工具进行参数构造,发送请求给服务器,将正常的请求头部字段进行逐个修改,最终定位到SSLClientCert字段是唯一能够决定服务器校验身份信息的字段,该字段必要且不能进行改动。 对比某公司AD发送的SSLClientCert字段和原始字段,是不一样的。通过BASE64解码后,才能保持一致。 某公司AD出于安全考虑,将证书原文经过BASE64加密后传输给服务器,但是服务端程序在开发过程中只读取证书原文,导致获取不到证书信息。因此需要某公司AD修改证书透传方式,使用原文编码传递给服务器。同时取消发送证书的开始字段和结束字段,只发送证书原文。 解决方案: 修改某公司AD的证书传递方式,使用原文进行传输到服务器,进行测试,能够正常访问企业网银。 |