如何为Nginx或Apache服务器快速配置HTTPS (SSL证书选择与安装)
本内容发表于:2025-04-23 13:59:18
浏览量
1013

配置HTTPS.png

在今天的网络环境中,HTTPS 不再是可选项,而是必选项。它通过SSL/TLS协议加密浏览器和服务器之间的数据传输,保护用户隐私和数据安全,建立用户信任(地址栏的小锁标志),并且对搜索引擎优化(SEO)排名至关重要。主流浏览器也会将未使用HTTPS的HTTP网站标记为“不安全”。

对于网站管理员或开发者来说,为常用的 NginxApache Web服务器配置HTTPS 可能听起来有些复杂,但遵循正确的步骤,这个过程可以相当快速和直接。本指南将带您了解如何选择合适的SSL证书,并完成在Nginx或Apache上的安装与配置。

第一步:选择合适的SSL证书

SSL证书的核心作用是验证服务器身份并启用加密。选择哪种证书取决于您的需求和预算:

  1. 按验证级别区分:

    • DV (Domain Validated - 域名验证型): 最基础、签发最快。只需验证您对域名的控制权。适合个人博客、小型网站。许多免费证书(如Let's Encrypt)和来自像 CloudFlew SSL 这样的提供商的基础付费证书属于此类。

    • OV (Organization Validated - 组织验证型): 除了域名控制权,还需要验证申请组织的真实身份。证书详情中会显示组织信息,增加信任度。适合普通企业网站、信息门户等。

    • EV (Extended Validation - 扩展验证型): 验证级别最严格,需要详细的企业文件审核。过去会在浏览器地址栏显示独特的绿色标识(现在多数浏览器已简化显示),提供最高级别的信任。适合对安全性和信任度要求极高的网站,如银行、大型电商。

  2. 按覆盖范围区分:

    • 单域名证书: 仅保护一个特定的域名(如 www.yourdomain.comyourdomain.com)。

    • 通配符证书 (Wildcard): 保护一个域名及其所有下一级子域名(如 *.yourdomain.com,可保护 blog.yourdomain.com, shop.yourdomain.com 等)。

    • 多域名证书 (SAN/UCC): 一张证书可以保护多个不同的域名(包括主域名和附加域名,如 domain1.com, domain2.net, sub.domain1.com)。

获取途径:

  • Let's Encrypt: 提供免费的DV证书,可通过Certbot等工具自动化申请和续期,非常流行。

  • 商业证书颁发机构 (CA) 或经销商:CloudFlew SSL 等提供商,销售各种类型(DV, OV, EV, Wildcard, Multi-Domain)的证书,通常带有商业支持和更长的有效期选项。

第二步:准备工作 - 生成CSR与私钥 (若非使用Certbot自动化)

如果您选择商业证书或手动申请,通常需要生成一个私钥 (Private Key) 和一个证书签名请求 (CSR - Certificate Signing Request)

  • 私钥: 极其重要,必须保密存放在服务器上。用于解密由对应公钥加密的信息。

  • CSR: 包含您的公钥和身份信息(如域名、组织名称等),用于提交给CA以申请证书。

您可以使用 openssl 工具在服务器上生成(请确保已安装OpenSSL):

Bash

# 1. 生成私钥 (例如 RSA 2048位)openssl genpkey -algorithm RSA -out private.key -pkeyopt rsa_keygen_bits:2048# 2. 使用私钥生成CSRopenssl req -new -key private.key -out server.csr

在生成CSR过程中,系统会提示您输入信息,如国家、省份、城市、组织名称、部门名称等。最关键的是 "Common Name (CN)",必须准确填写您要保护的主域名(例如 www.yourdomain.comyourdomain.com)。

  • 注意: 如果您使用 Let's Encrypt 的 Certbot 工具,它通常会自动处理私钥和CSR的生成。

第三步:获取并准备证书文件

  1. 使用 Let's Encrypt (Certbot):Certbot 工具极大地简化了流程。根据您的服务器和Web服务器软件,运行类似命令:

    • sudo certbot --nginx (自动获取并尝试配置Nginx)

    • sudo certbot --apache (自动获取并尝试配置Apache)

    • sudo certbot certonly --webroot -w /var/www/html -d yourdomain.com -d www.yourdomain.com (仅获取证书) Certbot 获取的证书文件通常位于 /etc/letsencrypt/live/yourdomain.com/ 目录下,主要使用 fullchain.pem (包含服务器证书和中间证书链) 和 privkey.pem (私钥)。

  2. 使用商业CA (如从CloudFlew购买):您需要将生成的 server.csr 文件内容提交给CA或提供商,例如通过 CloudFlew 的管理界面。完成域名验证(通常通过DNS记录或邮箱)或组织验证后,CA会签发证书文件,通常是 .crt.pem 格式。您会收到:

    Bash

    cat yourdomain.crt intermediate.crt > chained.crt

    这个合并后的文件(chained.crt 或有时也叫 fullchain.pem)将和您的私钥 (private.key) 一起用于服务器配置。

    • 您的服务器证书 (例如 yourdomain.crt)

    • 中间证书链 (Intermediate Certificates / Chain Certificates,可能是一个或多个文件,例如 intermediate.crt, ca-bundle.crt) 为了方便配置,强烈建议将您的服务器证书和所有中间证书合并成一个文件(顺序很重要:您的证书在前,根证书在最后)。例如:

第四步:配置Nginx启用HTTPS

  1. 找到您的Nginx站点配置文件,通常在 /etc/nginx/sites-available/ 目录下,然后链接到 /etc/nginx/sites-enabled/。编辑对应的文件(例如 yourdomain.com.conf)。

  2. 修改或添加 server 块监听443端口并启用SSL:

Nginx

server {    listen 80; # HTTP监听块 (建议保留并配置跳转)
    server_name yourdomain.com www.yourdomain.com;    # 建议将所有HTTP请求跳转到HTTPS
    location / {        return 301 https://$host$request_uri;
    }
}server {    listen 443 ssl http2;       # 监听443端口,启用SSL和HTTP/2
    listen [::]:443 ssl http2;  # 同时监听IPv6的443端口
    server_name yourdomain.com www.yourdomain.com; # 替换为您的域名

    # === SSL证书配置 ===
    ssl_certificate /path/to/your/chained.crt;      # 指向合并后的证书链文件 (或 fullchain.pem)
    ssl_certificate_key /path/to/your/private.key;  # 指向您的私钥文件

    # === 增强安全性的SSL/TLS设置 (非常重要!) ===
    # 推荐使用最新的安全协议
    ssl_protocols TLSv1.2 TLSv1.3; 
    # 优先使用服务器端选择的加密套件 (通常设为off,让客户端协商更佳)
    ssl_prefer_server_ciphers off; 
    # 使用强加密套件 (示例,建议从Mozilla SSL Config Generator获取最新推荐)
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';    # 启用 HSTS (HTTP Strict Transport Security) 强制浏览器使用HTTPS (可选但推荐)
    # add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

    # === 网站根目录和其他配置 ===
    root /var/www/yourdomain.com; # 您的网站文件根目录
    index index.html index.htm;    location / {        try_files $uri $uri/ =404;
    }    # ... 其他 location, fastcgi_pass 等配置 ...}

  1. 测试配置: sudo nginx -t。如果显示 "syntax is ok" 和 "test is successful",则配置无误。

  2. 重载Nginx: sudo systemctl reload nginx 使配置生效。

第五步:配置Apache启用HTTPS

  1. 确保 mod_ssl 模块已启用:sudo a2enmod ssl (可能需要重启Apache生效)。

  2. 找到您的Apache站点配置文件,通常在 /etc/apache2/sites-available/ 目录下,然后使用 a2ensite 命令启用。编辑对应的文件(例如 yourdomain.com.conf)。

  3. 修改或添加 <VirtualHost> 块监听443端口:

Apache

<VirtualHost *:80> # HTTP监听块 (建议保留并配置跳转)
    ServerName yourdomain.com    ServerAlias www.yourdomain.com    # 建议将所有HTTP请求跳转到HTTPS
    Redirect permanent / https://yourdomain.com/</VirtualHost><VirtualHost *:443>
    ServerName yourdomain.com    ServerAlias www.yourdomain.com # 可选    DocumentRoot /var/www/yourdomain.com # 您的网站文件根目录    # === SSL引擎与证书配置 ===
    SSLEngine on
    SSLCertificateFile /path/to/your/chained.crt      # 指向合并后的证书链文件 (或服务器证书 .crt)    SSLCertificateKeyFile /path/to/your/private.key  # 指向您的私钥文件    # 如果您的SSLCertificateFile只包含服务器证书,需要指定中间证书链文件
    # SSLCertificateChainFile /path/to/your/intermediate.crt 

    # === 增强安全性的SSL/TLS设置 (非常重要!) ===
    # 推荐使用最新的安全协议 (根据Apache版本调整)
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 
    # 使用强加密套件 (示例,建议从Mozilla SSL Config Generator获取最新推荐)
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA    SSLHonorCipherOrder on
    SSLCompression off # 避免安全风险    # 启用 HSTS (HTTP Strict Transport Security) 强制浏览器使用HTTPS (可选但推荐, 需要 mod_headers)
    # Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"

    # === 网站目录和其他配置 ===
    <Directory /var/www/yourdomain.com>
        Options Indexes FollowSymLinks        AllowOverride All
        Require all granted    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log    CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>

  1. 测试配置: sudo apache2ctl configtest。如果显示 "Syntax OK",则配置无误。

  2. 重启或重载Apache: sudo systemctl restart apache2sudo systemctl reload apache2 使配置生效。

第六步:测试与验证

配置完成后,进行验证:

  • 确保Web服务器成功重启/重载,没有报错。

  • 在浏览器中通过 https://yourdomain.com 访问您的网站。检查地址栏是否显示安全锁标志

  • 点击锁标志查看证书详情,确认是您安装的证书。

  • 使用在线SSL测试工具,如 Qualys SSL Labs 的 SSL Server Test (

    https://www.ssllabs.com/ssltest/

    ),输入您的域名进行全面检测。目标是获得 A 或 A+ 评级。该工具会检查证书链、协议支持、密钥交换、密码强度等。


为Nginx或Apache服务器配置HTTPS是保障网站安全和提升用户信任的关键步骤。通过选择合适的SSL证书(无论是使用Let's Encrypt的自动化工具还是从像 CloudFlew 这样的提供商获取商业证书),并正确地修改服务器配置文件,您可以快速地为您的网站启用强大的加密保护。务必重视并配置推荐的强加密套件和协议,并使用专业工具进行验证,确保证书部署正确无误。像 Certbot 和 CloudFlew 这样的工具和服务使得这个过程比以往任何时候都更加容易。现在就开始行动,让您的网站更安全!