プロジェクト

全般

プロフィール

Apache mod autoindex » 履歴 » バージョン 3

バージョン 2 (健二 酒井, 2019/11/13 00:04) → バージョン 3/5 (健二 酒井, 2019/11/13 00:05)

# Apache memo

## 概要

あったことを適当に書いてく

## クライアント認証とOption Index

### やりたい事

- 特定ディレクトリにクライアント認証をかけたい
- https://example.com/でアクセスしたときにapacheのインデックスページを出したい

### 設定状況

こんなディレクトリを持っていたとする:

- DocumentRoot
- ClientVerifyDir
- FooDir
- BarDir

こんな設定だったりする:

- ディレクトリClientVerifyDirにクライアント認証をかけている
- ディレクトリDocumentRootにはクライアント認証をかけていない
- DocumentRootにOption +Indexがついている
- index.htmlとかはない

### 何が起きた

https://example.com/でアクセスしたときにSSLのネゴシエーションに失敗する

エラーログはこんな感じ

```
SSL Library Error: error:140890C7:SSL routines:ssl3_get_client_certificate:peer did not return a certificate -- No CAs known to server for verification?
AH02261: Re-negotiation handshake failed
```

結構悩んだのでメモしとく

### 原因(推測)

1. https://example.com/にアクセス
1. インデックスページを生成しようとする
1. DocumentRootのエントリ「ClientVerifyDir」を読もうとする
1. 一方ClientVerifyDirを読むにはクライアント認証が必要
アクセスしているDocumentRootはクライアント認証の提示をブラウザに要求していない
1. クライアント認証は失敗する

って感じなんだろうか。うーん、ディレクトリのread権限がなくて403 Forbidden的なしょぼいエラーと似ている気がする

### 対処

まず、ディレクトリ構造を変更

- DocumentRoot
- SecretsDir
- ClientVerifyDir
- FooDir
- BarDir

クライアント認証かけるディレクトリをSecretsDirより下のものたちに。

```
<Directory "DocumentRoot/SecretsDir/*"> "DocumentRoot/SecretDir/*">
SSLVerifyClient require
</Directory>
```