1.HTTPS基本概述
为什么需要使用HTTPS, 因为HTTP不安全。当我们使用http网站时,会遭到劫持和篡改,如果采用https协议,那么数据在传输过程中是加密的,所以黑客无法窃取或者篡改数据报文信息,同时也避免网站传输时信息泄露。那么我们在实现https时,需要了解ssl协议,但我们现在使用的更多的是TLS
加密协议。那么TLS是怎么保证明文消息被加密的呢?在OSI七层模型中,应用层是http 协议,那么在应用层协议之下,我们的表示层,是ssl协议所发挥作用的一层,它通过(握手、交换秘钥、告警、加密)等方式,使应用层http协议没有感知的情况下做到了数据的安全加密
2.HTTP与HTTPS的区别
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP的区别主要如下
1.https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用
2.http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4.http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
3.证书权威生成机构
那么在数据进行加密与解密过程中,如何确定双方的身份,此时就需要有一个权威机构来验证双方省份。那么这个权威机构则是CA 机构。那CA机构又是如何颁发证书
4.HTTPS全流程
5.HTTPS证书类型
DV证书 个人使用,免费
OV证书 中小企业使用(大部分)
EV证书 (巨行企业使用)
HTTPS证书购买选择
保护1个域名 www
保护5个域名 www images cdn test m
通配符域名 *.dmxsp.com 兼容www bbs blog … log url …..
HTTPS注意事项
Https不支持续费,证书到期需重新申请新并进行替换.
Https不支持三级域名解析,如:test.m.dmxsp.com
Https显示绿色:说明整个网站的url都是https的,并且都是安全的。
Https显示黄色:说明网站代码中有部分URL地址是http不安全协议的。
Https显示红色:要么证书是假的,要么证书已经过期。
6.HTTPS模块
ssl
Syntax | ssl on | off |
Default | ssl off; |
Context | http, server |
证书文件
Syntax | ssl_certificate file |
Default | — |
Context | http, server |
私钥文件
Syntax | ssl_certificate_key file |
Default | — |
Context | http, server |
7.Nginx单台实现HTTPS
环境准备
nginx必须有ssl模块
[root@web01 ~]$ nginx -V
–with-http_ssl_module
创建存放ssl证书的路径
[root@web01 ~]$ mkdir -p /etc/nginx/ssl_key
[root@web01 ~]$ cd /etc/nginx/ssl_key/
[root@web01 /etc/nginx/ssl_key]$
使用openssl命令充当CA权威机构创建证书(生产不使用此方式生成证书,不被互联网认可的黑户证书)
[root@web01 /etc/nginx/ssl_key]$ openssl genrsa -idea -out server.key 2048
Generating RSA private key, 2048 bit long modulus
………………………………………………………………………….+++
………………………..+++
e is 65537 (0x10001)
Enter pass phrase for server.key: #设置密码,最少4位
Verifying – Enter pass phrase for server.key: #重复输入
[root@web01 /etc/nginx/ssl_key]$ ll
total 4
-rw-r–r– 1 root root 1739 Dec 28 16:10 server.key
生成自签证书,同时去掉私钥的密码
[root@web01 /etc/nginx/ssl_key]$ openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
Generating a 2048 bit RSA private key
………………………………………………………..+++
……………..+++
writing new private key to ‘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) []:Beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:dmxsp
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server’s hostname) []:
Email Address []:
[root@web01 /etc/nginx/ssl_key]$ ll
total 8
-rw-r–r– 1 root root 1220 Dec 28 16:39 server.crt
-rw-r–r– 1 root root 1708 Dec 28 16:39 server.key
req:用于创建新的证书
new:表示创建的是新证书
x509:表示定义证书的格式为标准格式
key:表示调用的私钥文件信息
out:表示输出证书文件信息
days:表示证书的有效期
配置Nginx配置Https实例
[root@web01 ~]$ cat /etc/nginx/conf.d/ssl.dmxsp.com.conf
server {
listen 443 ssl ;
server_name ssl.dmxsp.com;
ssl_certificate /etc/nginx/ssl_key/server.crt;
ssl_certificate_key /etc/nginx/ssl_key/server.key;
root /code/ssl;
location / {
index index.html;
}
}
server {
listen 80 ;
}
浏览器地址栏输入 https://
##由于该证书非第三方权威机构颁发,而是我们自己签发的,所以浏览器会警告
http请求跳转https
[root@web01 ~]$ cat /etc/nginx/conf.d/ssl.dmxsp.com.conf
server {
listen 443 ssl ;
server_name ssl.dmxsp.com;
ssl_certificate /etc/nginx/ssl_key/server.crt;
ssl_certificate_key /etc/nginx/ssl_key/server.key;
root /code/ssl;
location / {
index index.html;
}
}
server {
listen 80 ;
server_name ssl.dmxsp.com;
#return 302 https://$http_host$request_uri;
rewrite ^(.*) https://$server_name$1 redirect;
}
8.Nginx集群实现HTTPS
环境准备
web
[root@web01 ~]$ hostname -I
10.0.0.45 172.16.1.45
[root@web02 ~]$ hostname -I
10.0.0.145 172.16.1.145
负载
[root@lb ~]$ hostname -I
10.0.0.63 172.16.1.63
配置后端两台web(01.02)节点监听80端口
[root@web01 ~]$ cat /etc/nginx/conf.d/ssl.dmxsp.com.conf
server {
listen 80 ;
server_name ssl.dmxsp.com;
root /code/ssl;
location / {
index index.html;
}
}
Nginx负载均衡配置文件
[root@lb ~]$ cat /etc/nginx/conf.d/ssl.dmxsp.com.conf
upstream ssl {
server 10.0.0.45:80;
server 10.0.0.145:80;
}
server {
listen 80;
server_name ssl.dmxsp.com;
rewrite ^(.*) https://$server_name$1 redirect;
}
server {
listen 443 ssl;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass http://ssl;
include proxy_params;
}
}
wordpress使用https
web01、02配置文件
[root@web01 ~]$ cat /etc/nginx/conf.d/blog.wordpress.com.conf
server {
listen 80;
server_name blog.wordpress.com;
root /code/wordpress;
location / {
index index.html index.php;
}
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
include fastcgi_params;
}
}
wordpress早期安装如果是使用http方式, 那开启https后会导致, wordpress出现加载或无法登陆问题
fastcgi_param HTTPS on;
负载配置文件
[root@lb ~]$ cat /etc/nginx/conf.d/blog.wordpress.com.conf
upstream wordpress {
server 10.0.0.45:80 max_fails=2 fail_timeout=10s;
}
upstream wordpress_jt {
server 10.0.0.145:80 max_fails=2 fail_timeout=10s;
}
server {
listen 80;
server_name blog.wordpress.com;
return 302 https://$http_host$request_uri ;
}
server {
listen 443 ssl;
server_name blog.wordpress.com;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass http://wordpress;
include proxy_params;
}
location ~ \.(jpg|png|bmp|jpeg|gif|ico|js|css|java|html|htm|gif)$ {
proxy_pass http://wordpress_jt;
include proxy_params;
}
}
9.https优化
keepalive_timeout 70;:开启 keepalived长连接 keepalive_timeout 设置长一些 70
ssl_protocolsTLSv1 TLSv1.1 TLSv1.2;:指定 tls版本
ssl_ciphersAES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;:指定可以用加密格式
ssl_session_cache shared:SSL:50m; 分配50MB的共享内存缓存,不同工作进程共享TLS会话信息
ssl_session_timeout 1h; :1小时过期
ssl_session_tickets off;:由于Nginx中尚未实现SSL session tickets,可以关闭
ssl_buffer_size 4k;:ssl_buffer_size 控制在发送数据时的 buffer 大小,默认情况下,缓冲区设置为16k,为了最大程度地减少TTFB(至第一个字节的时间),最好使用较小的值,这样TTFB可以节省大约30 – 50ms。
ssl_prefer_server_ciphers on;:更新更快的 Cipher放前面,这样延迟更小
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /path/to/full_chain.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
如果不启用 OCSP Stapling 的话,在用户连接你的服务器的时候,需要去验证证书,这个验证证书的时间不可控,我们开启OCSP Stapling后,可以省掉这一步