lj6684
2014-10-30 09:06:25 +08:00
Server和Client端都有代表自己身份的证书,两边用相同的证书,从纯技术角度看应该可以成功完成认证建立SSL连接,因为证书都是来自同一个信任CA,并且都能通过有效性校验,但从使用角度来说这么做不合适
说多一点,涉及到X.509证书的使用要求,X.509数字证书记载的关键信息简单分类看有
1.证书的基本信息(证书持有者的名字,有效期...)基本信息是证书持有者最直观的表现,服务器证书的和客户端证书一般不一样;服务端证书的名字一般是应用域名,而客户端证书一般代表一个人或一台设备或一个组织。
2.证书的扩展信息
标识证书的使用范围和用法,其中就有说明此证书时用于服务端认证还是客户端认证,是否能用于SSL服务...,当带有扩展域的信息,应用就应该严格按照证书标识的用法去使用,但如果不带有相应扩展域的信息,代表通用证书,应用可以不去严格限制(你说的服务器证书也可以给客户端用,可能就是服务器证书中没明确标识这种用途限制)
3.证书对应的密钥
证书认证、加密过程时使用的非对称密钥
根据以上原理看,合理的方式是服务端,客户端各自持有自己的证书,保障在统一个信任体系下,就可以完成认证
服务端证书主题一般为应用/服务的域名,并且在扩展域中标识此证书只能用于SSL服务端认证
客户端证书主题一般为登陆用户的名字,并且在扩展域中标识此证书只能用于SSL客户端认证
[未来如果客户端使用双向SSL访问服务端的时候,在服务端能够从请求中提取到当前登陆的客户端证书信息,可以扩展来在服务端进一步进行用户身份认证或权限校验。]
上面才是标准SSL服务的证书使用规范,但如果应用要求不严格,或者对证书格式要求没有那么高,可以适当放宽要求,不加入那么多严格的限制