Https安全协议的由来? 在实现 HTTPS协议前,咱们须要了解 SSL 协议,但其实咱们如今使用的更多的是 TLS 加密通信协议。 那么TLS是怎么保证实文消息被加密的呢?在OSI七层模型中,应用层是http协议,那么在应用层协议之下,咱们的表示层,也就是 SSL 协议所发挥做用的一层,它经过(握手、交换秘钥、告警、加密)等方式,使应用层 HTTP 协议没有感知的状况下作到了数据的安全加密。 php
#####Nginx配置示例(单向)html
server { listen 443 ssl; server_name www.oldxu.com; index index.html index.php; root /code; ssl on; ssl_certificate server.crt; ssl_certificate_key server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL; ssl_prefer_server_ciphers on; ... }
#####Nginx配置双向认证算法
单向认证,仅仅是客户端须要检验服务端证书是不是正确的,而服务端不会检验客户端证书是不是正确的。 双向认证,指客户端验证服务器端证书,而服务器也须要经过CA的公钥证书来验证客户端证书。windows
双向验证的过程: 1.客户端say hello 服务端 2.服务端将证书、公钥等发给客户端 3.客户端CA验证证书,成功继续、不成功弹出选择页面 4.客户端将本身的证书和公钥发送给服务端 5.服务端验证客户端证书,如不经过直接断开链接 6.客户端告知服务端所支持的加密算法 7.服务端选择最高级别加密算法使用客户端公钥加密后发送给客户端 8.客户端收到后使用私钥解密并生成随机对称密钥key,使用服务端公钥加密发送给服务端 9.服务端使用私钥解密,获取对称密钥key 10.后续客户端与服务端使用该密钥key进行加密通讯浏览器
#####服务端操做 server { listen 443 ssl; server_name www.oldxu.com; index index.html index.php; root /code; ssl on; ssl_certificate server.crt; ssl_certificate_key server.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!eNULL; ssl_prefer_server_ciphers on; ssl_client_certificate ca.crt; //这里的ca.crt是根证书公钥文件 ssl_verify_client on; ... } #####客户端(浏览器)操做 若是不进行如下操做,浏览器会出现400错误。400 Bad Request(No required SSL certificate was sent) # cd /etc/pki/ca_test/client # openssl genrsa -out client.key //生成私钥文件 # openssl req -new -key client.key -out client.csr //生成请求文件,填写信息须要和ca.csr中的Organization Name保持一致 # openssl ca -in client.csr -cert /etc/pki/ca_test/root/ca.crt -keyfile /etc/pki/ca_test/root/ca.key -out client.crt -days 3650 //签名client.csr, 生成client.crt,此步若是出现 #1.将client.key转换为pfx(p12)格式 # cd /etc/pki/ca_test/client # openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx //这一步须要输入一个自定义密码,一会在windows上安装的时候要用到,须要记一下。 #2.将client.pfx拷贝到windows下,双击便可安装。