HTTPS部署
前期需要:域名(通过ICP备案)、阿里云ECS服务器(域名解析)
Author:Redamancy_Xun
步骤一:申请免费SSL证书
- 购买免费证书
- 每个阿里云个人或企业用户(以实名认证为准)每个自然年可以一次性申请20张免费证书(每个自然年仅限领取1次)
- 每一个免费证书的使用时长为3个月(不花钱升级),但是有20张可供给不同域名(不同服务器)
- 访问免费证书购买页
- 创建证书
- 登录数字证书管理服务控制台
- 在左侧导航栏,单击SSL 证书
- 在SSL证书页面,单击免费证书页签
- 在免费证书页签,单击创建证书
- 在证书申请面板,配置证书参数,选中快捷签发,单击提交审核
- 详细内容见申请免费DV单域名试用证书
- 证书审核
- 按照验证信息中的提示,完成域名所有权的验证,并单击验证。更多信息和常见报错,请参见域名所有权验证
- 注意:要根据步骤加入DNS解析,后客服自动签发证书
步骤二:申请免费SSL证书
-
下载SSL证书到本地
-
不同类型的服务器支持配置的SSL证书格式不同。数字证书管理服务提供了适用于各种服务器(例如,Nginx、Spring Boot、Apache Tomcat、Apache(httpd)、Internet Information Services)的SSL证书压缩包,可直接下载使用(无需手动转换SSL证书格式)
-
在左侧导航栏,单击SSL 证书
-
通过单击对应页签,选择要操作的SSL证书类型:
-
证书管理页签:表示操作付费版SSL证书
-
免费证书页签:表示操作免费版SSL证书
-
-
在SSL证书列表,定位到要下载的SSL证书,单击操作列下载
-
在证书下载面板,定位到目标服务器,单击操作列的下载(下载Nginx)
-
-
云服务器部署SSL证书
-
执行
nginx -t
,查看nginx的配置文件路径(下面用/etc/nginx/nginx.conf
为例) -
执行以下命令,在nginx目录下创建一个用于存放证书的目录
cd /etc/nginx #进入Nginx默认配置文件目录。该目录为手动编译安装Nginx时的默认目录,如果您修改过默认安装目录或使用其他方式安装,请根据实际配置调整。 mkdir cert #创建证书目录,命名为cert。
-
将证书文件和私钥文件上传到Nginx服务器的证书目录(
/etc/nginx/cert
) -
编辑Nginx配置文件nginx.conf,修改与证书相关的配置
a. 执行以下命令,打开配置文件
sudo vim /etc/nginx/nginx.conf
b. 在nginx.conf中定位到http块中的server属性配置(可能http里面找不到server块,正常,我第一次也这样,不影响)
c. 参考如下示例进行修改(直接在http块里面加进去就好)
server { #HTTPS的默认访问端口443。 #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。 #指定了服务器监听的端口为443,并启用了SSL/TLS支持。 listen 443 ssl; #填写证书绑定的域名(具体) server_name <yourdomain>; #填写证书文件绝对路径,将<cert-file-name>.pem替换为你实际的证书文件名 ssl_certificate cert/<cert-file-name>.pem; #填写证书私钥文件绝对路径,将<cert-file-name>.key替换为你实际的私钥文件名 ssl_certificate_key cert/<cert-file-name>.key; #配置SSL会话缓存,以提高性能 ssl_session_cache shared:SSL:1m; #指定SSL会话的超时时间 ssl_session_timeout 5m; #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置) #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。 #ssl_ciphers:这里配置了支持的加密套件。它列出了Nginx将使用的加密算法和密钥长度。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #ssl_protocols:指定允许的TLS协议版本。在这个例子中,允许TLSv1.1、TLSv1.2和TLSv1.3。TLSv1.0和SSLv3已被视为不安全,因此不在这里列出。 ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示优先使用服务端加密套件。默认开启 ssl_prefer_server_ciphers on; #这是一个基本的 Nginx location 块,用于指定网站的根目录和默认文件,/表示所有的请求都会经过这个location块 location / { #root /var/www/html;:这里指定了服务器的根目录为/var/www/html,这意味着当有请求访问根路径(/)时,Nginx会在/var/www/html目录下查找相应的文件来返回给客户端 root /var/www/html; #index index.html index.htm;:这一行指定了默认的文件名,如果客户端请求的是一个目录而非具体的文件,Nginx会尝试返回index.html或者index.htm文件,如果这两个文件都不存在,会返回一个目录列表或者404错误(如果没有启用目录列表功能)。 index index.html index.htm; } }
d. **可选:**设置HTTP请求自动跳转HTTPS(一样直接加进去就行)(放前面)
server { listen 80; #填写证书绑定的域名(具体) server_name <yourdomain>; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 rewrite ^(.*)$ https://$host$1; location / { index index.html index.htm; } }
e. 效果图:
f.完整代码展示:
http { ... ... server { listen 80; #填写证书绑定的域名 server_name www.redamancyxun.fun; #将所有HTTP请求通过rewrite指令重定向到HTTPS。 rewrite ^(.*)$ https://$host$1; location / { index index.html index.htm; } } server { #HTTPS的默认访问端口443。 #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。 listen 443 ssl; #填写证书绑定的域名 server_name www.redamancyxun.fun; #填写证书文件绝对路径 ssl_certificate cert/redamancyxun.fun.pem; #填写证书私钥文件绝对路径 ssl_certificate_key cert/redamancyxun.fun.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置) #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示优先使用服务端加密套件。默认开启 ssl_prefer_server_ciphers on; location / { root /var/www/html; index index.html index.htm; } } }
-
执行以下命令,重启Nginx服务
sudo systemctl reload nginx #这会重新加载Nginx的配置文件,使任何更改生效,而不需要停止服务器或断开现有连接 sudo /etc/init.d/nginx start #启动Nginx服务
-
如果出现报错,输入下面命令查看详情
systemctl status nginx.service #查看详细的错误信息 journalctl -xe #查看日志以获取更多信息
之后,复制报错信息给AI~
步骤三:验证SSL证书是否配置成功
-
证书安装完成后,通过访问证书的绑定域名验证该证书是否安装成功
https://yourdomain #需要将yourdomain替换成证书绑定的域名
-
如果网页地址栏出现小锁标志,表示证书已经安装成功