宝塔面板nginx站点多域名启动ssl的几种方法

标签:         

本文将介绍nginx站点多域名启动ssl的方法,如何在不影响已部署ssl的情况下为当前站点重新部署新域名ssl,以及检查证书和密钥是否匹配等问题

问题描述

当一个站点同时添加了多个域名后且需要同时开启ssl时,可为多个域名同时申请公用证书直接部署即可。

如果站点已经开启了ssl,后续增加新域名也要求开启ssl时:

解决方法有两种:

  1. 重新为所有域名申请公用证书,重新部署

    此种方法优点是所有证书到期时间一致,缺点是已经开启的域名需要重新部署,中间会中断ssl

  2. 单独为新域名部署nginx server模块

    此种方法优点是不会影响其他已部署域名,缺点是域名证书到期时间不一致

具体实现

  1. 重新为所有域名申请公用证书,重新部署

    直接在宝塔面板中关闭ssl,再选择所有域名重新申请ssl部署即可

  2. 单独为新域名部署nginx server模块

    以下为在宝塔面板下演示,其他nginx环境对应修改即可,新加域名为'imiseo.com'

    首先单独为域名imiseo.com申请域名证书并保存

    /www/server/panel/vhost/nginx下新建后缀为.conf的配置文件,具体内容可参考当前目录下其他配置文件,新建的配置文件名例如imiseo.com.conf

    # 只展示主要内容,其他内容参考/www/server/panel/vhost/nginx/下的配置文件
    server
    {
        listen 80;
            listen 443 ssl http2;
        server_name imiseo.com;
        index index.php index.html index.htm default.php default.htm default.html;
        root /www/wwwroot/common.io/public;
    
        #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
        #error_page 404/404.html;
    
        # 证书路径
        ssl_certificate    /www/server/panel/vhost/cert/imiseo.com/fullchain.pem;
        ssl_certificate_key    /www/server/panel/vhost/cert/imiseo.com/privkey.pem;
    
        # SSL其他配置无须修改
        ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
        ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        add_header Strict-Transport-Security "max-age=31536000";
        error_page 497  https://$host$request_uri;
            #SSL-END
    
            #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
        #error_page 404 /404.html;
        #error_page 502 /502.html;
        #ERROR-PAGE-END
    
        # 其他部分省略
    }
    

nginx站点配置ssl

检查证书和密钥是否匹配

为防止配置的证书有误,可先进行证书检查

# 使用openssl命令工具 fullchain.pem为证书文件,privkey.pem为密钥文件 可相应替换
openssl x509 -noout -modulus -in ./fullchain.pem | openssl md5
openssl rsa -noout -modulus -in ./privkey.pem | openssl md5

如果证书和密钥匹配,则您将看到两个输出具有相同的md5散列值。如果不匹配,则您将看到两个输出具有不同的md5散列值

如何判断证书和域名是否匹配

# 使用以下命令获取证书的详细信息
openssl x509 -in /fullchain.pem -text -noout
  1. 此命令可显示证书的详细信息,其中包括“Subject”字段。该字段应包含与您的域名匹配的常规名称(CN)或替代名称(SAN)。
  2. 确认证书的CN或SAN字段与您的域名匹配。例如,域名是imiseo.com,则您的证书应具有CN或SAN字段包含“imiseo.com”作为其中一个值。

使用以下命令检查指定证书是否过期

openssl x509 -in ./fullchain.pem -noout -checkend 86400

使用PHP OpenSSL扩展检查域名证书是否匹配

<?php
// 指定证书和密钥的文件路径
$certFile = "/path/to/certificate.crt";
$keyFile = "/path/to/private.key";

// 读取证书和密钥的内容
$cert = file_get_contents($certFile);
$key = file_get_contents($keyFile);

// 将证书和密钥加载到OpenSSL中
$certResource = openssl_x509_read($cert);
$keyResource = openssl_get_privatekey($key);

// 检查证书和密钥是否匹配
if (openssl_x509_check_private_key($certResource, $keyResource)) {
    echo "证书和密钥匹配\n";
} else {
    echo "证书和密钥不匹配\n";
}

// 释放OpenSSL资源
openssl_x509_free($certResource);
openssl_free_key($keyResource);
?>

原文链接:宝塔面板nginx站点多域名启动ssl的几种方法


发表评论 登录

目前评论:0