如何使用Nginx在不同的位置启用不同的SSL证书?

时间:2018-07-24 02:58:13

标签: ssl nginx ssl-certificate nginx-location

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

1 个答案:

答案 0 :(得分:1)

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

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 证书密钥对 *-ss.crt*-ss.key 属于它所服务的子域,如其“通用名称”字段中设置的那样。

此解决方案以使用子域为代价提供独立的 TLS 连接。
使用指向不同主机名的 URL 发送请求,但使用代理或 /etc/hosts(或 curl 中的 --resolve 选项)将其重定向到公共 IP 地址。