1
mengzhuo 2014-10-28 15:06:49 +08:00 1
还有重新生成签名的时候一定要记得revoke之前的
|
2
lj6684 2014-10-29 16:00:58 +08:00 1
SSL的证书通过OpenSSL(C工具)或者JDK(java工具)都可以生成
需要的证书主要分3类: 1. CA根证书(最终双方建立信任体系的源头,自签名证书) 2. SSL服务器证书(由CA根证书签发,给服务器或应用用,代表Server端身份) 3. SSL客户端证书(由CA根证书签发,双向SSL连接时需要客户端登陆时出示) SSL连接按认证级别分为2种: 1. 单项SSL,只需要服务端配置有SSL服务器证书即可,客户端无证书,客户端对服务器进行认证 2. 双向SSL,要求服务端有SSL证书,并且客户端访问时需要出示自己的SSL客户端证书,双方都会对对方的证书进行身份认证并且最终协商安全加密算法 |
3
lj6684 2014-10-29 16:02:04 +08:00
对Java使用SSL有经验,Nginx经验无,原理性的问题可以帮助解答
|
4
yueyoum OP @lj6684
感谢, 但我上网搜了很多openssl 生成证书的命令, 发现 其实 server证书 和 client 证书的生成是同一个命令。只是输出的文件不一样。 所以我后来 直接把 server证书给client用了, 用于server验证client, 这么做对吗? 如果不对, 那么正确方式应该如何呢? |
5
lj6684 2014-10-30 09:06:25 +08:00 1
Server和Client端都有代表自己身份的证书,两边用相同的证书,从纯技术角度看应该可以成功完成认证建立SSL连接,因为证书都是来自同一个信任CA,并且都能通过有效性校验,但从使用角度来说这么做不合适
说多一点,涉及到X.509证书的使用要求,X.509数字证书记载的关键信息简单分类看有 1.证书的基本信息(证书持有者的名字,有效期...)基本信息是证书持有者最直观的表现,服务器证书的和客户端证书一般不一样;服务端证书的名字一般是应用域名,而客户端证书一般代表一个人或一台设备或一个组织。 2.证书的扩展信息 标识证书的使用范围和用法,其中就有说明此证书时用于服务端认证还是客户端认证,是否能用于SSL服务...,当带有扩展域的信息,应用就应该严格按照证书标识的用法去使用,但如果不带有相应扩展域的信息,代表通用证书,应用可以不去严格限制(你说的服务器证书也可以给客户端用,可能就是服务器证书中没明确标识这种用途限制) 3.证书对应的密钥 证书认证、加密过程时使用的非对称密钥 根据以上原理看,合理的方式是服务端,客户端各自持有自己的证书,保障在统一个信任体系下,就可以完成认证 服务端证书主题一般为应用/服务的域名,并且在扩展域中标识此证书只能用于SSL服务端认证 客户端证书主题一般为登陆用户的名字,并且在扩展域中标识此证书只能用于SSL客户端认证 [未来如果客户端使用双向SSL访问服务端的时候,在服务端能够从请求中提取到当前登陆的客户端证书信息,可以扩展来在服务端进一步进行用户身份认证或权限校验。] 上面才是标准SSL服务的证书使用规范,但如果应用要求不严格,或者对证书格式要求没有那么高,可以适当放宽要求,不加入那么多严格的限制 |