使用场景
如果有一个业务系统,希望可以通过互联网从任意地方访问,同时从安全角度考虑,不希望谁都可以打开。可以使用HAProxy验证客户端证书的功能来实现。通过浏览器访问系统时,会弹出对话框,要求选择一个用户证书,只能提供合法的证书才能打开页面:

如果没有提供证书将无法打开界面,效果如下:

功能配置过程
使用要求
如果要使用验证客户端证书的功能,一定要使用HTTPS协议。同时要有一个PKI体系用于生成用户证书,关于PKI体系介绍及证书生成,请参考前期的文章。
HAProxy配置
在HAProxy验证客户证书的场景中,必须使用HTTPS方式,因此在这个场景中,需要在HAProxy中使用两个证书:服务器证书;用户证书PKI体系的根证书,具体配置如下:
其它配置和普通场景HAProy的配置一样。
后端增强认证
一般场景下,客户端和HAProxy之间使用HTTPS传输,HAProxy和后端真实服务器之间使用HTTP传输,这就意味着后端服务器无法获取用户证书,所以需要HAProxy把用户证书的信息插入到http的头部中,由后端服务器处理这些信息。
根据上面的HAProxy配置,在http头部中会播入X-SSL-Client-Serial、X-SSL-Client-CN、X-SSL-Client-Verify三个字段:

后端程序可以根椐这些字段进行进一步的用户验证。
客户端证书导入
用户证书生成
根据前期文章生成用户私钥及证书后,使用OpenSSL工具把私钥及证书打包成p12格式(PKCS #12,用于将公钥证书、私钥及相关信息打包加密):
其中 newton.crt 最好包含完整证书链路,即从用户证书到根CA全部包含,格式如下:

因为p12文件包含用户的私钥,为保护私钥的安全,在打包的的过程中,需要输入p12文件的密码。
客户端证书导入
通过OpenSSL工具生成p12文件后,需要导入到浏览器中,用户浏览器向服务器提交证书验证。
在windows操作系统内,双击newton.p12文件,就可以进行证书导入,关键步骤如下:

因为p12文件有密码,所以在导入时需要输入密码:

在证书导入的过程中,一定要把证书保存到“个人”文件夹中:


导入完成后,就可以使用证书正常访问要求证书验证的网站。
2006

被折叠的 条评论
为什么被折叠?



