AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1122925
Accepted
michacassola
michacassola
Asked: 2023-02-15 12:38:13 +0800 CST2023-02-15 12:38:13 +0800 CST 2023-02-15 12:38:13 +0800 CST

NGINX 中是否按顺序使用了多个 TLS 证书/密钥?NGINX 如何确定这种情况下的最佳匹配?

  • 772

使用 Cloudflare 的“完全”加密模式,可以使用自签名证书作为源到 Cloudflare 的连接:

来源提供的证书不会以任何方式进行验证。它可以是过期的、自签名的,或者甚至没有与请求的主机名匹配的 CN/SAN 条目。

-- https://developers.cloudflare.com/ssl/origin-configuration/ssl-modes/full/

最近,我使用以下命令 (GNU/Linux) 创建的自签名证书停止工作,Cloudflare 抛出526 错误。

openssl genpkey -algorithm Ed25519 -out /etc/ssl/qycli.key
openssl req -new -x509 -key /etc/ssl/qycli.key -out /etc/ssl/qycli.crt -days 7300 -subj "/C=AQ/ST=qycli/L=qycli/O=HOSTYON/OU=SysOps/CN=HOSTYON"

使用以下证书和密钥再次连接到 Cloudflare:

openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -x509 -nodes -days 7300 -out /etc/ssl/qycli.crt -keyout /etc/ssl/qycli.key -subj "/C=AQ/ST=qycli/L=qycli/O=HOSTYON/OU=SysOps/CN=HOSTYON"

我能否以 NGINX 将依次考虑的方式指定多个证书和密钥,一个接一个地保持尽可能高的性能,同时在 Cloudflare 不再认为证书和密钥足够安全时提供回退?

NGINX 文档提到:

从 1.11.0 版本开始,可以多次指定该指令以加载不同类型的证书,例如 RSA 和 ECDSA:

-- https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_certificate

以下是否会像我预期的那样工作?

server {
listen              443 ssl;
server_name         example.com;

ssl_certificate     /etc/ssl/qycli.crt; # More performant, less secure ECDSA P-256 certificate
ssl_certificate_key /etc/ssl/qycli.key;

ssl_certificate     /etc/ssl/qycli.2048.crt; # More performant, less secure RSA 2048 fallback certificate
ssl_certificate_key /etc/ssl/qycli.2048.key;

ssl_certificate     /etc/ssl/qycli.384.crt; # Less performant, more secure ECDSA P-384 fallback certificate
ssl_certificate_key /etc/ssl/qycli.384.key;

ssl_certificate     /etc/ssl/qycli.4096.crt; # More performant, less secure RSA 4096 certificate
ssl_certificate_key /etc/ssl/qycli.4096.key;
...
}

使用以下方法制作的证书和密钥:

# ECDSA
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -x509 -nodes -days 7300 -out /etc/ssl/qycli.crt -keyout /etc/ssl/qycli.key -subj "/C=AQ/ST=qycli/L=qycli/O=HOSTYON/OU=SysOps/CN=HOSTYON"
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 -x509 -nodes -days 7300 -out /etc/ssl/qycli.384.crt -keyout /etc/ssl/qycli.384.key -subj "/C=AQ/ST=qycli/L=qycli/O=HOSTYON/OU=SysOps/CN=HOSTYON"
# RSA
openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/qycli.2048.key -out /etc/ssl/qycli.2048.crt -sha256 -days 7300 -nodes -subj "/C=AQ/ST=qycli/L=qycli/O=HOSTYON/OU=SysOps/CN=HOSTYON"
openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/qycli.4096.key -out /etc/ssl/qycli.4096.crt -sha256 -days 7300 -nodes -subj "/C=AQ/ST=qycli/L=qycli/O=HOSTYON/OU=SysOps/CN=HOSTYON"
nginx
  • 1 1 个回答
  • 21 Views

1 个回答

  • Voted
  1. Best Answer
    anx
    2023-02-15T15:37:23+08:002023-02-15T15:37:23+08:00

    是的,多个ssl_certificate&ssl_certificate_key对就可以了。nginx 将发送任何可用于客户端要求的内容,例如,如果您支持 TLS1.2,则客户端可以选择限制服务器可以提供的证书类型的密码:

    # openssl s_client -tls1_2 -cipher HIGH+aECDSA -connect server.example:443 -showcerts </dev/null
    ..
    s:CN = server.example
    a:PKEY: id-ecPublicKey
    ..
    
    # openssl s_client -tls1_2 -cipher HIGH+aRSA -connect server.example:443 -showcerts </dev/null
    ..
    s:CN = server.example
    a:PKEY: rsaEncryption
    ..
    

    当有多个选择时, nginx 设置ssl_ecdh_curve可用于覆盖客户端首选项。但是默认行为应该已经符合您的目标,即让 Cloudflare 从他们认为合适的内容中进行选择——前提是您使用的是未弃用的 (openssl) 库。


    但是,对于仅与一个特定云提供商通信的端点,您可能根本不想提供多种选择。选择一个被认为是受支持的、安全的和高性能的可能会以较低的维护成本达到目的。一直到他们都被认为不再合适为止,可能在未来的同一时间。

    • 0

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve