HTTP咱们已经熟悉了, 一个网址例如这样子 ,http://xxx.com ,传统的HTTP站点有一个很大安全隐患,就是所有和用户传输的信息 都是明文未经过加密这样子很容易就被截取到重要的信息,所以 HTTPS应运而生,那么什么又是HTTPS呢?简单的说 HTTPS就是安全版的HTTP啦, HTTPS是由 HTTP + SSL , 也就是在HTTP上又加了一层处理加密信息的模块 ,所以传输的数据都是加密后的数据,https协议原理又是怎么回事呢?
首先,客户端与服务器建立连接,各自生成不同的私钥和公钥。
服务器返给客户端一个公钥,然后客户端拿着这个公钥把要搜索的东西加密,称之为密文,并连并自己的公钥一起返回给服务器,服务器拿着自己的私钥解密密文,然后把响应到的数据用客户端的公钥加密,返回给客户端,客户端拿着自己的私钥解密密文,把数据呈现出来。
当然了, 具体的加密算法比较复杂 ,除非是专门搞安全加密的,不然不需要太细致去了解加密的具体流程。
我们只要知道,HTTPS为了让传送的数据加密,就必须依赖一种可以把数据加密解密 并且还可以保证 不同的用户使用不同的计算方法 ,保证每个用户的安全性即可。但是这里有一个问题了,就算一个网站保证了跟你之间的传输可以走 加密的模式, 但是 如果这个网站自身就是个钓鱼网站呢? 提供了加密解密又有什么意义,你的个人信息不还是一样泄露给它们了?所以这就有了一个信任关系的问题了,网站可以提供加密解密,并且还得是一个值得信任的网站才可以哦。这就有了另外的一个概念叫做证书,证书用于验证一个网站的合法性,通常只能由第三方机构来颁发,可是,这个“第三方机构”到底是在哪呢?是一个远端服务?不可能吧?如果是个远端服务,整个交互都会慢了。所以,这个第三方机构的验证功能只能放在客户端的本地了。当然了,我们在学习的过程中 ,没必要真的去购买一个证书,证书也是可以自签的哦
下面说下安装,编译好nginx ssl模块./configure --prefix=/usr/local/nginx --with-http_ssl_module,指定安装路径 , 指定启用SSL模块然后,make ; make install 即可。
接着生成秘钥,[root@server01 nginx]# mkdir conf/ssl ; cd conf/ssl
,生成CSR文件,openssl req -new -key server.key -out server.csr,创建服务器证书的申请文件 server.csr,
[root@server01 ssl]# openssl genrsa -des3 -out server.key 1024
[root@server01 ssl]# openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:BJ
Locality Name (eg, city) [Default City]:BJ
Organization Name (eg, company) [Default Company Ltd]:COMPANY
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:dami01.example.com
Email Address []:[email protected]

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

cp server.key server.key.org

生成证书文件server.crt,openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt,到此为止, 我们的证书生成完毕,接下来,我们还需要改动nginx的配置文件让我们的HTTPS可以正常运行起来,按照如下这样 , 我们新起一个server, 让它工作在默认的443端口(HTTPS默认端口)之后,再指定证书和密钥的位置,指定我们在生成证书中的hostname(server_name),
server {

listen 443;
ssl on;

ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;

server_name example.com;

location / {
   return 209;
}

}

[root@server01 nginx]# netstat -tnlp | grep 443
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 40603/nginx

[root@server01 nginx]# curl -k -I https://example.com/
HTTP/1.1 209
Server: nginx/1.14.1
Date: Thu, 29 July 2020 16:13:21 GMT
Content-Type: application/octet-stream
Content-Length: 0
Connection: keep-alive
这样, 我们的HTTPS站点 就建立成功啦 ^_^