http转https
一.http和https简介
-
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
-
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL,HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
二、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协议安全。
三、HTTPS的工作原理
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议。
http请求转为https请求
总的来说,https就是在发送数据时对数据一个加密操作,所以我这里采用RSA自己生成ssl证书,自己给自己授权,做一个测试使用,目的是更深刻的了解http和https的转换。
- 生成单向认证的https证书
1、在linux系统中安装nginx;会有两次要求输入密码,
2、在nginx安装目录下输入命令:mkdir ssl;
3、在ssl目录下创建文件:touch MyCompanyCA.cnf
2 并在配置文件输入以下内容:
并在配置文件输入以下内容:
[ req ]
distinguished_name = req_distinguished_name
x509_extensions = root_ca
[ req_distinguished_name ]
# 配置证书信息
countryName = CN (2 letter code)
countryName_min = 2
countryName_max = 2
stateOrProvinceName = SiChuan
localityName = ChengDu
0.organizationName = Mycompany
organizationalUnitName = technology
commonName = develop
commonName_max = 64
emailAddress = xxxxxxxx@gmail.com
emailAddress_max = 64
[ root_ca ]
basicConstraints = critical, CA:true
3、继续创建文件:touch MyCompanyLocalhost.ext
并在文件中输入以下内容:
subjectAltName = @alt_names
extendedKeyUsage = serverAuth
[alt_names]
# 域名,如有多个用DNS.2,DNS.3…来增加
DNS.2=你的域名
# IP地址
IP.1 = 你的ip
4、保存以上2个文件,然后输入以下脚本:
openssl req -x509 -newkey rsa:2048 -out MyCompanyCA.cer -outform PEM -keyout MyCompanyCA.pvk -days 10000 -verbose -config MyCompanyCA.cnf -nodes -sha256 -subj “/CN=company name CA”
openssl req -newkey rsa:2048 -keyout MyCompanyLocalhost.pvk -out MyCompanyLocalhost.req -subj /CN=115.29.139.81 -sha256 -nodes
openssl x509 -req -CA MyCompanyCA.cer -CAkey MyCompanyCA.pvk -in MyCompanyLocalhost.req -out MyCompanyLocalhost.cer -days 10000 -extfile MyCompanyLocalhost.ext -sha256 -set_serial 0x1111
#后端访问地址
upstream music{
#ip_hash;
server 192.168.66.129:8000 weight=1 max_fails=2 fail_timeout=30s;
}
server{
listen 8080 ssl;
server_name 192.168.66.129;
root /usr/local/wangbo/social_art_level_exam/frontend/build;
ssl_certificate /usr/local/nginx/ssl/MyCompanyLocalhost.cer; #加载ssl证书
ssl_certificate_key /usr/local/nginx/ssl/MyCompanyLocalhost.pvk; #加载ssl证书
location /music/ {
proxy_pass https://192.168.66.129:9090;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Max-Age 3600;
add_header Access-Control-Allow-Credentials true;
add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
if ($request_method = OPTIONS ) {
return 200;
}
proxy_redirect default;
}
}
server {
listen 9090 ssl;
server_name 192.168.66.129;
ssl_certificate /usr/local/nginx/ssl/MyCompanyLocalhost.cer;
ssl_certificate_key /usr/local/nginx/ssl/MyCompanyLocalhost.pvk;
location / {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
return 200;
}
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host 192.168.66.129;
proxy_set_header X-Protocol https;
proxy_http_version 1.1;
proxy_buffering off;
proxy_ssl_server_name on;
proxy_pass http://music;
expires -1;
}
}
重点:
- 首先需要给nginx安装ssl模块,具体自行百度
- 前台是静态页面。后台是启动了服务端口号是8000,让nginx开放2个端口,其中8080去监听前段做一个页面访问,9090监听后端api,目的是为了通过ssl,用https访问
项目我再用前后端分离,nginx做反向代理访问,
启动nginx,会监听8080端口,然后回去访问root 对应目录下的静态页面,页面中存在一个总路由/music ,
意思就是所有以/music后面访问的路径都被拦截到,将请求代理到192.168.66.129:9090,nginx监听到了9090端口,代理到8000后台api从而完成https访问