超文本传输安全协议(Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

http协议缺点

1.对称加密和非对称加密

对称加密

ssl

明文数据在发送方经过加密算法加密发送给接收方,接收方收到密文在用密钥解密完成。发送方加密密钥和接收方解密密钥要相同,就是对称加密。

非对称加密

ssl

加密密钥和解密密钥不一样称为非对称加密(加密密钥称为公钥,解密密钥称为私钥)。

2.https加密协议原理

ssl

https同时用了对称加密和非对称加密。客户端发起ssl连接,服务向客户端返回公钥,客户端收到公钥,用公钥加密对称密码在发送个服务器(这个操作是非对称加密)。后面输出传输利用 对称加密来进行数据传输。

3.中间人攻击

ssl

针对SSL的中间人攻击方式主要有两类,分别是SSL劫持攻击和SSL剥离攻击

SSL劫持攻击

SSL劫持攻击即SSL证书欺骗攻击,攻击者为了获得HTTPS传输的明文数据,需要先将自己接入到客户端和目标网站之间;在传输过程中伪造服务器的证书,将服务器的公钥替换成自己的公钥,这样,中间人就可以得到明文传输带Key1、Key2和Pre-Master-Key,从而窃取客户端和服务端的通信数据 但是对于客户端来说,如果中间人伪造了证书,在校验证书过程中会提示证书错误,由用户选择继续操作还是返回,由于大多数用户的安全意识不强,会选择继续操作,此时,中间人就可以获取浏览器和服务器之间的通信数据

SSL剥离攻击

这种攻击方式也需要将攻击者设置为中间人,之后见HTTPS范文替换为HTTP返回给浏览器,而中间人和服务器之间仍然保持HTTPS服务器。由于HTTP是明文传输的,所以中间人可以获取客户端和服务器传输数据

4.证书和私钥的生成

注意:一般生成的文件放在/etc/nginx/ssl目录下,这是个好的习惯。

检查openssl

openssl version

输出OpenSSL 1.0.2k-fips 26 Jan 2017证明有openssl,如果没有需要安装

yum install openssl   #安装openssl
yum install openssl-devel  #安装openssl-devel

http_ssl_module

nginx -V

输出的编译参数有--with-http_ssl_module,nginx默认会编译进去,如果没有需要手动编译。

1.创建服务器证书密钥文件 server.key

openssl genrsa -des3 -out server.key 1024	

回车后输入密码,确认密码,自己随便写,但要记住。

2.创建服务器证书的申请文件 server.csr

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

输入的内容为:

Enter pass phrase for root.key:  #输入前面创建的密码 
Country Name (2 letter code) [XX]: #国家代号,中国输入CN 
State or Province Name (full name) []: #省的全名,拼音 ShangHai
Locality Name (eg, city) [Default City]: #市的全名,拼音 ShangHai
Organization Name (eg, company) [Default Company Ltd]: #公司英文名  MyCompany Corp
Organizational Unit Name (eg, section) []: #可以不输入 
Common Name (eg, your name or your server's hostname) []:  #服务器的域名 如:example.com ,www.example.com 要不要加www看你访问的时候需不需要加
Email Address []:  #你的邮箱
A challenge password []: #可以不输入 
An optional company name []:  #可以不输入 

最后完成后,输入ls查看在你当前文件/etc/nginx/ssl下有没有server.key,erver.csr这两个文件

3.备份一份服务器秘钥

cp server.key server.key.org

4.去除文件口令

openssl rsa -in server.key.org -out server.key

5.去除文件口令

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

5.配置教程

服务目录

/opt/app/code
|-index.html

/etc/nginx/conf.d
|-https.conf

index.html

<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<h1>欢迎来到瓦力博客</h1>
</body>
</html>

https.conf

server {
    listen       443;
    server_name  walidream.com www.walidream.com;
    
    ssl on; 
    ssl_certificate      /etc/nginx/ssl/server.crt;
    ssl_certificate_key  /etc/nginx/ssl/server.key;

    location / { 
       root /opt/app/code;
       index index.html;
    }   


    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }   
}

检测语法并重启

nginx -tc /etc/nginx/nginx.conf
nginx -s reload -c /etc/nginx/nginx.conf

注意: 小菜在这里用的是阿里云服务器,默认没有打开443端口。需要手动开放443端口

输入域名https://walidream.com

ssl

ssl

6.苹果证书配置

配置苹果要求的证书

查看openssl版本

openssl version

openssl的版本要在1.2,如果不在1.2版本以上,需要升级。新建updata.sh

# 升级openssl 脚本
cd /opt/download
wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
tar -zxvf openssl-1.0.2k.tar.gz
cd openssl-1.0.2k
./config --prefix=/usr/local/openssl 
make && make install 
mv /usr/bin/openssl   /usr/bin/openssl.OFF 
mv /usr/include/openssl   /usr/include/openssl.OFF 
ln -s   /usr/local/openssl/bin/openssl   /usr/bin/openssl 
ln -s   /usr/local/openssl/include/openssl   /usr/include/openssl 
echo "/usr/local/openssl/lib"  >>/etc/ld.so.conf 
ldconfig -v
openssl version -a

执行

sh updata.sh

查看当前使用自签证书的类型

openssl x509 -noout -text -in ./server.crt

ssl

7.直接通过key来生成证书

在上面证书和私钥的生成生成顺序先生成server.key–>在生成server.csr–>最后生成server.crt,我们将直接通过key来生成crt

openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

去掉密码保护码

openssl -in ./server.key -out ./server_nopas.key

8.https优化服务优化

激活keepalive长连接

打开长连接,一次连接如果可以处理更多的请求,建立握手次数变少,对服务端的性能提升

设置ssl session缓存

设置ssl session缓存把部分信息内容放在缓存,这样服务器处理资源cpu就会变少,就会变得更加快速

9.https配置session

server
 {
   listen       443;
   server_name  walidream.com;
   
   keepalive_timeout 100;
   
   ssl on;
   ssl_session_cache shared:SSL:10m;
   ssl_session_timeout 10m;
   
   ssl_certificate /etc/nginx/ssl_key/server.crt;
   ssl_certificate_key /etc/nginx/ssl_key/server.key;
   
   location / {
       root  /opt/app/code;
	   index index.html index.htm;
   }
}

nginx教程

nginx环境搭建(1) nginx基础知识(2) nginx的安装 卸载(3) nginx的基本参数使用(4) nginx分析默认配置(5) nginx 虚拟主机配置(6) nginx 日志(7) nginx 模块(8) nginx 访问控制(9) nginx 静态资源web服务(10) nginx 缓存(11) nginx 跨域访问(12) nginx 防盗链(13) nginx 正向,反向代理配置(14) nginx 代理缓存配置(15) nginx websocket(16) nginx fastcgi(17) nginx 搭建wordPress博客(18) nginx Fastcgi缓存配置(19) nginx uwsgi反向代理(20) nginx 负载均衡(21) [深] nginx 动静分离(22) [深] nginx rewrite规则(23) [深] nginx 平滑升级 添加模块 调试(24) [深] nginx secure_link_module模块(25) [深] nginx geoip_module模块(26) [深] nginx https(27) [深] nginx与lua的开发(28) [架] nginx常见问题(29) [架] nginx性能优化(30) [架] nginx 安全(31) [架] nginx 反向代理gRpc(32)