web-dev-qa-db-ja.com

Apache2のクライアント認証から一部のパス/ページを除外する方法

クライアント認証を有効にしてApacheサーバーをセットアップしようとしています。顧客が有効なクライアント証明書を使用してコンテンツにアクセスできるようにするため。

たとえば、サーバーを次のように実行しているとします。

https://myserver/myservice/

また、認証情報を提供することにより、クライアント証明書を取得するためのインターフェイスを顧客に提供する必要があります。

https://myserver/myservice/register

アップロード情報が確認されると、クライアント証明書が返されます。

私が正しく理解していれば、このパスは、証明書の生成に使用されるという理由だけで、クライアント認証メカニズムから除外する必要があります。だから問題は、これを達成するためにhttpd設定をどのように指定できますか?

私の現在の構成は次のようになります。

ProxyPass /myservice/register http://localhost:4444/register

<Virtualhost *:443>
    ServerName myserver
    DocumentRoot /path/to/my/server/root
    ProxyPass /myservice/ ajp://localhost:8009/myservice/
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCertificateFile /path/to/server.cert
    SSLCertificateKeyFile /path/to/server.key
    ...
    SSLVerifyClient require
    SSLVerifyDepth 10
    SSLCACertificateFile /path/to/ca.buddle.pem
</Virtualhost>

この設定で、クライアント証明書を取得できます

http://myserver/myservice/register

次に、それを使用してサービスにアクセスします。それでも、80ポートを閉じることができるように、httpsに設定することはできませんでした。

2
Alan Duan

これで、ターゲットURLパスを使用するか除外するだけで解決策が得られました。

<Virtualhost *:443>
    ServerName myserver
    DocumentRoot /path/to/my/server/root
    ProxyPass /myservice/register http://localhost:4444/register
    ProxyPass /myservice/ ajp://localhost:8009/myservice/
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCertificateFile /path/to/server.cert
    SSLCertificateKeyFile /path/to/server.key
    ...
    SSLVerifyClient require
    SSLVerifyDepth 10
    SSLCACertificateFile /path/to/ca.buddle.pem

    <LocationMatch ^/myservice/register$>
        SSLVerifyClient none
    </LocationMatch>

</Virtualhost>
2
Alan Duan