ssl - 如何使用 Nginx 为不同的位置启用不同的 SSL 证书?

标签 ssl nginx ssl-certificate nginx-location

假设我只有一个域名“example.com”。我想在访问“https://example.com/api/A”时使用“A.crt”启用 SSL 证书,并在访问“https://example.com/api/B”时使用“B.crt”。如何通过 Nginx 配置实现这一点?谢谢。

最佳答案

为每个证书使用一个专用服务器 block ,如下所示:

server {
 listen 443 ssl;
 server_name apiA; ...
 ssl_certificate /etc/ssl/certs/A-ss.crt;
 ssl_certificate_key /etc/ssl/private/A-ss.key;
 ssl_client_certificate /etc/ssl/certs/A.crt;
 ssl_verify_client on;
 ssl_verify_depth 2; ...
 location /api/A/ { ... }
 }

server {
 listen 443 ssl;
 server_name apiB; ...
 ssl_certificate /etc/ssl/certs/B-ss.crt;
 ssl_certificate_key /etc/ssl/private/B-ss.key;
 ssl_client_certificate /etc/ssl/certs/B.crt;
 ssl_verify_client on;
 ssl_verify_depth 2;  ...
 location /api/B/ { ... }
 }
其中每个 TLS 证书 key 对 *-ss.crt , *-ss.key属于它所服务的子域,在其“通用名称”字段中设置。
此解决方案以使用子域为代价提供独立的 TLS 连接。
使用指向不同主机名的 URL 发送请求,但使用代理或/etc/hosts(或 curl 中的 --resolve 选项)将其重定向到公共(public) IP 地址。

关于ssl - 如何使用 Nginx 为不同的位置启用不同的 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489842/

相关文章:

ssl - TLS v1.0 中的客户端完成消息

ssl - ESP32 SSL 连接在 CA 证书为常量时有效,但在从文件中读取时无效

php - 通过 Nginx Vs 部署 Laravel 站点。 PHP artisan 服务

nginx - 将 nginx root 设置为公共(public)文件夹,同时保留 URL 中的父目录名称

rest - 使用自签名根 ca 保护休息服务的优缺点是什么?

java - 关闭 JiraRestClient 的 ssl 证书验证

sharepoint - 如何通过 SSL 启用 SharePoint

nginx - 如何增加nginx请求超时?

ssl - 如何从证书链导出私钥?

c# - 我可以从 System.Net.Security.SslStream 获得什么级别的线程安全?