我有一台 nginx 服务器,我想为其添加客户端 SSL 证书身份验证。我使用的系统 (GitLab) 需要在内部调用自身进行提交钩子等。有没有办法为所有偏僻的(非本地)客户?
我希望 GitLab 可以在没有客户端证书的情况下调用自身,但所有远程客户端都必须使用客户端 SSL 证书进行身份验证。
答案1
即使对 GitLab 一无所知,使用虚拟主机似乎也相当容易做到这一点。创建两个虚拟主机,一个使用 TLS 客户端身份验证用于客户端访问,另一个用于从 GitLab 进行本地访问。例如:
server {
# Listen on your externally accessible address
listen 10.0.0.1:443;
ssl on;
server_name example.com;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_client_certificate /etc/nginx/certs/ca.crt;
ssl_verify_client on;
include shared.conf;
}
server {
# Listen on localhost or some internal-only address
listen 127.0.0.1:443;
ssl on;
server_name localhost;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_client_certificate /etc/nginx/certs/ca.crt;
ssl_verify_client optional;
include shared.conf;
}
将两个虚拟主机应共享的任何配置放入里面shared.conf
以避免重复。