自签证书的相关问题
证书中可能遇到的问题
域名管理服务器的配置问题
主机申请证书时,需要连接到域名管理服务器,比如 Cloudflare。
因为申请证书,代表你现在没有证书,所以肯定是走 http 协议的。所以你的域名服务器必须能够接受 http 响应。
在 cloudflare 中,需要你将域名 A 记录的解析中,代理状态从橘色改成灰色, 仅 DNS
。再把 SSL/TLS
从 严格
改成 灵活
。
等证书申请完,再改回来。
acme 申请证书时的报错
问题:
missing fullchain.cer
-
上面的域名问题是否解决了。
-
检查申请证书服务器是否开放了端口
申请证书时需要用到服务器 80
和 443
端口,检查是否开放:
# 查看服务器端口情况
sudo ufw status verbose
打开端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
查看是否生效,没有生效则重启服务
# 查看是否生效
sudo ufw status verbose
# 重启服务
sudo ufw disable
sudo ufw enable
- 删掉证书目录, 重新开始申请。
使用 acme 脚本的自签流程
方法一:使用 acme 脚本申请
申请证书
安装证书所需的包:
sudo apt install socat -y
curl https://get.acme.sh | sh
~/.acme.sh/acme.sh --set-default-ca --server letsencrypt
申请证书和安装证书:
~/.acme.sh/acme.sh --issue -d gtoxai.com --standalone -k ec-256 --force --insecure
~/.acme.sh/acme.sh --install-cert -d gtoxai.com \
--key-file /root/certs/gtoxai.com.key \
--fullchain-file /root/certs/fullchain.cer
其它证书申请方案(可选)
如果上面申请证书失败,可以再次尝试下面两种方法。
申请证书方式 2:
~/.acme.sh/acme.sh --register-account -m "mail.gtoxai.com" --server buypass --force --insecure && ~/.acme.sh/acme.sh --issue -d gtoxai.com --standalone -k ec-256 --force --insecure --server buypass
申请证书方式 3:
~/.acme.sh/acme.sh --register-account -m "${RANDOM}@chacuo.net" --server zerossl --force --insecure && ~/.acme.sh/acme.sh --issue -d gtoxai.com --standalone -k ec-256 --force --insecure --server zerossl
使用 Docker 创建和管理自签证书
可以使用一个 Docker 容器来完成证书的生成和管理。一个常用的工具是 certbot,但它主要用于 Let's Encrypt 的证书。对于自签证书,可以创建一个自定义的 Docker 镜像来使用 OpenSSL。
创建流程
1. 创建生成证书的脚本
创建一个名为 generate-cert.sh
的脚本:
#!/bin/bash
# 设置证书的参数
DOMAIN="gtoxai.com"
DAYS=365
# 创建工作目录
mkdir -p /root/cert
# 生成私钥
openssl genpkey -algorithm RSA -out /root/cert/$DOMAIN.key
# 生成CSR
openssl req -new -key /root/cert/$DOMAIN.key -out /root/cert/$DOMAIN.csr -subj "/C=US/ST=State/L=City/O=Organization/OU=Department/CN=$DOMAIN"
# 生成自签证书
openssl x509 -req -days $DAYS -in /root/cert/$DOMAIN.csr -signkey /root/cert/$DOMAIN.key -out /root/cert/$DOMAIN.crt
2. 创建 Dockerfile
首先,创建一个 Dockerfile:
# 使用官方的Debian镜像
FROM debian:latest
# 安装OpenSSL
RUN apt-get update && apt-get install -y openssl
# 创建脚本生成自签证书
COPY generate-cert.sh /usr/local/bin/generate-cert.sh
RUN chmod +x /usr/local/bin/generate-cert.sh
# 设置工作目录
WORKDIR /cert
# 运行脚本生成证书
CMD ["/usr/local/bin/generate-cert.sh"]
3. 构建和运行 Docker 容器
构建 Docker 镜像:
docker build -t cert-gen .
运行 Docker 容器以生成证书:
docker run --rm -v /root/cert:/root/cert cert-gen
这样,生成的自签证书 (.crt
文件) 和私钥 (.key
文件) 将会存储在当前目录的 cert
文件夹中。
管理和更新证书
管理和更新证书可以通过定期运行上述 Docker 容器来完成。你可以设置一个定时任务(如 cron job)来自动生成新的证书。
例如,编辑 cron job:
crontab -e
添加以下行来每月运行一次证书生成脚本:
0 0 1 * * docker run --rm -v /root/cert:/root/cert cert-gen
检查 cron job 是否生效
可以通过以下命令查看已添加的 cron job:
crontab -l
确保输出中包含你刚刚添加的行:
0 0 1 * * docker run --rm -v /root/cert:/root/cert cert-gen
测试 Docker 容器
为了确保一切正常工作,可以手动运行一次 Docker 容器:
docker run --rm -v /root/cert:/root/cert cert-gen
运行后,你可以检查 /root/cert
目录下是否生成了新的证书文件和私钥文件。
通过以上步骤,你可以确保每月自动更新自签证书的有效期,从而保持系统安全。
证书申请的过程(原理)
1. 安装 OpenSSL
首先,确保你已经安装了 OpenSSL:
sudo apt update
sudo apt install openssl
2. 创建私钥和证书签名请求 (CSR)
生成一个私钥(KEY):
可以使用 RSA
算法,也可以使用 ec-256
算法
openssl genpkey -algorithm RSA -out mydomain.key
生成一个证书签名请求 (CSR):
openssl req -new -key mydomain.key -out mydomain.csr
在生成 CSR 时,你会被提示输入一些信息,如国家、州、市、组织等。
3. 创建自签证书(CRT)
使用私钥(KEY)和 证书签名请求(CSR) 生成自签证书(CRT):
openssl x509 -req -days 365 -in mydomain.csr -signkey mydomain.key -out mydomain.crt
这样,你就生成了一个有效期为 365 天的自签证书。