SSL 证书

admin2024-07-09  3

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

(适用于 Linux 系统) 

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

自建证书

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/bash


sudo mkdir -p ca
sudo mkdir -p certs

# 设置域名变量
# 接收参数
# 第一个参数是域名, 例 sudo ./create_cert.sh demo.yiparts.debian
DOMAIN=""
# 检查是否传递了参数
if [ -z "$DOMAIN" ]; then
    echo "请输入一个域名: CA.bat  <domain>"
    exit 1
fi
# 提取基础域名部分
if [[ "$DOMAIN" == *"*."* ]]; then
    echo "自签证书泛域名会被浏览器提示不安全"
    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 "所有操作已完成。"

@echo off chcp 65001 > nul for %%f in (CA\*.crt) do ( echo 导入 %%f 证书 C:\Windows\System32\certutil -store Root | findstr /C:"%%~nf" > nul if 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; # Message Websocket 的 SSL 代理服务 # php messageWorker.php -d start 守护进程方式启动 Websocket, 其它 start,restart,stop, ps -aux | grep messageWoker # 测试 https://demo.yiparts.debian/wss 是否正常 # 使用域名连接 wss://demo.yiparts.debian/wss # 如果还是连接失败, 检查域名白名单 cfg('websocket>whiteList') location /wss { proxy_pass http://127.0.0.1:8181; # swoole 或 workerman 提供的 Websocket 监听地址:端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; # 透传真实客户端ip, $_SERVER['HTTP_X_REAL_IP'] } # 静态文件 location ~ ^/(static|files|cache)/ { try_files $uri =404; # /xxx/开头的网址直接寻找对应的文件输出,不管文件是否存在 } # 这些放入上面的 /xxx/目录下 #location ~* \.(htm|js|ts|css|jpg|jpeg|png|gif|ico|svg)$ { # #ttf|eot|woff|woff2|zip|gz|pdf|xml|txt|tiff|xls|xlsx|doc|docx|ppt|pptx|cad|mp3|mp4 # try_files $uri =404; # 以 .xxx 结尾的直接寻找对应的文件输出,不管文件是否存在 #} # XMVC 入口文件 index.php location / { try_files $uri $uri/ /index.php?$query_string; # 除前面的直接输出规则外所有的请求交给 index.php } # PHP 代理 fastcgi_read_timeout 600s; # 开发环境下增加 FastCGI 超时时间, 用于 xdebug 调试用 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; # 开发环境下 禁用 OPcache fastcgi_param PHP_ADMIN_VALUE "opcache.enable=0"; # 开发环境下 添加开发者头信息 fastcgi_param X_DEVELOP "1"; } }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!