最新Https请求原理、OPenssl生成证书、nginx的https配置

Https请求原理

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取。所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。
HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。具体是如何进行加密,解密,验证的,且看下图。
最新Https请求原理、OPenssl生成证书、nginx的https配置_第1张图片
1. 客户端发起HTTPS请求

这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。

2. 服务端的配置

采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)。这套证书其实就是一对公钥和私钥。如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。

3. 传送证书

这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

4. 客户端解析证书

这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

5. 传送加密信息

这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

6. 服务段解密信息

服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

7. 传输加密后的信息

这部分信息是服务段用私钥加密后的信息,可以在客户端被还原

8. 客户端解密信息

客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。
最新Https请求原理、OPenssl生成证书、nginx的https配置_第2张图片

OPenssl生成

在window上安装openssl或者在虚拟机的ubuntu系统下直接进行生成。为确保执行没有问题,部分步骤操作完直接进行ls查看操作

1、openssl       //查看是否安装了openssl
2、openssl genrsa -des3 -out danfeng.key 2048   
//key的生成 , 创建私钥,过去的1024已经不适用了 
3、ls
4、openssl req -new -key danfeng.key -out danfeng.csr
//csr的生成方法需要依次输入国家,地区,组织,email。最重要的是有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。
5、ls
6、less danfeng.csr
//上面的步骤是服务器端私钥的生成和服务端证书的生成,下面是客户端的
7、openssl rsa -in danfeng.key -out danfeng_nopass.key
// 客户端私钥
8、openssl req -new -x509 -days 3650 -key danfeng_nopass.key -out danfeng.crt
//自签署证书
9、ls
10、less danfeng.crt

nginx的https配置

安装nginx ,找到conf文件夹,将openssl生成的 danfeng.crt和danfeng_nopass.key放在它下面,并找到nginx.conf文件,打开后进行如下修改。

  # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl                  on;//打开ssl
        ssl_certificate      danfeng.crt;//证书
        ssl_certificate_key  danfeng_nopass.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

你可能感兴趣的:(网络)