赞
踩
我用具体的操作进行分析。你也可以操作一下
我们在浏览器的地址栏中输入一个域名 taobao.com(不要按回车), 然后你将地址栏 ctrl+a 进行复制,粘贴到文本文件后,发现是http://taobao.com/ ,这是浏览器的默认解析,为其封装http协议和 80端口号。
那https呢,它是在服务端配置的。(不然浏览器不会出现https)
举个例子:
以Nginx服务器为例,它是监听80端口,等待请求的访问,在监听的80端口上设置url重定向,指向监听端口为443的https协议的网站, 这样浏览器就返回的是 https协议。
- server {
- listen 80; // 监听80
- rewrite ^(.*)$ https://$host$1 permanent; // 切换https
- access_log logs/host.access.log main;
- location / {
- #root /var/local/www; // 此处的目录不在发挥作用
- #autoindex_format html;
- index index.html index.htm;
- }
- }
- server {
- listen 443 ssl; // 监听443端口
- access_log logs/host.log main;
- ssl_certificate cert/junjunyou.top.pem; // 配置公钥
- ssl_certificate_key cert/junjunyou.top.key; // 私钥
-
- ssl_session_cache shared:SSL:1m;
- ssl_session_timeout 5m;
-
- ssl_ciphers HIGH:!aNULL:!MD5; // 选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同
- ssl_prefer_server_ciphers on;
-
- location / {
- root /var/local/www; // 443端口所只想的目录
- index index.html index.htm;
- }
- }
浏览器中输入taobao.com , 并按下回车键,进行访问,此时,将地址栏中 内容进行拷贝,会发现已经成了 https://www.taobao.com/ 浏览器默认为 https封装443端口号。
然后将其证书(ssl_certificate)【他也将作为一个服务器公钥后续使用】传回给客户端,客户端先进行验证
如果验证失败,那么放弃请求
如果验证成功,那么随机生成一个随机数作为对称加密的密钥B。 使用服务器传回来的 证书对随机数进行加密,生成client key 发送给服务器
服务器使用私钥(ssl_certificate_key) 进行解密(非对称),得到客户端的的 对称加密密钥B
最后,浏览器和服务器之间使用密钥B作为对称加密密钥进行通信
其中使用了一次非对称加密。
后续使用对称加密和解密进行通信。 效率更高
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。