如何将http访问改成https的安全访问 :
先了解预备知识:https和http有何区别?
(1)默认情况,http监听80端口,https监听443端口。想要通过https访问,需要开放443端口
(2)http是明文传输,https为加密传输(TLS/SSL),我需要一个带有签名的安全证书才能使用https访问
https为tls/ssl协议(tcp协议之上),使用混合加密方式
这里公钥/私钥(RSA加密算法等)用非对称加密,用于身份认证,对称加密RES单个私钥用于传输数据
在这个.pem证书文件中,公钥在服务器的SSL证书中,发给所有的访问者;私钥由我们自己保管
(3)数据传输(握手)过程【加密解密】:
访问网站后,服务端返回一个包含RSA公钥的ssl证书-->【浏览器验证证书成功后,提取出公钥】
浏览器生成一个随机密钥K用于传数据,然后用公钥加密这个K发送给服务器【这里加密K用的非对称加密RSA】
服务器用私钥解密,取到K【这里是非对称解密:RSA解密】,后续通信就用这个K
服务器<---->浏览器传数据,用对称加密解密
【加密/解密数据 = AES_encrypt(K, 原始数据/加密数据) 】
关键: 公钥/私钥都是服务器的,公钥由服务器公开,每个用户访问都生成一个自己的会话密钥K【传数据】用服务器的公钥加密。
服务器用自己的私钥解密公钥,获取会话内容。
所有人用的都是同一个公钥,但是会话密钥K不同【每个人的浏览器生成的】,别人是解密不了的,因为他们没有这个独立的会话密钥K
获取会话密钥是非对称加密/解密(RSA)
后续用这个密钥K通信传数据用 对称加密算法(AES),因为都是用这个K加密解密
那么怎么转换成https
第一步:申请安全证书,证书中有一套密钥,通过certd实现流水线证书申请:申请-部署服务器-重启
certd部署直接按照官网文档操作:快速开始 | 开源SSL证书管理工具,证书自动化申请部署,让你的网站证书永不过期
【这里需要docker镜像:先把docker 和 docker compose 装好在服务器,网络问题可以装一个vpn: v2raya 】
【用docker-compose 拉取镜像部署certd,需要阿里云的加速源:自己的账号下有独立的加速镜像,用这个可以成功拉取docker-compose】
第二步:启动自己的服务/镜像, 配置nginx,监听443端口并转发服务到指定端口号下
有了自己的域名,如何在一个域名下部署多个服务?
解决:在地址中添加前缀:xxx.yourdomain.top ,然后将请求转发到这个地址
nginx配置示例如下:
server {
listen 443 ssl;
server_name xxx.your-domain.top; # 前缀.你的域名
ssl_certificate /usr/share/nginx/html/cert/cert.pem; # 你地址下的证书
ssl_certificate_key /usr/share/nginx/html/cert/cert.key;
location / {
proxy_pass http://localhost:8090; # 容器主机
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
监听443端口,添加证书和密钥,并将请求转发到指定的端口下即可【注意在安全组放行指定端口】
这里需要开放泛域名:添加 访问地址 *.your-domain.top
certd配置
服务器DNS解析:
补充:http状态码和重定向
常见状态码:
成功响应 2XX 【200 OK,204 成功但没有返回值,206 请求部分资源,返回请求的部分内容】
重定向 3xx【301 永久移动到新的URL(用新的url),临时移动,使用原有的url】
客户端错误响应 4XX【400 请求报文语法错误,401 需要认证或认证失败,403 请求被拒绝 , 404 找不到请求的资源】
服务器错误5XX【500 服务器处理发生错误 , 503 无法处理请求(服务器维护)】
301和302区别 301:永久重定向
Localcation字段为重定向后的位置;request URL字段是请求资源的旧位置
302:临时重定向 请求资源临时转移到某个新的url(适合这里设置过期时间防盗刷的场景)
只有在资源位置24到48小时内临时转移时,才可以使用302重定向
应用场景:用相对路径重定向到完整的路径,进行资源获取【OSS存储的文件等】