Jat001
2014-01-05 22:44:35 +08:00
我是这么做的:
1. 自签一个根 CA,私钥离线存储。
2. 用根 CA 再签两个中间 CA,分别用于客户端验证和服务器验证。严格设置 keyUsage、extendedKeyUsage 和 nsCertType。
3. 用两个中间 CA 分别签发客户端证书和服务器证书。服务器证书要带有完整的证书链。
4. 在本地信任根 CA。
5. 在服务器信任用于客户端验证的中间 CA。
这种方法我认为是比较安全的,因为根 CA 离线存储,中间 CA 也不存储在服务器上,只有服务器证书的密钥对和用于客户端验证的 CA 的公钥存储服务器上。用了这种验证方法后,我把一些程序自带的密码也去掉了。
我只用过 nginx,客户端发出请求后需要先验证,成功后才访问具体文件,不成功直接返回 400。而要想什么都不返回,这应该是不可能的,因为 http 状态码是由 RFC 2616 规范定义的,要么别用 http/https 协议,要么自己开发个 web 服务器。