首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Nginx中为自定义位置设置双向SSL?

如何在Nginx中为自定义位置设置双向SSL?
EN

Stack Overflow用户
提问于 2016-02-23 10:29:44
回答 2查看 11.6K关注 0票数 7

我有一个带有一些API的rails 4项目。

该项目在生产上与nginx v.1.6.3https一起运行。

Nginx配置:

代码语言:javascript
复制
upstream app {
    # Path to Unicorn SOCK file, as defined previously
    server unix:/tmp/unicorn.my_domain.sock fail_timeout=0;
}

server {
       listen         80;
       server_name    my_domain.com;
       return         301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;

    ssl_certificate /etc/nginx/ssl/public.crt;
    ssl_certificate_key /etc/nginx/ssl/private.rsa;    

    server_name my_domain.com;

    root /var/www/current;

    location /assets {
        root /var/www/current/public;
        gzip_static on;
        expires max;
        add_header Cache-Control public;
    }

    try_files $uri/index.html $uri @app;

    location @app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app;
    }

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}

问题

API请求(POST /api/some_path/create等)应该使用双向SSL进行保护。

只有一个服务将使用此API (只有一个客户端拥有一个证书)

问题

  1. nginx能处理two-way SSL吗?
  2. two-way SSL应该在nginx层上实现,而不是在web应用逻辑中实现.我说的对吗?
  3. 如何设置nginx以捕获向/api/... url发送请求的客户端,并使用two-way SSL对其进行身份验证

我只需要一个基本的例子,来理解它应该如何工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-23 18:08:11

  1. 是的(请参阅证书客户端指令)。
  2. 取决于您的应用程序,但在这种情况下,您只需要验证证书是否由某个CA签名,这是正确的。
  3. 您需要创建由上述CA签名的CA和客户端证书,并使用该CA在服务器端验证客户端证书。 现在,您需要考虑的是如何解决证书客户端指令不支持在位置块中使用的问题(例如,它们只能在http或服务器块中使用)。 我建议为API创建自己的子域(例如api.my_domain.com),并使用该地址从服务访问API。

示例配置:

代码语言:javascript
复制
server {
    listen 443 ssl;

    ssl_certificate /etc/nginx/ssl/public.crt;
    ssl_certificate_key /etc/nginx/ssl/private.rsa;

    ssl_client_certificate /etc/nginx/ssl/client_ca.pem;
    ssl_verify_client on;

    server_name api.my_domain.com;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app/api;
    }
}
票数 12
EN

Stack Overflow用户

发布于 2021-11-12 13:25:23

这个例子将向您介绍相互认证的世界。本教程向您介绍使用NGINX服务器配置双向安全性和连接网站的步骤。因此,我假设您对上述技术以及使用Bash和Docker都有一定的了解。

代码语言:javascript
复制
┌─────────┐       ┌─────────┐       ┌─────────┐       ┌─────────┐
│         │       │         │       │         │       │         │
│ Browser ├──────►│ nginx 1 ├──────►│ nginx 2 ├──────►│ Website │
│         │ HTTPS │         │ mTLS  │         │ HTTPS │         │
└─────────┘       └─────────┘       └─────────┘       └─────────┘
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35574958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档