Как добавить проверки для нескольких конкретных отпечатков пальцев_клиента_ssl в конфигурации Nginx?

В дополнение к обычной проверке цепочки ЦС, я хотел бы, чтобы раздел Nginx serverразрешал только отпечатки определенных клиентских сертификатов.

Я мог бы найти, как проверить наличие одного отпечатка пальца, но я не уверен, как объединить несколько отпечатков пальцев, потому что 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
задан 23 September 2019 в 18:45
1 ответ

NGINX поддерживает сопоставление регулярных выражений в рамкахifусловий , так что вы можете сделать следующее:

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

Очевидно, эта строка может получиться довольно длинной , но зависит от вкуса/ вариант использования может быть предпочтительнее.

0
ответ дан 15 November 2021 в 16:05

Теги

Похожие вопросы