跳到主要内容

1、使用Certbot签发免费ssl泛域名证书

实战:使用Certbot签发免费ssl泛域名证书(主域名及其它子域名共用同一套证书)-2024.8.4(成功测试)

image-20240804094049959

目录

[toc]

版权声明

本着开源共享、共同学习的精神:

本文是在 博主Ruyu 文章:《Ruyu-Blog 博客升级HTTPS》https://www.kuailemao.xyz/article/49 基础上增加了自己实践过程的一些细节,转载无需和我联系,但请注明文章来源。如果侵权之处,请联系博主进行删除,谢谢~

强烈推荐:

博主Ruyu

Ruyu-Blog开源博客gitee地址:https://gitee.com/kuailemao/ruyu-blog

Ruyu-Blog开源博客网站地址:https://www.kuailemao.xyz/

image-20240804154704039

image-20240804154737946

背景

原来自己部署的ruyu-blog博客都是https,浏览器一直提示不安全。刚好伟大的群主也发布了网站升级https的教程,这里就跟着一起做了升级。

我将自己所有网站都进行了子域名的划分,全部使用同一个证书(泛域名证书),非常方便。

通过子域名的配置,自己网站各模块内容更加细化,nice。

另外,此文章说明了如何给自己站点配置子域名方案:

1、在域名解析那里添加自己的子域名解析

2、nginx里配置子域名配置

3、验证

前文

域名定义

image-20240802193419872

什么叫主域名/子域名

onedayxyy.cnnas.onedayxyy.cn 这两个域名的主要区别在于它们的级别和可能指向的服务。

  1. 顶级域名(TLD)和二级域名(SLD):

    • onedayxyy.cn: 这个域名是一个二级域名。.cn 是国家顶级域名(ccTLD),代表中国,而 onedayxyy 是在 .cn 下注册的二级域名。一般来说,这样的域名用于代表公司、组织或个人的主要网络地址。
  2. 子域名:

    • nas.onedayxyy.cn: 这个域名是 onedayxyy.cn子域名。子域名通常用于组织主域名下面的不同服务或内容。在这个例子中,nas 可能表示网络附加存储(Network Attached Storage),这意味着这个子域名可能指向与存储相关的服务或网站部分。

使用场景区别:

  • 访问服务: 访问 onedayxyy.cn 通常会带你到该组织的主页或主要服务页面,而访问 nas.onedayxyy.cn 可能会带你到专门的网络存储服务或提供特定功能的页面。

  • 配置和管理: 在域名系统(DNS)管理上,你可以为每个子域名配置不同的记录,这意味着 nas.onedayxyy.cn 可以指向一个不同的IP地址,或者使用不同的DNS记录,比如为了负载均衡、地理位置服务等。

在实际应用中,子域名非常有用,**它允许域名所有者创建特定的服务或分类内容,而不需要为每个服务注册新的域名。**这既减少了成本,也使得域名管理更加集中和方便。

==什么叫子域名==

域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、主域名、子域名等。

image-20240606112050930

举例:

==为什么要设置子域名==

  1. 因为一个主域名可以设置出不同的子域名,所以能够便于用户将不同的子域名应用到不同的业务中。

    例如主域名是aliyun.com,开发者则可以设置子域名api.aliyun.com为接口业务使用,子域名 pay.aliyun.com为支付系统使用。

  2. 实现访问者按照用户指定的子域名进行访问。

    例如主域名是aliyun.com,开发者设置子域名为www.aliyun.comapi.aliyun.com后, 访问者输入这两个域名时就可以实现访问。

我的子域名规划

主域名:
起始页:onedayxyy.cn

子域名:
知识库:wiki.onedayxyy.cn
博客:blog.onedayxyy.cn
博客后台:blogadmin.onedayxyy.cn
博客存储:minio.onedayxyy.cn
相册:photo.onedayxyy.cn
音乐:music.onedayxyy.cn
说说:moments.onedayxyy.cn

子域名都是通过Nginx的反向代理来实现的。

image-20240804093854482

一些免费的证书提供商支持泛域名(通配符)证书

是的,有一些免费的证书提供商支持泛域名(通配符)证书。以下是一些常见的免费泛域名证书提供商:

Let's Encrypt

Let's Encrypt 是什么?

官网:https://letsencrypt.org/zh-cn/

Let's Encrypt 是一个免费的、自动化的、开放的证书颁发机构(Certificate Authority,CA),由 Internet Security Research Group (ISRG) 运营。其目标是通过提供免费和自动化的SSL/TLS证书,为全球网站提供更广泛的HTTPS支持,从而提升整个互联网的安全性。

使用 Let's Encrypt 的工具(如 Certbot)可以轻松申请和管理泛域名证书。

image-20240806070353215

