https的简单介绍和nginx搭建

一、https简介

简单的说,https就是http的基础上增加ssl/tsl,其中tsl是ssl的升级版协议名称,现在用的大部分都已经是tsl协议了。这里不深究ssl/tsl这个协议了,深究也不会哈,

二、https涉及到的常用加密算法

1.对称加密算法

加密与解密秘钥相同,算法具体的实现这里不做介绍

des(data 已经不安全了) ,3des(des的加强版,兼容des)

aes(advanced 128位,192位,256位)推荐使用

2.非对称加密算法

rsa(名字来自于三个发明开发者的姓氏)

3.单向散列函数

MD5(message digest)

SHA-1 SHA-2(使用最多)

三、消息认证

消息认证码mac(message authenticaation code)确认完整性并进行认证的技术,实现散列函数+对称加密,通信时会将消息和mac码都发送,验证收到的mac码和本地生产的mac码是否相同来确认消息的完整性和认证。但是没有第三方认证,存在抵赖,一方否认。还有就是秘钥分发困难

四、数字签名与CA证书

解决了向大家告诉我是谁的问题,利用到了非对称加密中的私钥来证明自己,大家可以使用公钥来解析,也就是利用了私钥加密来证明了自己,而公钥解密就不可否认了,但是这里公钥可能变中间者替换,从而导致整个消息被替换,于是产生了公钥与域名绑定绑定的CA证书,CA证书是实现https通信的基础,CA就是解决你就是你的问题,其实自己可以实现自己证明自己,只不过操作系统和浏览器不认识,所有的被信任的CA证书都是根证书,或者根证书信任的子证书,而且还是花钱的。CA也叫证书授权中心

五、自己生成证书与部署nginx

都知道ssl/tsl是协议,是一种规则,具体到软件上可以是openssl,下面就是利用openssl工具在linux生成自己颁发的证书

命令行敲入 openssl进入openssl模式

1.生成非对称秘钥对,公钥的信息是保存在私钥里面的,随后会让你输入密码并确定密码

genrsa -des3 -out server.key 2048  这里使用的2048位rsa算法生成私钥比对私钥进行3des加密,也就是说生成的秘钥是加密过的,

2.生成CSR(证书签名请求),这个是包装自己的私钥一遍向CA机构发送,这是要输入自己网站的信息,根据提示一步步填

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

3.为避免生成的server.key使用时反复输入密码,这里解密出来

   rsa -in server.key -out server.key

4.生成自签名证书,server.crt就是自己生成的证书

 x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

5.nginx的配置,这里只展示nginx https的配置


# Settings for a TLS enabled server.

    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        ssl_certificate "/etc/pki/nginx/server.crt";
        ssl_certificate_key "/etc/pki/nginx/server.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        }
        location /avatar {
            expires 24h;
            root /my/project/img;
        }
        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

其中ssl_certificate 和ssl_certificate_key 分别是证书的位置和私钥的位置,此时就可以实现https协议访问了,但是浏览器会提示证书无效之类的警告。一直忽略也可以实现https通信,

六、使用wireShark抓包工具对同一个接口不同协议交互时的区别

wireShark与fiddler抓包原理不一样,wireShark是抓网卡,fiddler是软代理

1.http请求时,可以看到tcp的三次握手和四次挥手,而且http是明文的

2.https请求时,依然有tcp的三次握手和四次挥手(截图只展示了一部分),但是没有了http协议 而是TLSV1.2协议,https协议体现是在浏览器认识这个协议,其实使用TSL通信的,如果用在邮件上也可使用ssl/tsl,则发送的邮件也是加密的

只简要拿出tls协议的部分,b为浏览器,s为客户端,我的理解是先商量一下咱俩都支持加密吗,对应到端口也就是两台机器上的进程程序,浏览器得至服务器支持加密,把秘钥发给服务器,并以后发送的application data我都是加密了的,服务收到了秘钥,并用秘钥加密,同样的方式也将application data的数据加密,这个秘钥是客户端生成的。

1.b-->s Client Hello 

2.s-->b Server Hello

3.b-->s Client Key Exchange,change cipher spec,Encrypted Handshake message 

4.b-->s Application Data

5.b-->s Application Data

6.s-->b New Session Ticket,Change Cipher spec,Encrypted Handshake Message

7.s-->b  Application Data

8.s--b> Application Data

9.s-->b  Application Data

10.s--b> Application Data

11.s--b> Application Data

12.s--b> Encrypted Alert 

七.使用正式的证书

在阿里云上可以申请免费的CA证书,而且是可信的,但是也要走购买ssl证书流程,只不过支付的是0元,是Symantec厂商生成的,下载证书后,将.pem的证书代替第五部.crt的证书,将.key的私钥代替.key的文件,nginx -s reload即可。

八、https总结

https的传输过程应用到了对称加密,非对称加密,单向散列函数加密技术,数据传输中其实使用的是对称加密,且秘钥有客户端生成,而ca证书是解决公钥的可信度问题,使用可信的公钥对自己生成的密码加密进行分发到服务器,因为私钥只有服务器有,所以这个密码只有服务器可以获取,完成了对称加密密码分发困难的解决。但是https也不是绝对安全的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章