您的位置:首页 > 运维架构

openssl双向认证 (自签发证书实例)

2017-12-22 13:55 399 查看
基础知识[/u]
[/u]
SSL:Secure Socket Layer,安全套接字层,它位于TCP层与Application层之间。提供对Application数据的加密保护(密文),完整性保护(不被篡改)等安全服务,它缺省工作在TCP 443 端口,一般对HTTP加密,即俗称的HTTPS。

SSL双向认证具体过程

① 浏览器发送一个连接请求给安全服务器。

② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。

③ 客户浏览器检查服务器送过来的证书是否是由自己信赖的CA中心(如沃通CA)所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。

④ 接着客户浏览器比较证书里的消息,例如域名和公钥,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。

⑤ 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。

⑥ 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。

⑦ 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。

⑧ 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。

⑨ 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。

⑩ 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。

制作根证书
1. 生成CA私钥:ca.key (这个是信任的起点,根证书,所有其他的证书都要经过CA的私钥签名)

openssl genrsa -des3 -out ca.key 2048

2. 生成 CA根证书的公钥:ca.crt

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

制作服务端证书
1. 生成证服务端书私钥:server.pem

openssl genrsa -des3 -out server.pem 1024

生成无密码的服务端私钥:server.key

openssl rsa -in server.pem -out server.key

2. 生成服务端签发请求:server.csr

openssl req -new -key server.pem -out server.csr

4. 最后用CA证书给服务端证书进行签名

openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt

把ca.crt的内容追加到server.crt后面,因为有些浏览似乎不支持

cat ca.crt >> server.crt

制作客户端证书(跟制作服务端证书步骤一样)

1. 生成客户端证书私钥

openssl genrsa -des3 -out client.pem 2048

2. 生成客户端证书签发请求

openssl req -new -key client.pem -out client-req.csr

3. 用CA证书给客户端证书进行签名

openssl x509 -req -sha256 -in client-req.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out client.crt

客户端证书CRT转换为PKCS      #12格式(全称应该叫做 Personal Information Exchange,通常以 p12作为后缀)

openssl pkcs12 -export -clcerts -in client.crt -inkey client.pem -out chenbo.p12

nginx配置

server {

        listen       443;

        server_name  www.test.com;

        charset koi8-r;

        #access_log  logs/host.access.log  main;

        ssl on;   #开启ssl

        ssl_certificate /root/security/server.crt;      #服务端证书位置

        ssl_certificate_key /root/security/server.key;       #服务器私钥

        ssl_session_timeout 5m;       #session有效期,5分钟

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:-LOW:!aNULL:!eNULL;   #加密算法

        ssl_prefer_server_ciphers on;

        ssl_verify_client on;     #开启客户端验证

        ssl_client_certificate /root/security/ca.crt;        #CA证书用于验证客户端证书的合法性

        ssl_verify_depth 1;

以上实例通过本人测试验证没有问题,可以实现openssl双向认证的效果,此文档属于个人随笔文档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  openssl 实例 加密 安全