Let's Encrypt 的特点
  1. 免费

    • Let's Encrypt 提供的 SSL/TLS 证书完全免费。这极大地降低了启用 HTTPS 的成本,使得任何网站都能负担得起安全加密的连接。
  2. 自动化

    • Let's Encrypt 通过其 ACME(Automatic Certificate Management Environment)协议实现了证书申请、颁发、安装和续期的自动化。这意味着用户可以通过工具(如 certbot)自动获得和更新证书,而不需要手动干预。
  3. 开放

    • Let's Encrypt 所有的代码和协议都是开源的,任何人都可以查看、使用和贡献。
  4. 简化

    • 传统的证书申请过程通常是复杂且繁琐的,而 Let's Encrypt 通过自动化工具简化了这一过程,使得任何人都可以轻松获取和管理证书。
  5. 安全性

    • Let's Encrypt 采用现代化的安全标准和实践,确保所提供证书的安全性和可靠性。
Let's Encrypt 的背景和目标

Let's Encrypt 由多个知名组织和公司支持,包括 Mozilla、思科、Akamai、电子前哨基金会(EFF)等。其主要目标是:

  • 提高互联网的安全性:通过推广 HTTPS,从而保护用户数据和隐私。
  • 促进 HTTPS 的普及:让更多的网站能够更容易地启用 HTTPS,推动全网加密。

综上,Let's Encrypt 通过提供免费、自动化和高效的 SSL/TLS 证书,大大降低了启用 HTTPS 的门槛,推动了互联网的安全和隐私保护。

acme.sh

说完 Let's Encrypt 后,还得再提到一个 acme.sh,它是用于从 Let‘s Encrypt 生成免费的证书,具备以下几个特点:

acme.sh地址:https://github.com/acmesh-official/acme.sh

  • 一个纯粹用 Shell(Unix shell) 语言编写的 ACME 协议客户端。

  • 完整的 ACME 协议实施。支持 ACME v1ACME v2 支持 ACME v2 通配符证书

  • 简单,功能强大且易于使用。你只需要 3 分钟就可以学习它。

  • Let's Encrypt 免费证书客户端最简单的 Shell 脚本。

  • 纯粹用 Shell 编写,不依赖于 python 或官方的 Let's Encrypt 客户端。

  • 只需一个脚本即可自动颁发,续订和安装证书。不需要 root/sudoer 访问权限。

  • 支持在 Docker 内使用,支持 IPv6

ZeroSSL

  • ZeroSSL 也提供了免费的泛域名证书,并且支持 ACME 协议,可以通过 Certbot 或其他 ACME 客户端进行申请。
  • 使用 ZeroSSL 的步骤与 Let's Encrypt 类似,只需在 Certbot 中指定 ZeroSSL 的服务器地址即可。

Cloudflare

  • 如果您使用 Cloudflare 作为您的 DNS 服务提供商,Cloudflare 提供了免费的 SSL/TLS 加密服务,包括泛域名证书。
  • 您只需在 Cloudflare 的控制面板中启用 SSL/TLS 加密,它会自动为您提供泛域名证书。

Certbot简介

关于certbot

image-20240803071422778

image-20240803071438908

官方部署方法

https://certbot.eff.org/instructions?ws=nginx&os=centosrhel7&tab=standard

image-20240803062215121

image-20240803062430406

指导手册

https://eff-certbot.readthedocs.io/en/latest/#

image-20240803072046374

部署手册(官网)

image-20240803071618051

环境

centos7.6
ecs服务器 (得拥有1台云服务器)

源码

不涉及

写在前面

本次是手动申请的,Cerbort如何自动签发证书/续签证书,待后续研究……

手动申请

因为我的项目使用的是Docker不是,自动申请/续签不太适用,所以使用手动申请,自动申请方法自己去看官方文档。

使用Certbot ACME客户端。

1、选择好对应的环境

https://certbot.eff.org/instructions?ws=nginx&os=centosrhel7&tab=standard

image-20240803062215121

2、安装 Certbot

yum install epel-release -y
yum install snapd -y
systemctl enable --now snapd.socket
ln -s /var/lib/snapd/snap /snap

snap install --classic certbot

3、准备 Certbot 命令

sudo ln -s /snap/bin/certbot /usr/bin/certbot

4、手动运行方式

#作者命令
certbot -d 域名(可以使用*.代表所有二级域名) --manual --config-dir config --work-dir work --logs-dir logs --preferred-challenges dns certonly


#自己命令(使用这个命令即可)
certbot -d onedayxyy.cn -d *.onedayxyy.cn --manual --config-dir config --work-dir work --logs-dir logs --preferred-challenges dns certonly

后续根据提示进行邮箱填写、DNS的TXT记录验证、等等……

