Proxy支持https证书验证

来自SEnginx
跳转至: 导航, 搜索

目录

Proxy支持https证书验证

概要

本功能在nginx原有的proxy模块上增加了设置证书的功能,在连接后端的https服务器时,可以使用设置的证书进行ssl握手,此项功能主要用于在后端的https服务器开启了“客户端证书验证”的情况下,可以握手成功。
此外,还增加了对服务器证书验证的功能,即:可以在SEnginx上设置给服务器证书签名的CA证书,用于对服务器进行验证。

本功能在1.5.13版本中引入。

命令

proxy_ssl_certificate

语法 proxy_ssl_certificate file;
默认值 -
上下文 HTTP/Server/Location

指定一个证书和后端https服务器握手的时候使用。此证书为PEM格式,此命令的其他行为类似于nginx的ssl_certificate命令
举例:

proxy_ssl_certificate        certs/client.crt;


proxy_ssl_certificate_key

语法 proxy_ssl_certificate_key file;
默认值 -
上下文 HTTP/Server/Location

指定一个和证书匹配的私钥,格式为PEM。此命令的其他行为类似于nginx的ssl_certificate_key命令
举例:

proxy_ssl_certificate_key        certs/client.key;


proxy_ssl_verify_server

语法 proxy_ssl_verify_server off/on/optional/optional_no_ca;
默认值 off
上下文 HTTP/Server/Location

开启服务器证书验证功能,此命令的参数的含义和nginx的ssl_verify_client命令的含义一致

proxy_ssl_verify_depth

语法 proxy_ssl_verify_depth number;
默认值 1
上下文 HTTP/Server/Location

指定证书链的验证深度,此命令的行为和nginx的ssl_verify_depth命令类似

proxy_ssl_server_certificate

语法 proxy_ssl_server_certificate file;
默认值 -
上下文 HTTP/Server/Location

指定用于验证服务器证书的CA证书,PEM格式,此命令的行为和nginx的ssl_client_certificate命令类似

例子

用openssl命令准备如下证书/私钥:

  • ca.crt
  • server.crt/server.key
  • client.crt/client.key

其中,server.crt和client.cert用同一个CA生成,ca.crt为此CA的证书。server.key和client.key是对应的私钥文件。将server.crt/server.key/ca.crt复制到后端服务器上,将client.crt/client.key/ca.crt复制到SEnginx所在的反向代理服务器上。

服务器要求客户端验证的例子

后端服务器端的设置,创建一个server,开启https并进行客户端证书验证,一下是SEnginx/nginx的设置,也可以用其他的web server软件:

server {
    listen 443 ssl;


    ssl_certificate        certs/server.crt;
    ssl_certificate_key    certs/server.key;
    ssl_verify_client      on;
    ssl_client_certificate certs/ca.crt;


    ...
}

反向代理服务器的设置:

backend {
    server some-ip:443;
}

server {
    listen 80;


    location / {
        proxy_ssl_certificate        certs/client.crt;
        proxy_ssl_certificate_key    certs/client.key;


        proxy_pass https://backend;
    }
}

双向认证的例子

后端服务器设置不变,反向代理服务器的设置:

backend {
    server some-ip:443;
}

server {
    listen 80;


    location / {
        proxy_ssl_certificate        certs/client.crt;
        proxy_ssl_certificate_key    certs/client.key;
        proxy_ssl_verify_server      on;
        proxy_ssl_server_certificate certs/ca.crt;


        proxy_pass https://backend;
    }
}
个人工具
名字空间
  • 页面
  • 讨论

变换
操作
导航
其他语言
工具箱