小编Eli*_*ght的帖子

Nginx 仅在特定位置验证客户端证书

我们使用 Nginx 作为我们的 Web 应用程序服务器的反向代理。Nginx 处理我们的 SSL 等,但在其他方面只是充当反向代理。

我们希望为请求提供有效的客户端证书,/jsonrpc但不要求在其他任何地方使用它们。我们发现的最好方法是

server {
  listen       *:443 ssl;

  ssl on;
  ssl_certificate         /etc/nginx/server.crt;
  ssl_certificate_key     /etc/nginx/server.key;
  ssl_client_certificate  /etc/nginx/client-ca.crt;

  ssl_verify_client optional;

  location /jsonrpc {
    if ($ssl_client_verify != "SUCCESS") { return 403; }

    proxy_pass          http://localhost:8282/jsonrpc-api;
    proxy_read_timeout  90;
    proxy_redirect      http://localhost/ $scheme://$host:$server_port/;
  }
}
Run Code Online (Sandbox Code Playgroud)

这适用于大多数浏览器,但某些浏览器(例如 Safari 和 Chrome-on-Android)最终会提示用户无论在网站上的哪个位置都提供客户端证书。

我们如何让 Nginx 接受但并不真正关心除我们/jsonrpc所在位置以外的任何地方的客户端证书?

nginx ssl-certificate

18
推荐指数
2
解决办法
2万
查看次数

如何删除权限并仍然清理 /var/run 中的 pid 文件?

我有一个名为foo. 我的 init 脚本/etc/init.d/foo启动foo守护进程并将其 pidfile 存储在 中/var/run/foo.pid,这似乎是标准位置。因为/etc/init.d/foo必须以 root 身份运行,所以在/var/run.

foo守护进程是真正的程序/usr/sbin/foo,其目的是由init脚本以root身份调用,但然后立即放弃其权限的非特权foo用户。但是,我还希望该/usr/sbin/foo程序在由于严重错误退出时删除其 pidfile。但由于它已经放弃了它的权限,它不再具有从/var/run目录中删除文件的能力。

我目前的方法是使用seteuid而不是setuid删除我的权限,然后在退出之前立即重新提升权限,以便我可以从/var/run. 但是,我遇到了许多与各种库和外部程序有关的问题,这些问题在使用与 uid 不同的 euid 调用时会出现问题。

有没有其他方法可以做到这一点?我想另一种选择是将我的 pidfile 放在一个目录中,该目录可由 rootfoo用户和用户写入。但是我们其他所有PID文件都在/var/run,包括其运行作为非特权用户,所以我喜欢把其他程序PID文件foo.pid的文件那里。

除了使用之外还有什么方法可以做到这一点seteuid吗?

linux daemon

6
推荐指数
1
解决办法
3365
查看次数

标签 统计

daemon ×1

linux ×1

nginx ×1

ssl-certificate ×1