然后会得到两个关键文件,注意看提示信息的路径。

image-20240803062653952


这里稍微记录下一些细节:

到域名解析上那里添加解析验证记录:(验证同意后,这个记录值建议删除)

image-20240804092124050

image-20240803100103524

[root@ruyub-blog-prod onedayxyy.cn]# pwd
/root/config/archive/onedayxyy.cn
[root@ruyub-blog-prod onedayxyy.cn]# ll
total 16
-rw-r--r-- 1 root root 1289 Aug 3 10:00 cert1.pem
-rw-r--r-- 1 root root 1566 Aug 3 10:00 chain1.pem
-rw-r--r-- 1 root root 2855 Aug 3 10:00 fullchain1.pem
-rw------- 1 root root 241 Aug 3 10:00 privkey1.pem
[root@ruyub-blog-prod onedayxyy.cn]#

以上生成好证书。

5、nginx配置(主域名&子域名,nginx.conf拆分)

再次把这2个证书对ecs里的来证书进行替换,测试:

image-20240804092250535

重启nginx:

nginx -s reload


这里我贴一下自己ecs里的nginx配置:

以下nginx.conf配置是生产力可用的配置,亲测有效!2024年8月4日

自己ecs已安装好nginx服务:

nginx.conf配置文件:

cat /etc/nginx/nginx.conf

user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

http {
gzip on; # 启用 gzip 压缩
gzip_vary on; # 根据请求中的 `Accept-Encoding` 响应头决定是否启用 gzip
gzip_proxied any; # 在所有代理请求中启用压缩
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 指定哪些类型的响应需要压缩
gzip_comp_level 5; # 压缩等级(范围是 1-9,高级别意味着更好的压缩但会消耗更多 CPU 资源)
gzip_min_length 256; # 只对超过给定长度的响应启用压缩
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
charset utf-8;

# Settings for a TLS enabled server.

}

ssl证书位置:

[root@docusaurus-wiki cert]#pwd
/etc/nginx/cert
[root@docusaurus-wiki cert]#ll
total 8
-rw-rw-rw- 1 root root 2855 Aug 3 10:00 fullchain1.pem
-rw-rw-rw- 1 root root 241 Aug 3 10:00 privkey1.pem
[root@docusaurus-wiki cert]#

conf.d目录下:

[root@docusaurus-wiki conf.d]#pwd
/etc/nginx/conf.d
[root@docusaurus-wiki conf.d]#ll
total 28
-rw-r--r-- 1 root root 5252 Aug 3 14:57 blog.conf
-rw-r--r-- 1 root root 2498 Aug 3 14:15 home.conf
-rw-r--r-- 1 root root 1749 Aug 3 10:27 moments.conf
-rw-r--r-- 1 root root 1370 Aug 3 10:26 music.conf
-rw-r--r-- 1 root root 1745 Aug 3 10:23 photo.conf
-rw-r--r-- 1 root root 1404 Aug 3 09:11 wiki.conf
[root@docusaurus-wiki conf.d]#

主域名配置文件:

[root@docusaurus-wiki conf.d]#cat home.conf 
server {
listen 80;
server_name onedayxyy.cn www.onedayxyy.cn;

#配置https重定向
return 301 https://$host$request_uri;
}


server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name onedayxyy.cn www.onedayxyy.cn;

root /root/home3.0;

location / {
index index.html index.htm;
}

# ……删除部分敏感信息
ssl_certificate "cert/fullchain1.pem";
ssl_certificate_key "cert/privkey1.pem";

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
#ssl_ciphers HIGH:!aNULL:!MD5;
#自定义设置使用的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;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

wiki配置文件:

[root@docusaurus-wiki conf.d]#cat wiki.conf 
server {
listen 80;
server_name wiki.onedayxyy.cn;
#配置https重定向
return 301 https://$host$request_uri;
}


server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name wiki.onedayxyy.cn;

root /root/rsync/rsync-docusaurus/build;

location / {
index index.html index.htm;
}

ssl_certificate "cert/fullchain1.pem";
ssl_certificate_key "cert/privkey1.pem";

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
#ssl_ciphers HIGH:!aNULL:!MD5;
#自定义设置使用的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;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

相册配置文件:

[root@docusaurus-wiki conf.d]#cat photo.conf 
server {
listen 80;
server_name photo.onedayxyy.cn;

#配置https重定向
return 301 https://$host$request_uri;
}


server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name photo.onedayxyy.cn;

#root /root/home3.0;

#location / {
# index index.html index.htm;
#}


