You need to enable JavaScript to run this app.
导航

安装证书到Nginx服务器

最近更新时间2023.09.22 16:31:33

首次发布时间2022.09.15 20:08:59

SSL证书签发后,您可以在火山引擎证书中心控制台下载SSL证书。获得SSL证书后,您必须将SSL证书安装到服务器,才能使服务器支持HTTPS连接。本教程将指导您安装SSL证书到Nginx服务器。

前提条件

  • 您已经通过证书中心提交了SSL证书请求,并且SSL证书已经签发。
    如果您还没有提交SSL证书请求,请参见快速入门
  • 您的服务器的443端口是开放的。
    HTTPS通信的默认端口是443,因此只有当服务器开放了443端口,才能保证服务器能够处理客户端发起的HTTPS连接请求。

环境说明

本教程以以下环境为例介绍相关的操作步骤:

  • 服务器:

    • 操作系统:Ubuntu 22.04 64位
    • Web服务程序:Nginx 1.18.0版本
    • Web服务程序的安装目录:/etc/nginx

    说明

    服务器环境不同,可能导致实际配置与本文描述有差异。这种情况下,您需以实际环境为准,本文只作为参考。

  • 示例域名:ssl.example.com

  • 域名对应的虚拟主机配置(Vitural Host Configs)文件的路径:/etc/nginx/conf.d/ssl.example.com.conf

教程概览

本教程将指导您修改nginx.conf配置文件中的server{}配置,为域名开启443端口监听并关联对应证书。

具体步骤如下:

  1. 下载证书到本地计算机
  2. 上传证书到Nginx服务器
  3. 在Nginx服务器配置证书
  4. 验证证书是否配置成功

步骤1:下载证书到本地计算机

对于已签发的SSL证书,您可以从证书中心控制台下载适配Nginx服务器的证书压缩包到本地计算机。关于下载证书压缩包的具体操作,请参见下载SSL证书
alt

下载Nginx证书压缩包后,解压缩证书压缩包到本地计算机。证书压缩包名称为<CommonName>_nginx。其中,<CommonName>表示证书颁发给的域名。解压缩后,您将获得以下文件:

  • <CommonName>.pem:证书文件。

  • <CommonName>.key:私钥文件。

    注意

    如果您的SSL证书请求使用了您手动上传的CSR,并且您没有提供私钥,那么解压缩获得的文件不包含私钥文件。这种情况下,您需要自行准备私钥文件,用于完成后续配置。

步骤2:上传证书到Nginx服务器

上传本地文件到远程服务器的方式有很多,本教程以使用 scp 命令为例,介绍如何将证书上传到Nginx服务器。

  1. 远程登录Nginx服务器。

  2. 在Nginx安装目录,创建一个用于存放证书的文件夹,命名为cert
    Nginx版本不同,安装目录可能不同,具体以您使用的Nginx版本为准。
    本示例中,Nginx的默认安装目录为/etc/nginx

    cd /etc/nginx
    mkdir cert
    

    说明

    您可以使用find / -name nginx.conf命令,查询nginx.conf配置文件所在路径。该路径即为Nginx安装目录。

  3. 打开本地计算机的Shell工具。
    以Windows 10操作系统为例,在桌面左下角的开始图标上单击鼠标右键,然后单击 Windows PowerShell

  4. 使用scp命令上传证书文件到服务器。

    scp <文件在本地计算机的路径> root@<远程服务器IP>:/etc/nginx/cert
    

    执行scp命令后,根据命令提示,输入远程服务器的root账号的密码。
      示例:

    • 上传证书文件:

      scp C:\ssl.example.com_cert\ssl.example.com.pem root@<远程服务器IP>:/etc/nginx/cert
      
    • 上传私钥文件:

      scp C:\ssl.example.com_cert\ssl.example.com.key root@<远程服务器IP>:/etc/nginx/cert
      
  5. 验证文件是否上传成功。
    在Nginx服务器,执行ll cert命令,列举cert目录下的文件。
    如果文件列表中包含证书文件和私钥文件,表示证书已上传成功。

步骤3:在Nginx上配置证书

您需修改Nginx的虚拟主机配置server{}server{}的位置以您的实际环境为准。

本示例中,server{}位于/etc/nginx/conf.d目录下ssl.example.com.conf配置文件中。

  1. 编辑配置文件。

    vim /etc/nginx/conf.d/ssl.example.com.conf
    
  2. 在配置文件中,添加以下SSL配置。

    server {
        ## 必选SSL配置
        listen 443 ssl; # 开启443端口监听
        server_name ssl.example.com; # 被监听的域名
        ssl_certificate /etc/nginx/cert/ssl.example.com.pem; # 证书文件路径
        ssl_certificate_key /etc/nginx/cert/ssl.example.com.key; # 私钥文件路径
        
        ## 可选SSL配置
        # ssl_session_timeout 5m; # 客户端可以重用会话参数的时间
        # ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; # 允许的加密套件类型
        # ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; # 允许的TLS协议类型
        # ssl_prefer_server_ciphers on; # 协商加密算法时,是否优先使用服务端的加密套件,而不是客户端浏览器的加密套件
        
        ## 网站配置,与80端口的相关配置一致
        root html; 
        index index.html index.htm;
        location / {
            root html;
            index index.html index.htm;
        }
    }
    

    说明

    • 进入vim编辑页后,按I键进入编辑模式。
    • 编辑完成后,按Esc键退出编辑模式,然后输入:wq,保存变更并退出vim编辑页。
  3. 检查nginx.conf是否有语法错误。

    nginx -t
    

    如果返回syntax is ok信息,表示无语法错误。如果有语法错误,您可根据提示重新修改配置。

  4. 重新加载Nginx服务。

    /etc/init.d/nginx reload
    

步骤4:验证证书是否配置成功

注意

进行验证操作前,请确保服务器已开放443端口。如果您的服务器因安全组、防火墙等策略,未允许443端口访问,请先修改对应策略。

打开本地计算机上的浏览器,使用HTTPS格式地址访问域名:https://ssl.example.com

成功建立连接后,如果浏览器的地址栏出现锁状图标,表示连接是安全的。您可以单击锁状图标,查看连接详情。连接详情包含证书信息。
alt

(可选)HTTP请求强制跳转为HTTPS请求

网站启用HTTPS通信后,您还可以修改server{}配置,使终端用户的HTTP请求强制跳转为HTTPS请求,使终端用户总是通过HTTPS协议访问您的Web服务。

  1. 编辑配置文件。

    vim /etc/nginx/conf.d/ssl.example.com.conf
    
  2. 在配置文件中定位到80端口监听配置的位置,增加以下代码行:
    rewrite ^(.*)$ https://$host$1;
    该代码行使用rewrite指令将HTTP请求重定向到HTTPS。

    server {
        listen 80;
        server_name ssl.example.com; # 被监听的域名
        rewrite ^(.*)$ https://$host$1; # 增加该代码行
        location / {
            index index.html index.htm;
        }
    }
    
  3. 保存变更并退出配置文件。

  4. 检查nginx.conf是否有语法错误。

    nginx -t
    

    如果返回syntax is ok信息,表示无语法错误。如果有语法错误,可根据提示重新修改配置。

  5. 重新加载Nginx服务。

    sudo /etc/init.d/nginx reload
    
  6. 打开本地计算机上的浏览器,使用HTTP格式地址访问域名:http://ssl.example.com
    如果地址自动被转换为HTTPS格式,则表示HTTP请求已强制跳转为HTTPS请求。