阿里云免费https证书及更替

服务器

介绍

让你的阿里云服务器和域名支持 HTTPS 协议,需要配置 SSL/TLS 证书,并将它应用到你的 Web 服务器(例如 Nginx) 注:原免费证书一次只能支持:3个月有效限期、3个月有效限期、3个月有效限期

# 步骤 1:获取阿里云 SSL/TLS 证书

1.1、登录并进入阿里云控制台。
1.2、在下方“域名与网络”点击全部域名,看到域名后点击管理 注册信息栏右侧开启SSL证书,右侧SSL证书管理
1.3、选择个人测试证书(原免费证书),立即购买,一次购买20个
1.4、创建证书,完后整列表就会多一条证书信息,等待审核(很快)
1.5、点击更多后,切换到“下载”tab,下面会让下载.crt.key 文件。选择你服务起的web服务的类型,本文为nginx服务举例

# 步骤 2:配置 Web 服务器(Nginx,假设你已经拥有 .crt 和 .key 证书文件)

2.1、将证书文件(通常是 .crt)和私钥文件(通常是 .key)上传到服务器上的一个目录中(例如/etc/nginx/ssl/)。
2.2、编辑 Nginx 配置文件,启用 HTTPS 支持。在 Nginx 的配置文件中(通常是 /etc/nginx/nginx.conf/etc/nginx/sites-available/default),找到对应的 server 配置块,并添加如下内容:

server {
    listen 80;
    server_name www.yourdomain.com yourdomain.com;
    return 301 https://$host$request_uri;  # 强制跳转到 HTTPS
}

server {
    listen 443 ssl;
    server_name www.yourdomain.com yourdomain.com;

    ssl_certificate /etc/nginx/ssl/yourdomain.crt;  # 替换为你的证书路径
    ssl_certificate_key /etc/nginx/ssl/yourdomain.key;  # 替换为你的私钥路径

    # 推荐的 SSL 配置
    ssl_protocols TLSv1.2 TLSv1.3;  # 支持的 TLS 协议版本
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;

    # 配置其他服务器设置
    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

2.3、配置完成后,重新加载 Nginx

# 步骤 3:测试 HTTPS 是否成功配置

3.1、访问你的网站,检查 URL 是否为 https://。
3.2、如果页面加载正常且没有警告,说明 HTTPS 配置成功。
3.3、可以使用 SSL Labs 的 SSL 测试工具 来检查你的网站 SSL 配置是否安全。

# 其他注意事项

1、免费证书只有3个月时间期限,3个月、3个月、3个月
2、确保 443 端口是开放的,以便 HTTPS 能够正常工作
3、3个月后需要再次创建证书并下载 .crt.key两个文件去替换服务器上对应路径下的文件

# // 此命令可以查看证书什么开始生效及到期时间  your-domain.com   替换成自己域名
echo | openssl s_client -connect your-domain.com:443 2>/dev/null | openssl x509 -noout -dates

# 输出 举例
notBefore=Mar 14 00:00:00 2025 GMT # notBefore:证书的开始有效时间,也就是从什么时候开始可以使用这个证书。在你的例子中是 2025年3月7日。
notAfter=Jun 12 23:59:59 2025 GMT # notAfter:证书的过期时间。你的证书将在 2025年6月4日 23:59:59 过期。
1
2
3
4
5
6

# 疑问:配置https协议,nginx为什么要配置443端口,不能写在80里面?

在 Nginx 配置 HTTPS 协议 时,必须单独为 443 端口 配置 SSL 相关参数,而不能仅仅把 SSL 配置写在 80 端口(HTTP) 配置块中。这是因为 HTTP 和 HTTPS 是不同的协议,它们分别对应不同的端口和通信方式:

  • HTTP 协议 默认使用 80 端口,它不加密通信。
  • HTTPS 协议 默认使用 443 端口,它是加密的 HTTP 通信,基于 SSL/TLS 协议。

为什么要单独配置 443 端口?

1、端口不同,协议不同

  • 80 端口(HTTP)和 443 端口(HTTPS)是由协议的标准定义的,它们分别代表不同类型的网络通信。
    • HTTP 协议通过 80 端口 进行无加密的通信。
    • HTTPS 协议通过 443 端口 进行加密的通信,依赖于 SSL/TLS 证书进行加密。

2、 SSL/TLS 只在 443 端口生效

  • SSL/TLS 加密是在 HTTPS 协议上进行的,只有当 Nginx 配置监听 443 端口 时,才能正确地处理和加密客户端与服务器之间的通信。
  • SSL/TLS 配置(如 ssl_certificatessl_certificate_key)只能在 443 端口server 块 中生效,而 80 端口server 块 并不支持 SSL 配置。

3、 重定向和协议分离

  • 为了实现 HTTPHTTPS 的重定向,你需要在 80 端口 上配置一个单独的 server 块,该块的作用是将所有 HTTP 请求重定向到 HTTPS。这与 443 端口的 SSL 配置 是分开的。
  • 80 端口:只负责接收普通的 HTTP 请求,并通过 return 301rewrite 将其重定向到 HTTPS。
  • 443 端口:配置 SSL 并接收加密的 HTTPS 请求,确保通信安全。
# HTTP (80 端口) 配置,负责重定向到 HTTPS
server {
    listen 80;
    server_name www.yourdomain.com yourdomain.com;  # 替换为你的域名
    return 301 https://$host$request_uri;  # 强制跳转到 HTTPS
}

# HTTPS (443 端口) 配置,处理加密的请求
server {
    listen 443 ssl;
    server_name www.yourdomain.com yourdomain.com;  # 替换为你的域名

    # SSL 配置
    ssl_certificate /etc/nginx/ssl/yourdomain.crt;  # 证书文件路径
    ssl_certificate_key /etc/nginx/ssl/yourdomain.key;  # 私钥文件路径
    ssl_trusted_certificate /etc/nginx/ssl/yourdomain.ca-bundle;  # CA 文件路径

    # 推荐的 SSL 配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    ssl_prefer_server_ciphers on;

    # 站点配置
    location / {
        root /var/www/html;
        index index.html index.htm;
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

为什么不能把 SSL 配置写在 80 端口?

  • 80 端口 是纯粹的 HTTP 流量,它不涉及加密,因此无法使用 SSL/TLS 加密协议。
  • 443 端口 是专门为 HTTPS 服务设计的,它是加密协议的入口,必须单独配置与 SSL/TLS 相关的参数。

# 总结

  • 80 端口 用于普通的 HTTP 流量,它不支持 SSL/TLS 配置。
  • 443 端口 用于加密的 HTTPS 流量,必须在该端口上配置 SSL/TLS 相关的证书和加密协议。
  • HTTPHTTPS 的重定向 需要在 80 端口的 server 块中配置,通过 return 301 强制所有 HTTP 请求跳转到 HTTPS。
Last Updated: 2025/3/14 16:04:26