location / {
proxy_pass http://47.100.215.163:8082/; # 实际的后台路径
client_max_body_size 100M;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

ssl_certificate "cert/fullchain1.pem";
ssl_certificate_key "cert/privkey1.pem";

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
#ssl_ciphers HIGH:!aNULL:!MD5;
#自定义设置使用的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;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

6、配置域名解析

来到自己域名云厂商配置位置,添加自己的子域名解析记录:

image-20240804093218325

对应我当前的信息如下:

主域名:
起始页:onedayxyy.cn

子域名:
知识库:wiki.onedayxyy.cn
博客:blog.onedayxyy.cn
博客后台:blogadmin.onedayxyy.cn
博客存储:minio.onedayxyy.cn
相册:photo.onedayxyy.cn
音乐:music.onedayxyy.cn
说说:moments.onedayxyy.cn

7、验证(完美)

https://onedayxyy.cn/

image-20240803100518511

https://wiki.onedayxyy.cn/

image-20240803100457546

https://blog.onedayxyy.cn/

image-20240804092002960

8、本人所有站点

起始页:

https://onedayxyy.cn/

image-20240804094001561

知识库:

https://wiki.onedayxyy.cn/

image-20240804094027266

博客:

https://blog.onedayxyy.cn/

image-20240804094049959

相册:

https://photo.onedayxyy.cn/

image-20240804094127219

音乐:

https://music.onedayxyy.cn/

image-20240804094148521

说说:

https://moments.onedayxyy.cn/

image-20240804094220242

注意点

① 切记一申请泛域名证书的命令方式👸

问题:我利用certbot申请的*.onedayxyy.cn泛域名证书,给子域名wiki.onedayxyy.cn都能正常使用,但是主域名onedayxyy.cn依然报不安全的证书,这个是为什么呢?

https://onedayxyy.cn/

image-20240803095048063

https://wiki.onedayxyy.cn/

image-20240803095104547

gpt回答:

当你使用 Certbot 申请泛域名证书(例如 *.onedayxyy.cn)时,该证书通常只覆盖通配符子域名,而不包括主域名(例如 onedayxyy.cn)。这是由于泛域名证书的定义方式所决定的。

解决方法

要确保主域名 onedayxyy.cn 也能使用安全的证书,你需要在申请证书时明确包含主域名。以下是具体步骤:

  1. 重新申请证书: 使用 Certbot 重新申请证书,并在命令中明确指定主域名和泛域名。例如:

    sudo certbot certonly --manual -d onedayxyy.cn -d *.onedayxyy.cn

    这样,Certbot 会生成一个包含主域名 onedayxyy.cn 和泛域名 *.onedayxyy.cn 的证书。

  2. 配置 Nginx: 确保你的 Nginx 配置文件中正确引用了新生成的证书。例如:

    server {
    listen 443 ssl;
    server_name onedayxyy.cn;

    ssl_certificate /etc/letsencrypt/live/onedayxyy.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/onedayxyy.cn/privkey.pem;

    # 其他配置...
    }

    server {
    listen 443 ssl;
    server_name wiki.onedayxyy.cn;

    ssl_certificate /etc/letsencrypt/live/onedayxyy.cn/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/onedayxyy.cn/privkey.pem;

    # 其他配置...
    }
  3. 验证和重新加载 Nginx: 在修改配置文件后,使用以下命令测试配置文件的语法是否正确:

    sudo nginx -t

    如果测试通过,使用以下命令重新加载 Nginx 配置:

    sudo systemctl reload nginx

通过以上步骤,你应该能够确保主域名 onedayxyy.cn 和泛域名 *.onedayxyy.cn 都能使用安全的证书。


自己重新再测试:

#有问题版
certbot -d *.onedayxyy.cn --manual --config-dir config --work-dir work --logs-dir logs --preferred-challenges dns certonly

#gpt回答版
sudo certbot certonly --manual -d onedayxyy.cn -d *.onedayxyy.cn


#正确版
certbot -d onedayxyy.cn -d *.onedayxyy.cn --manual --config-dir config --work-dir work --logs-dir logs --preferred-challenges dns certonly

之前生成的:

image-20240803095424151

先删除目录,再进行测试:

rm -rf config/

certbot -d onedayxyy.cn -d *.onedayxyy.cn --manual --config-dir config --work-dir work --logs-dir logs --preferred-challenges dns certonly

image-20240803100103524

[root@ruyub-blog-prod onedayxyy.cn]# pwd
/root/config/archive/onedayxyy.cn
[root@ruyub-blog-prod onedayxyy.cn]# ll
total 16
-rw-r--r-- 1 root root 1289 Aug 3 10:00 cert1.pem
-rw-r--r-- 1 root root 1566 Aug 3 10:00 chain1.pem
-rw-r--r-- 1 root root 2855 Aug 3 10:00 fullchain1.pem
-rw------- 1 root root 241 Aug 3 10:00 privkey1.pem
[root@ruyub-blog-prod onedayxyy.cn]#

再次把这2个证书进行替换,测试:

image-20240803100317552

重启nginx:

nginx -s reload

验证:(完美)

https://onedayxyy.cn/

image-20240803100518511

https://wiki.onedayxyy.cn/

image-20240803100457546

FAQ

Cerbort如何自动签发证书/续签证书?

使用 Let's Encrypt

使用 Let's Encrypt 获取和管理证书通常通过其官方客户端 certbot 或其他第三方 ACME 客户端来自动化处理。以下是使用 certbot 获取证书的一个简单示例:

sudo apt-get update
sudo apt-get install certbot

# For Nginx
sudo apt-get install python3-certbot-nginx
sudo certbot --nginx

# For Apache
sudo apt-get install python3-certbot-apache
sudo certbot --apache

在运行上述命令后,certbot 会引导你完成域名验证和证书安装的过程。

续期

Let's Encrypt 证书的默认有效期为 90 天,但 certbot 和其他 ACME 客户端通常会在证书到期前自动续期。通过设置定期的 cron job 或 systemd timer,可以自动化这一过程:

# Example cron job for automatic renewal
0 0,12 * * * root certbot renew --quiet

综上,Let's Encrypt 通过提供免费、自动化和高效的 SSL/TLS 证书,大大降低了启用 HTTPS 的门槛,推动了互联网的安全和隐私保护。

问题:https证书能同时给其子域名使用吗?2024.7.23(已解决)😊

背景

我的域名是onedayxyy.cn,然后我为他申请了一个https证书,且在nginx里已经配置了https证书。

但是我现在使用了wiki.onedayxyy.cn子域名来提供wiki服务,那么我想通过https://wiki.onedayxyy.cn访问,请问原来的https证书能直接配置给我的子域名wiki.onedayxyy.cn吗?

gpt回答

如果您已经为 onedayxyy.cn 申请了一个通配符证书(例如 *.onedayxyy.cn),那么这个证书将自动覆盖所有子域名,包括 wiki.onedayxyy.cn。通配符证书允许您在一个证书中保护主域名下的所有子域名。

如果您申请的是单域名证书(例如 onedayxyy.cn),那么这个证书只能用于 onedayxyy.cn 这个域名,而不能用于 wiki.onedayxyy.cn 这个子域名。在这种情况下,您需要为 wiki.onedayxyy.cn 单独申请一个新的证书。

以下是一些步骤来检查和配置您的证书:

  1. 检查证书类型

    • 打开您的证书文件(通常是 .crt.pem 文件)。
    • 查看证书的主题(Subject)字段,确认是否包含通配符(例如 *.onedayxyy.cn)。
  2. 配置 Nginx

    • 如果您拥有通配符证书,确保在 Nginx 配置中正确指定了证书文件和密钥文件的路径。
    • wiki.onedayxyy.cn 配置一个新的 server 块,并确保它指向相同的证书和密钥文件。

以下是一个示例 Nginx 配置:

server {
listen 80;
server_name wiki.onedayxyy.cn;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl;
server_name wiki.onedayxyy.cn;

ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;

# 其他配置...

location / {
# 您的 Wiki 服务配置
}
}

确保将 /path/to/your/certificate.crt/path/to/your/private.key 替换为实际的证书和密钥文件路径。

  1. 重启 Nginx

    • 保存配置文件并重启 Nginx 以应用更改:

      sudo systemctl restart nginx

通过以上步骤,您应该能够使用 https://wiki.onedayxyy.cn 访问您的 Wiki 服务,前提是您拥有适用于子域名的正确证书。

亲自验证

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name wiki.onedayxyy.cn;
root /root/rsync/rsync-docusaurus/build;

location / {
index index.html index.htm;
}

ssl_certificate "cert/www.onedayxyy.cn.pem";
ssl_certificate_key "cert/www.onedayxyy.cn.key";

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
#ssl_ciphers HIGH:!aNULL:!MD5;
#自定义设置使用的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;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

image-20240723063840622

但是,我查看pem文件,是一串代码啊,没那个(Subject)字段???

image-20240723214356261

但是,我查看pem文件,是一串代码啊,没那个(Subject)字段???

/etc/nginx/cert/www.onedayxyy.cn.pem

gpt回答:

openssl x509 -in /etc/nginx/cert/www.onedayxyy.cn.pem -text -noout

image-20240723064323650

以下是一个示例输出:

Certificate:
Data:
Version: 3 (0x2)
Serial Number:
04:00:00:00:00:01:23:45:67:89:ab:cd:ef
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=DigiCert SHA2 Secure Server CA, O=DigiCert Inc, C=US
Validity
Not Before: Sep 1 12:00:00 2023 GMT
Not After : Sep 1 12:00:00 2024 GMT
Subject: CN=*.onedayxyy.cn
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:bb:cc:dd:ee:ff:11:22:33:44:...

在这个输出中,Subject 字段会显示为 CN=*.onedayxyy.cn 或者 CN=onedayxyy.cn。如果您的证书是通配符证书,它将显示 CN=*.onedayxyy.cn

如果输出中 Subject 字段包含 *.onedayxyy.cn,那么您的证书是通配符证书,可以用于 wiki.onedayxyy.cn 子域名。如果是 CN=onedayxyy.cn,则只能用于主域名 onedayxyy.cn,不能用于子域名。

如果您仍然遇到问题,可以将证书文件的内容复制粘贴给我,我可以帮助您分析。好的

再次亲自测试:

可以发现,我之前申请的是一个单域名证书哦。🤣

openssl x509 -in /etc/nginx/cert/www.onedayxyy.cn.pem -text -noout

image-20240723064449424

结论

利用免费ssl证书生成工具生成泛域名证书,那么自己的额所有站点都可以用这一套证书了,很方便。

问题:cdn上我配置的是对主域名onedayxyy.cn加速,请问这个对其子域名wiki.onedayxyy.cn也会加速吗?-2024.7.24(已解决)

CDN(内容分发网络)的配置通常是针对具体的域名进行的。因此,如果您的 CDN 配置是针对主域名 onedayxyy.cn 进行加速,那么它并不会自动对子域名 wiki.onedayxyy.cn 进行加速。子域名需要单独配置才能享受 CDN 加速服务。

要为子域名 wiki.onedayxyy.cn 配置 CDN 加速,您需要在 CDN 服务提供商的管理控制台中进行以下操作:

  1. 添加子域名:在 CDN 服务提供商的管理控制台中,添加 wiki.onedayxyy.cn 作为一个新的加速域名。

  2. 配置子域名:为 wiki.onedayxyy.cn 配置相应的加速设置,包括缓存策略、源站配置、SSL证书等。

  3. 更新DNS记录:将 wiki.onedayxyy.cn 的 DNS 记录指向 CDN 提供的加速节点。这通常涉及将子域名的 CNAME 记录指向 CDN 提供的特定域名。

示例步骤(通用流程,具体步骤可能因 CDN 提供商而异)

  1. 登录 CDN 控制台:登录到您的 CDN 服务提供商的管理控制台。

  2. 添加加速域名

    • 找到添加加速域名的选项。
    • 输入 wiki.onedayxyy.cn 作为新的加速域名。
  3. 配置加速规则

    • 配置缓存策略,例如缓存时间、忽略缓存参数等。
    • 配置源站地址,即您的实际服务器地址。
    • 配置SSL证书,以确保HTTPS访问。
  4. 获取CNAME记录

    • 在配置完成后,CDN 提供商会为您提供一个 CNAME 记录。
    • 例如,wiki.onedayxyy.cn 可能需要指向 cdn123.example.com
  5. 更新DNS设置

    • 转到您的域名注册商或 DNS 服务提供商的控制台。
    • 添加或更新 wiki.onedayxyy.cn 的 CNAME 记录,使其指向 CDN 提供的 CNAME 地址。

注意事项

  • 独立配置:每个子域名需要独立配置 CDN 加速。这意味着每个子域名都需要单独添加到 CDN 控制台,并进行相应的设置。
  • SSL证书:确保为每个子域名配置 SSL 证书,以支持 HTTPS 访问。
  • 优化设置:根据子域名的不同用途,您可能需要配置不同的缓存策略和优化设置。

通过这些步骤,您可以确保 wiki.onedayxyy.cn 也能够通过 CDN 获得加速服务。、

总结

那目前我就不对https://wiki.onedayxyy.cn/子域名进行加速了,目前测试加载速度还行,如果后续实在加载太慢,我这里就做下cdn加速;

案例:子域名反向代理配置方法-2024.8.4(已解决)

http:

[root@docusaurus-wiki conf.d]#cat photo.conf 
server {
listen 80;
server_name photo.onedayxyy.cn;

location / {
proxy_pass http://47.100.215.163:8082/; # 实际的后台路径
client_max_body_size 100M;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

https:

[root@docusaurus-wiki conf.d]#cat photo.conf 
server {
listen 80;
server_name photo.onedayxyy.cn;

#配置https重定向
return 301 https://$host$request_uri;
}


server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name photo.onedayxyy.cn;

#root /root/home3.0;

#location / {
# index index.html index.htm;
#}


location / {
proxy_pass http://47.100.215.163:8082/; # 实际的后台路径
client_max_body_size 100M;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

ssl_certificate "cert/fullchain1.pem";
ssl_certificate_key "cert/privkey1.pem";

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
#ssl_ciphers HIGH:!aNULL:!MD5;
#自定义设置使用的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;

# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

案例:DNS解析配置方式

在云厂商域名dns解析那里需要的配置:

本次是在阿里云dns解析上配置的。

image-20240722221959360

记录类型:

image-20240722222017197

记录值:

image-20240722222058662

案例:利用cfgssl或openssl签发的https证书和cerbot签发的https证书有啥区别吗?(已解决)

利用 cfsslopensslcertbot 生成的 HTTPS 证书在安全性和功能上没有本质的区别,但它们在使用和管理上的细节有所不同。下面是对这几种工具的简单比较:

1. cfssl(Cloudflare's PKI/TLS toolkit)

优点:

  • 灵活性和可配置性cfssl 提供了一整套工具,用于生成和管理证书,包括生成证书请求(CSR)、签发证书、验证证书链等等。
  • 自动化和集成:适合 DevOps 环境,可以轻松与其他自动化工具集成。
  • 自签名证书:适用于内部工具或环境中需要自签名证书的情况。

缺点:

  • 学习曲线:对于新手来说,可能需要一些时间来熟悉和配置。

2. openssl

优点:

  • 通用性和广泛支持openssl 是一个非常强大的工具,几乎可以在任何操作系统上使用。
  • 灵活性:可以用来创建 CSR、签发自签名证书、转换证书格式等。
  • 细粒度控制:提供了非常多的选项和参数,允许用户详细配置证书属性。

缺点:

  • 复杂性:非常灵活但同时也很复杂,对于新手来说可能不太友好。
  • 手动管理:需要手动更新和管理证书,适合技术熟练的用户。

3. certbot(==Let's Encrypt 的官方客户端==)

优点:

  • 免费和自动化certbot 提供免费的 SSL/TLS 证书,并且可以自动化证书的获取和续期。
  • 简单易用:非常适合没有太多经验的用户,通过简单的命令即可获取和安装证书。
  • 广泛支持:支持多数常见的 Web 服务器,如 Apache、Nginx 等。

缺点:

  • 公有证书certbot 主要申请的是 Let's Encrypt 提供的公共信任的证书不能生成内部使用的自签名证书
  • 频率限制:Let's Encrypt 对证书申请有频率限制(例如,每个域名每周最多申请一定数量的证书)。

主要区别总结:

  1. 使用场景

    • certbot:主要用于快速获取和自动续期公共信任的 SSL/TLS 证书,适合需要快速部署 HTTPS 并保持证书自动更新的用户。
    • cfsslopenssl:适用于需要更高灵活性和定制化的场景,包括自签名证书、内部 CA 管理等。
  2. 操作复杂度

    • certbot:操作简单,非常适合新手和不需要复杂定制的用户。
    • cfsslopenssl:功能强大但操作相对复杂,适合有一定技术背景和定制需求的用户。
  3. 自动化

    • certbot:内置自动续期功能,适合需要长期维护的互联网业务。
    • cfsslopenssl:需要自行编写脚本或工具来实现自动化管理。
  4. 证书类型

    • certbot:主要用于获取 Let's Encrypt 提供的公共信任证书。

    • cfsslopenssl可以用于生成自签名证书和内部 CA 签发的证书。

综合来说:

如果你的需求是为公开访问的网站快速、自动化地获取和管理 HTTPS 证书,certbot 是首选工具;

而如果你需要更高的灵活性和定制化,特别是生成自签名证书或管理内部 CA,cfsslopenssl 会是更好的选择。

案例:30元实现AlphaSSL泛域名通配符证书一年及补全检查证书链完整性(收藏)

30元实现AlphaSSL泛域名通配符证书一年及补全检查证书链完整性

https://i4t.com/6054.html

==acme申请免费ssl证书(收藏,待实际测试)==

原文:蘑菇社区文章

本文由 简悦 SimpRead 转码, 原文地址 https://mp.weixin.qq.com/s/5s3QzneSE-wIQrAJumxHRA 蘑菇博客大佬

背景

大家好,我是 陌溪

这阵子疲于需求没顾得上蘑菇,没想到今天被群友疯狂 AT,说蘑菇打不开挂了。。打开网站一看,竟然原来申请的 https 证书全部到期了。。

同时,在邮箱里也看到了过期提醒的邮箱,只是那会没有关注过,没想到网站说挂就挂。

image-20240723102154768

证书到期了..

因为蘑菇上次已经全部切换到 HTTPS 了,所以如果证书到期,就会提醒证书不安全,然后无法访问,所以只能去云厂商那里重新申请 SSL 证书,没想到这次直接连免费的 SSL 证书也下架了,找了半天都没有找到入口。🤣

免费证书无了..

1、安装 acme.sh

首先第一步,安装 acme.sh

curl https://get.acme.sh | sh -s email=my@example.com

QQ_1721822216141

怎么拉取不下来。。。😒2024年7月24日

这个wegt却可以了:

wget -O -  https://get.acme.sh | sh -s email=my@example.com

image-20240724200048360

这个wegt也不行哦。。。。

image-20240724205227690

执行完成后,会在 home 目录生成一个 .acme.sh 的隐藏文件夹,使用下面命令,进入到文件夹中

# 进入目录
cd ~/.acme.sh/

可以看到,里面生成了配置,其中最重要的就是 acme.sh 这个命令

image-20240724200143653

安装 acme.sh

同时,自动为你创建 cronjob 每天 0:00 点自动检测所有的证书,如果快过期了, 需要更新, 则会自动更新证书。

执行 cronjob -l 命令,即可看到对应的定时任务

image-20240724200218098

[root@test .acme.sh]# crontab -l
4 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

定时任务

同时,小伙伴在执行 acme.sh 的时候,不用担心脚本会污染已有的系统的任何功能和文件,因为所有的修改都会统一维护在 ~/.acme.sh 文件夹

2、生成 SSL 证书

在生成证书的时候,需要去验证一下域名,一般常用的验证方式就是:DNS 验证,也就是在域名解析的地方配置一条 TXT 记录

这种方式的好处是, 你不需要任何服务器, 不需要任何公网 IP , 只需要 DNS 的解析记录即可完成验证.

坏处是,如果不同时配置 Automatic DNS API,使用这种方式 acme.sh 将无法自动更新证书,每次都需要手动再次重新解析验证域名所有权。

DNS 方式的真正强大之处在于可以使用域名解析商提供的 API 自动添加 TXT 记录完成验证.🤣

acme.sh 目前支持 阿里云 等数十种解析商的自动集成,以 阿里云 为例, 你需要先登录到 aliyun 账号,生成你的 AccessKey IDAccessKey Secret,然后就可以开始生成证书了。

步骤如下,为了一劳永逸,我们给 acme.sh 开放一个阿里云子账户,授予管理云解析 (DNS) 的权限。

打开,阿里云:访问控制 -> 身份管理 -> 用户,然后创建一个子用户

地址:https://ram.console.aliyun.com/users

创建子账户

然后随便输入名称,勾选 OpenAPI 调用访问,这样后续就可以被 acme.sh 通过 API 直接操作了

勾选 Open API 调用

自己的现象:

image-20240724200551441

	@1513838324386331.onaliyun.com

ruyublog

创建成功后,记得保存这个用户的 AccessKey IDAccessKey Secret,可以点击下载 CSV 文件下载到本地电脑。

我的现象:

image-20240724200657599

下载私钥

image-20240724200827776

然后再点击刚刚创建的用户,点击添加权限,选择:管理云解析 (DNS) 的权限

我的现象:

image-20240724201030753

添加权限

完成上述的所有操作后,回到服务器中,编辑环境变量文件

# 编辑文件
vim ~/.bashrc

添加刚刚获取的阿里云密钥

export Ali_Key="LTAI5tL227ukbD5rs7eehffs"
export Ali_Secret="iI6QuVxruRn1E4hAejEo6aVJeuIJeC"

image-20240724201341289

添加完成后,再使用 source 命令使其生效

source ~/.bashrc

下图是添加的位置:

配置 Key

3、安装证书

下面,我们为所有的域名,配置一下 DNS 解析,这里以 www 为例

acme.sh --issue --dns dns_ali -d www.onedayxyy.cn

执行完成后,证书就会自动生成了,同时我们在阿里云上,也会新增域名解析的记录,验证完成后也会自动删除对应的记录

巨人肩膀

其它

参考

https://blog.csdn.net/asdcctv882/article/details/138520843

image-20240725055347326

https://zhuanlan.zhihu.com/p/704516232

image-20240725055511276

https://blog.csdn.net/qq_46264836/article/details/136476122

image-20240725055635351

https://www.cnblogs.com/codedingzhen/p/17845756.html

image-20240725055743899

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码

x2675263825 (舍得), qq:2675263825。

image-20230107215114763

🍀 微信公众号

《云原生架构师实战》

image-20230107215126971

🍀 个人主页:

https://onedayxyy.cn

image-20240711101911622

🍀 知识库:

https://wiki.onedayxyy.cn/

image-20240804075128231

🍀 博客:

http://blog.onedayxyy.cn/

image-20240804075845906

🍀 csdn

https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20230107215149885

🍀 知乎

https://www.zhihu.com/people/foryouone

image-20230107215203185

往期推荐

我的开源项目:

https://wiki.onedayxyy.cn/docs/OpenSource

image-20240804074953487

玩转Typora+Docusuaurus-起始页交流群:

最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!

image-20240804100023954


0%