HTTPS (全称:Hypertext Transfer Protocol Secure),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。
申请证书
以阿里云为例。
如上图所示:可以选择购买付费证书,也可以选择申请免费证书。
这里我使用免费证书。
购买证书
证书购买完成。
证书申请
输入信息,提交审核。
验证信息,自动在域名控制台添加DNS解析记录。如下图:
很快就显示验证成功。
到此,我们的证书就申请成功了。
安装证书
下载证书
这里以Nginx为例:
下载完成后,把证书放在Nginx服务下面。
修改Nginx配置文件
内容如下:
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name <yourdomain>; #需要将<yourdomain>替换成证书绑定的域名。
#填写证书文件名称
ssl_certificate cert/<cert-file-name>.pem;
#填写证书私钥文件名称
ssl_certificate_key cert/<cert-file-name>.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
proxy_set_header X-Real-IP $remote_addr;
# 后端的Web服务器可以通过 X-Forwarded-For 获取用户真实 IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 获取真实的请求主机名
proxy_set_header Host $http_host;
# 标识该请求由 nginx 转发
proxy_set_header X-Nginx-Proxy true;
# 代理到本地的 3000 端口服务
proxy_pass http://127.0.0.1:3000;
}
}
server {
listen 80;
server_name <yourdomain>; #需要将yourdomain.com替换成证书绑定的域名。
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
}
修改完成,重新启动Nginx服务器。
浏览器访问域名,如下图所示,依然显示HTTPS协议。
到此,已完成了由HTTP协议到HTTPS协议的华丽转身。
参考资料
- https百度百科: baike.baidu.com/item/HTTPS/…
- 免费申请https证书:letsencrypt.org/zh-cn/