web-dev-qa-db-ja.com

ApacheとディレクトリごとのCAのサポート

ApacheでDebianWheezyを使用していて、SSLでいくつかのパスを構成してクライアント証明書で保護しました。

   <Location /admin-page>
     SSLCACertificateFile    /etc/Apache2/ssl/leos.pem
     SSLVerifyClient require
     SSLVerifyDepth  0
     SSLRenegBufferSize 10486000
   </Location>

Jessieにアップグレードしたので、この部分をコメントアウトしない限り、Apache2を起動できません。

Mar 20 16:38:07 Apache2[1649]: AH00526: Syntax error on line 51 of /etc/Apache2/sites-enabled/default-ssl.conf:
Mar 20 16:38:07 Apache2[1649]: Your SSL library does not have support for per-directory CA

どうすればそれを機能させることができますか?

2
Leos Literak

「SSLCACertificateFile/etc/Apache2/ssl/leos.pem」という行をLocationスタンザの外に移動する必要があります(SSLCertificateFileファイルと一緒に配置します)。すでにSSLCACertificateFile(たとえば、外部企業からのSSL証明書に使用される)があり、クライアント側の認証用に自己署名CAを追加する場合は、CA証明書をそのファイルに追加するだけです(単一の.crtファイルで可能です)。複数の証明書があります)。

それでも、保護したいディレクトリの検証のみを強制できます。ただし、次のようなLocationスタンザを使用します。

<LocationMatch "^/(admin|internal)($|/)">
          SSLVerifyClient require
           SSLVerifyDepth 1
           SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
           and %{SSL_CLIENT_I_DN_O} in {"CompanyName} \
           and %{SSL_CLIENT_S_DN_OU} in {"OU1","OU2"} )
</LocationMatch>

これが場所の一致ではなく場所で機能しない理由はわかりませんが、試したことはありません。プロキシに実装したので、ロケーションマッチを使用します。

証明書に一致するようにSSL_CLIENT_ *行を削除/変更することもできます。私が働いているある場所では、さまざまな人のためにさまざまな種類の証明書があり、さまざまな権限があります-組織単位を識別し、適切な証明書とともにさまざまなグループにさまざまな権限を許可します-これはさまざまな場所へのアクセスに変換されます。

同じVMコンテナは、証明書なしでエンドユーザーによって使用されます-もちろん、「SSLVerifyClientrequire」でパーツにアクセスすることはできません。

3
davidgo