HTTPS
SSL证书 签发 和 应用
- SSL证书服务(Alibaba Cloud SSL Certificates Service)是由阿里云联合中国及中国以外地域多家数字证书颁发机构( CA,Certificate Authority),在阿里云平台上直接提供的数字证书申请和部署服务。SSL证书服务帮助您以最小的成本将服务从HTTP转换成HTTPS,实现网站或移动应用的身份验证和数据加密传输。
# 阿里云SSL证书和HTTPS的关系
- 可以通过阿里云SSL证书服务购买SSL证书,并向CA中心提交证书申请,直到证书成功签发;您将已签发的证书安装到Web服务器后,则Web服务将会通过HTTPS加密协议来传输数据。
- HTTPS加密传输协议可激活客户端浏览器到网站服务器之间的SSL加密通道(SSL协议),从而实现高强度双向加密传输,防止传输数据被泄露或篡改。
# 为什么网站需要HTTPS
- 防劫持、防篡改、防监听:使用SSL证书实现网站的HTTPS化,可以对网站用户与网站间的交互访问全链路数据进行加密,从而实现传输数据的防劫持、防篡改、防监听。
- 提升网站的搜索排名:使用SSL证书实现网站的HTTPS化后,网站在搜索引擎显示结果中的排名将会更高,有利于提升网站的搜索排名和站点的可信度。
- 提升网站的访问流量:使用SSL证书实现网站的HTTPS化,可以强化网站在用户侧的身份可信程度,使网站用户能更安心地访问网站,提升网站的访问流量。
证书购买
# 1. 支持选购的证书类型
- 阿里云SSL证书服务支持购买DV证书、OV证书和EV证书三种类型的证书。不同类型证书的安全性和适用的网站类型不同,具体如下所示。
证书申请
- 购买SSL证书订单实例后,您还必须通过SSL证书服务向CA中心提交证书申请。只有当CA中心审核通过您的证书申请后,才会为您签发证书,然后您才可以将已签发的证书安装到服务器,实现网站HTTPS。
- 参考文档:https://help.aliyun.com/document_detail/98574.htm?spm=a2c4g.11186623.2.10.11743147W9oWm9#concept-wxz-3xn-yfb)
证书安装
- 通过SSL证书服务购买和签发证书后,可以将已签发的证书下载并安装到Nginx(或Tengine)服务器上。
- 下载证书到本地
# 1. 登录SSL证书控制台。
# 2. 定位到要下载的证书,单击操作列下的下载。
# 3. 在证书下载页面,定位到Nginx服务器,单击操作列下的下载。该操作会将Nginx服务器证书压缩包下载到本地,并保存在浏览器的默认下载位置。
# 4. 打开浏览器的默认下载位置,解压已下载的Nginx证书压缩包文件。解压后您将会获得以下文件:
- 在Nginx独立服务器上安装证书
登录Nginx服务器
使用远程登录工具(例如,PuTTY、Xshell)登录服务器。
执行以下命令,在Nginx安装目录(默认为/usr/local/nginx/conf)下创建一个用于存放证书的目录(命名为cert)。
# 进入Nginx默认安装目录。如果您修改过默认安装目录,请根据实际配置进行调整。
$ cd /usr/local/nginx/conf
# 建证书目录,命名为cert。
$ mkdir cert
- 使用远程登录工具(例如,PuTTY、Xshell)附带的本地文件上传功能,将本地证书文件和密钥文件上传到Nginx服务器的证书目录(示例中为/usr/local/nginx/conf/cert)。
- 编辑Nginx配置文件(nginx.conf),修改与证书相关的配置内容。
# 备份配置文件
# nginx.conf默认保存在/usr/local/nginx/conf目录下。如果您修改过nginx.conf的位置,请/usr/local/nginx/conf/nginx.conf替换成修改后的位置。
$ cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
# 打开配置文件
$ vi /usr/local/nginx/conf/nginx.conf
- 修改nginx.conf文件
nginx.conf:
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
root html;
index index.html index.htm;
ssl_certificate cert/cert-file-name.pem; #需要将cert-file-name.pem替换成已上传的证书文件的名称。
ssl_certificate_key cert/cert-file-name.key; #需要将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 / {
root html; #站点目录。
index index.html index.htm;
}
}
nginx.conf
# HTTPS server
#
server {
listen 443 ssl;
server_name xxx.com;
ssl_certificate cert/xxx.pem;
ssl_certificate_key cert/xxx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
# 这是用于转发 其他端口的 如, IP:端口 进行访问时可以通过设置代理变成 IP 访问
location / {
proxy_pass http://127.0.0.1:65432;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}