2017-01-06 21 views
0

ブラウザでクライアント証明書を有効にしてnginxでSSLを有効にしました。これで私はポート443を通してHTTPS経由で自分のサイトにアクセスできます。クライアント証明書に基づくnginx認証

私が今探しているのは、クライアントに関するこの情報を使用して、API(URL)の異なる部分へのアクセスを許可するが、アクセスを拒否することです他の部分に。私は次のようなもので、この使用してIPアドレスとngx_http_access_moduleを行うことができます。私が探している何

location /allowed/loc { 
    allow 192.168.1.0/24; 
} 

location /protected/loc { 
    allow 192.168.1.10; 
    deny all; 
} 

/クライアントの証明書ではなく、IPアドレスに基づいて拒否できるようにするいくつかの方法で、つまりこれに近いもの:

location /authorize/by/cert { 
    allow client-cert-serial; 
    deny all; 
} 

nginxでこれを行う方法はありますか、それとも別のものを使用する必要がありますか?あるいは、私はこれについてすべて間違っていると思いますか?

ありがとうございました。

答えて

1

ifディレクティブおよびsslモジュール変数:$ssl_client_s_dn,$ssl_client_serialを使用してアクセスチェックを行うことができます。例

location /not/for/jhon/ { 
    if ($ssl_client_s_dn ~ Jhon) { 
     return 403; 
    } 
} 

mapディレクティブを認定許可のリストを維持するための良い方法。例

map $ssl_client_s_dn $ssl_access { 
default 0; 
01 1; 
02 1; 
} 

server { 
    ... 
    location /authorize/by/cert { 
    if ($ssl_access = 0) { 
     return 403; 
    } 
    } 
} 

や、ルールは

map $ssl_client_s_dn $ssl_access { 
default ""; 
01 -a-b-c-; 
02 -b-e-; 
} 

server { 
    ... 
    location /authorize/by/cert/a { 
    if ($ssl_access !~ -a-) { 
     return 403; 
    } 
    } 

    location /authorize/by/cert/b { 
    if ($ssl_access !~ -b-) { 
     return 403; 
    } 
    } 
} 

より複雑になる。しかしhttps://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/前にこの記事を読むことができます。 ifは、returnまたはrewrite ... last;のディレクティブでのみ使用してください。

+0

これは素晴らしいです、ありがとうございます。それは余分な情報のための余分なリンクを含めるためです。 – jayemar

関連する問題