如何将 .crt 和 bundle.crt 拼接为 fullchain.pem

目录

🛠 教程:如何将 .crt 和 bundle.crt 拼接为 fullchain.pem

📁 一、准备好两个文件

🔧 二、使用 cat 命令拼接

📦 三、检查结果

🧪 四、测试 fullchain.pem 是否可用(可选)

🚀 五、在 Nginx 配置中使用

💡常见问题排查

✅ 总结一句话:



🛠 教程:如何将 .crtbundle.crt 拼接为 fullchain.pem

在部署 HTTPS(如 Nginx、Apache、HAProxy)服务时,经常需要提供一份完整的证书链文件,也就是 fullchain.pem。这个文件通常由以下两个部分拼接组成:

fullchain.pem = 域名证书 (domain.crt) + 根证书/中间证书 (ca_bundle.crt 或 root_bundle.crt)

本教程将手把手教你如何快速完成这个拼接,并避免常见错误。


📁 一、准备好两个文件

确保你已经从 CA(证书机构)或托管服务商(如阿里云、腾讯云、Let's Encrypt)拿到了以下两个文件:

文件名说明
your_domain.crt这是你域名的证书(站点证书)
ca_bundle.crt包含中间证书和根证书,用于建立信任链

🔧 二、使用 cat 命令拼接

打开终端(Linux/Mac)或 WSL(Windows 用户),执行如下命令:

cat your_domain.crt ca_bundle.crt > fullchain.pem

⚠️ 注意顺序:

  • 一定是 your_domain.crt 在前ca_bundle.crt 在后

  • 否则浏览器或客户端会验证失败(证书链错误)


📦 三、检查结果

你可以用 lessvim 检查 fullchain.pem 内容:

less fullchain.pem

应当看到如下结构:

-----BEGIN CERTIFICATE-----
【你网站的证书】
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
【中间 CA 证书】
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
【根 CA 证书】
-----END CERTIFICATE-----

如果你看到多个 BEGIN CERTIFICATE,说明拼接成功。


🧪 四、测试 fullchain.pem 是否可用(可选)

你可以使用 openssl 测试拼接后的证书是否正确加载:

openssl verify -CAfile fullchain.pem fullchain.pem

若输出 fullchain.pem: OK,说明格式和链条正确。


🚀 五、在 Nginx 配置中使用

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/your_domain.key;

    ...
}

💡常见问题排查

问题原因解决方案
证书链不完整拼接顺序错误或缺少根证书确保域名证书在前,根证书在后
浏览器警告“不受信任证书”没有提供中间证书使用带有中间证书的 bundle
.pem 无法加载内容格式不对(比如是 DER 格式)确保是 PEM 格式(BEGIN/END)

✅ 总结一句话:

正确顺序拼接 PEM 证书:domain.crt + ca_bundle.crtfullchain.pem,用于服务器加载完整证书链。


user www www; worker_processes auto; error_log /www/wwwlogs/nginx_error.log crit; pid /www/server/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; stream { log_format tcp_format '$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time'; access_log /www/wwwlogs/tcp-access.log tcp_format; error_log /www/wwwlogs/tcp-error.log; include /www/server/panel/vhost/nginx/tcp/*.conf; } events { use epoll; worker_connections 51200; multi_accept on; } http { include mime.types; #include luawaf.conf; include proxy.conf; lua_package_path "/www/server/nginx/lib/lua/?.lua;;"; default_type application/octet-stream; server_names_hash_bucket_size 512; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 50m; sendfile on; tcp_nopush on; keepalive_timeout 60; tcp_nodelay on; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/json image/jpeg image/gif image/png font/ttf font/otf image/svg+xml application/xml+rss text/x-js; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_disable "MSIE [1-6]\."; limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; server_tokens off; access_log off; server { listen 443 ssl; #请填写绑定证书的域名 server_name taikongyun.icu; #请填写证书文件的相对路径或绝对路径 ssl_certificate /taikongyun.icu_nginx/nginx/taikongyun.icu_bundle.crt; #请填写私钥文件的相对路径或绝对路径 ssl_certificate_key /taikongyun.icu_nginx/nginx/taikongyun.icu.key; ssl_session_timeout 5m; #请按照以下协议配置 ssl_protocols TLSv1.2 TLSv1.3; #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { root /opt/application/dist; try_files $uri $uri/ /index.html; index index.html index.htm; } location /jxj-shop-admin/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://134.175.126.81:8085/; # 修复此处 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } access_log /www/wwwlogs/access.log; } server { listen 80; #请填写绑定证书的域名 server_name taikongyun.icu; #把http的域名请求转成https return 301 https://taikongyun.icu; } server { listen 8080; server_name localhost; charset utf-8; location / { root /opt/application/dist; try_files $uri $uri/ /index.html; index index.html index.htm; } location /jxj-shop-admin/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://134.175.126.81:8085/; # 修复此处 } location /image/ { root /home/; autoindex on; } location ~ ^/v3/api-docs/(.*) { proxy_pass http://134.175.126.81:8085/v3/api-docs/$1; # 修复此处 } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } include /www/server/panel/vhost/nginx/*.conf; } 以上是nginx.conf文件中的内容,请帮忙看下怎么改指出内容中的问题并优化
06-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值