如何在 Nginx 配置中添加对多个特定 ssl_client_fingerprints 的检查?

如何在 Nginx 配置中添加对多个特定 ssl_client_fingerprints 的检查?

除了通常的 CA 链验证之外,我还希望 Nginxserver部分仅允许特定的客户端证书指纹。

我可以找到如何检查单个指纹,但我不确定如何组合多个指纹,因为 Nginx 不支持or,并且map不允许在server部分内。

所以,现在我有一个像这样的丑陋的解决方法:

    ssl_client_certificate /usr/local/share/ca-certificates/trusted_chain.pem;
    ssl_verify_client on;
    ssl_verify_depth 3;

    if ( $ssl_client_fingerprint = "12a4f0abc935cc0dd0f6fdcc0d56682d7f5c15a1" ) {
        set $whiteclient 1;
    }
    if ( $ssl_client_fingerprint = "12a4f0abc935cc0dd0f6fdcc0d56682d7f5c15a2" ) {
        set $whiteclient 1;
    }
    if ( $ssl_client_fingerprint = "12a4f0abc935cc0dd0f6fdcc0d56682d7f5c15a3" ) {
        set $whiteclient 1;
    }
    if ( $whiteclient != 1 ) {
         return 403;
    }

有没有更好的方法来做到这一点?

答案1

NGINX 支持正则表达式匹配if状况因此您可以执行以下操作:

if ($ssl_client_fingerprint !~ "12a4f0abc935cc0dd0f6fdcc0d56682d7f5c15a1|12a4f0abc935cc0dd0f6fdcc0d56682d7f5c15a2|12a4f0abc935cc0dd0f6fdcc0d56682d7f5c15a3") {
  return 403
}

显然这条线可以得到相当长但根据口味/使用情况,它可能更可取。

相关内容