您的位置:首页 > 汽车 > 时评 > SSL 证书

SSL 证书

2024/10/6 21:50:23 来源:https://blog.csdn.net/hzqghost/article/details/140207904  浏览:    关键词:SSL 证书

自动获取 Let's Encrypt 免费证书

(适用于 Linux 系统) 

安装 Certbot
sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx  # Nginx 服务器
sudo apt-get install certbot python3-certbot-apache  # Apache 服务器

获取和安装证书
sudo certbot --nginx
sudo certbot --apache
admin@debian.com
Y 同意协议
Y 同意分享电子邮件
1,2,3,4 多个域名一起


配置自动更新
Let's Encrypt 证书的有效期为 90 天。为了保持证书的有效性,建议设置自动更新任务。Certbot 默认会创建一个 cron 任务来自动更新证书。
可以通过以下命令手动测试自动更新任务
sudo certbot renew --dry-run

手动获取 Let's Encrypt 免费证书(通用方法)

安装 Certbot
sudo apt-get update
sudo apt-get install certbot
sudo certbot certonly --standalone -d yourdomain.com

配置证书
获取证书后,将证书和私钥配置到你的服务器软件(如 Nginx 或 Apache)中。通常,Certbot 会将证书和私钥存放在 /etc/letsencrypt/live/yourdomain.com/ 目录下。

自动更新
设置自动更新任务以保持证书的有效性。可以通过 cron 任务来定期执行 Certbot 的更新命令:
sudo crontab -e
0 0 * * * certbot renew --quiet
以上为每天午夜执行证书的自动更新检查

配置 Nginx 或 Apaceh

自建证书

vhost.ext  域名证书附加配置信息

create_cert.sh 创建证书到 ca(中间证书 ) 以及 certs 两个目录下

CA.bat 导入证书到 windows 里的 受信息的根证书颁发机构, 也可手动 certmgr.msc 添加

vhost.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names[alt_names]
DNS.1 = localhost
IP.2 = 127.0.0.1
IP.3 = 192.168.1.90
DNS.4 = *.yiparts.debian
DNS.5 = admin.yiparts.debian
DNS.6 = world.yiparts.debian

IP.2 = 192.168.1.90           
表示https要访问的ip,IP.3也是ip,ssl证书说明可以自签多个ip,这是自签ip的证书

DNS.4 = demo.yiparts.debian    
表示https要访问的域名,DNS.5,DNS.6都一样是域名,ssl证书说明可以自签多个域名,这是自签域名的证书

 create_cert.sh

#create_cert.sh
#!/bin/bashsudo mkdir -p ca
sudo mkdir -p certs# 设置域名变量
# 接收参数
# 第一个参数是域名, 例 sudo ./create_cert.sh demo.yiparts.debian
DOMAIN="$1"
# 检查是否传递了参数
if [ -z "$DOMAIN" ]; thenecho "请输入一个域名: $0 <domain>"exit 1
fi
# 提取基础域名部分
if [[ "$DOMAIN" == *"*."* ]]; thenecho "自签证书泛域名会被浏览器提示不安全"exit 1
fi# 证书文件名
GUID=$DOMAIN
CA="CA-$GUID"
EMAIL="admin@qg.com"# 去 CA 目录
cd ca# 生成 CA 私钥 需要设置密码否则会被浏览器提示不安全
sudo openssl genrsa -des3 -out "$CA.key" 2048# 生成 CA 证书 100年
sudo openssl req -x509 -new -nodes -key "$CA.key" -sha256 -days 36500 -out "$CA.crt" -subj "/CN=$DOMAIN/O=Qg Inc/OU=It/L=Guang Zhou/ST=Guang Dong/C=CN/emailAddress=$EMAIL"# 去 CERTS 目录
cd ..
cd certs# 生成 SSL 私钥
sudo openssl genrsa -out "$GUID.key" 2048# 生成 SSL 证书请求(CSR)
sudo openssl req -new -key "$GUID.key" -out "$GUID.csr" -subj "/CN=$DOMAIN/O=Qg Inc/OU=It/L=Guang Zhou/ST=Guang Dong/C=CN/emailAddress=$EMAIL"# 使用 CA 证书签署 SSL 证书,有效期 100 年
sudo openssl x509 -req -in "$GUID.csr" -out "$GUID.crt" -days 36500 -CA "../ca/$CA.crt" -CAkey "../ca/$CA.key" -CAcreateserial -extfile "../vhost.ext"# 查看签署的证书信息
sudo openssl x509 -in "$GUID.crt" -noout -text# 验证 SSL 证书
sudo openssl verify -CAfile "../ca/$CA.crt" "$GUID.crt"echo "所有操作已完成。"

CA.bat  

@echo offchcp 65001 > nulfor %%f in (CA\*.crt) do (echo 导入 %%f 证书C:\Windows\System32\certutil -store Root | findstr /C:"%%~nf" > nulif errorlevel 1 (C:\Windows\System32\certutil -addstore -f "Root" "%%f") else (echo 证书 %%f 已经导入,跳过)
)
echo  
echo 证书已成功导入到受信任的根证书颁发机构
pause

Nginx 配置

server {listen 443 ssl;ssl_certificate /home/qg/ssl/certs/demo.yiparts.debian.crt;  ssl_certificate_key /home/qg/ssl/certs/demo.yiparts.debian.key;  ssl_session_timeout 5m;ssl_session_cache shared:SSL:50m;ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;    server_name demo.yiparts.debian;root /home/wwwroot/project/yiparts;  #网站根目录index index.php index.html index.htm;location ~ ^/(static|files|cache)/ {try_files $uri =404;  # /xxx/开头的网址直接寻找对应的文件输出,不管文件是否存在}location ~* \.(js|css|jpg|jpeg|png|gif|ico|svg)$ {try_files $uri =404;  # 以 .xxx 结尾的直接寻找对应的文件输出,不管文件是否存在}# Message Websocket 的 SSL 代理服务location /wss{proxy_pass http://127.0.0.1:8181;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_set_header X-Real-IP $remote_addr;}# index.phplocation / {try_files $uri $uri/ /index.php?$query_string; # 除前面的直接输出规则外所有的请求交给 index.php}# PHP 代理# 增加 FastCGI 超时时间fastcgi_read_timeout 600s;location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/run/php/php8.2-fpm.sock;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;# 禁用 OPcachefastcgi_param PHP_ADMIN_VALUE "opcache.enable=0";# 添加开发者头信息fastcgi_param X_DEVELOP "1";}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com