# SSL/TLSクライアント認証

Keeperコネクションマネージャーは、SSL/TLSクライアント認証を要求するように設定できます。

### クライアント証明書の概要

Keeperコネクションマネージャーにデバイスベースのアクセスセキュリティを実装するには、NGINXクライアント証明書を使用してこれを実現できます。 クライアント証明書はユーザーの承認済みデバイスのウェブブラウザにインストールされ、サーバーはクライアント証明書がインストールされたデバイスからの通信のみを受け入れます。

この高度な保護を有効にする手順を以下で説明します。

1. **認証局 (CA) 鍵の作成**

強力な自動生成パスフレーズを使用してCA鍵を生成します。パスフレーズは必ずKeeperボルトに保存してください。

```
openssl genrsa -des3 -out ca.key 4096
```

2. **CA証明書の作成**

CA鍵を使用して証明書を作成します。質問に答えるときは、コモンネームとメールは空のままにしておくことができます。 国、州、地域、組織について入力した情報は、後で証明書を更新するときに必要になる場合があるため保存します。

```
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
```

補足:証明書のパラメータを分析するには、以下のコマンドを実行します。

```
openssl x509 -in ca.crt -noout -text
```

3. **クライアント鍵の作成**

エンドユーザーデバイスのクライアント鍵を生成する必要があります。すべてのデバイスに対して1つの鍵を生成するか、各ユーザーが独自の鍵を生成して証明書を要求するかを設定できます。どちらにも設定できます。 強力な自動生成パスフレーズを使用してクライアント鍵を生成します。パスフレーズは必ずKeeperボルトに保存してください。

```
openssl genrsa -des3 -out client.key 4096
```

4. **CSRの作成**

クライアント鍵ごとにCSRを生成して、署名付き証明書を作成します。

```
openssl req -new -key client.key -out client.csr
```

5. **CA鍵でCSRに署名**

```
openssl x509 -req -days 365 -in client.csr \
 -CA ca.crt -CAkey ca.key \
 -set_serial 01 -out client.crt
```

要求に署名するには、手順1で生成したCAパスフレーズを入力する必要があります。

これで、署名付きクライアント証明書 (client.crt) が利用できるようになりました。

6. **クライアント証明書をPKCS#12に変換**

証明書をウェブブラウザにインポートするには通常、PKCS#12のpfxファイルが必要です。以下のコマンドを使用して、client.pfxファイルを生成します。パスフレーズが必要になります。このパスフレーズは、証明書をインストールする必要があるユーザーごとに設定されるため、使用はこの目的に限定されます。

```
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
```

7. **NGINXの設定に追加**

SSL/TLSクライアント認証を要求するように`keeper/guacamole-ssl-nginx`イメージを設定するには、環境変数`CLIENT_CERTIFICATE_FILE`を指定します。ユーザーは、この証明書によって署名された秘密鍵にブラウザがアクセスできる場合にのみ、ブラウザを使用してNGINXのKCMインスタンスに接続できるようになります。

この変数は、コンテナ内のファイルを指すという点で`CERTIFICATE_FILE`環境変数に似ていますが、この場合は、\_クライアント\_の秘密鍵の認証に使用される証明書を管理します。

以下に例を示します。

```
    ssl:
        image: keeper/guacamole-ssl-nginx:2
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        environment:
            ACCEPT_EULA:"Y"
            GUACAMOLE_HOSTNAME: guacamole
            SSL_HOSTNAME: keeper.mycompany.com
            CLIENT_CERTIFICATE_FILE: "/path/in/container/ca.crt"
        volumes:
            - "/local/path/to/keys:/path/in/container/"
```

設定を更新したら、コンテナを再起動します。

8. **設定のテスト**

ユーザーのマシンにクライアント証明書をインストールする前に、Keeperコネクションマネージャーのログイン画面を読み込んで、以下の403エラーが送信されることを確認します。

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2FQrSXQAoBUK7m3AmRI00U%2Fimage.png?alt=media&#x26;token=34629e5c-f7b2-4b91-b3b2-5ee3fe03cc95" alt=""><figcaption><p>クライアント証明書がない場合の403エラー</p></figcaption></figure>

9. **クライアント証明書のインストール**

Keeperコネクションマネージャーにアクセスする必要があるエンドユーザーのクライアントデバイスごとに、クライアント証明書をユーザーのブラウザまたはマシンにインストールする必要があります。クライアント証明書のインストールはプラットフォームによって異なります。

**Windowsの場合**

手順6のクライアント証明書 (client.pfx) をダブルクリックまたは右クリックして、クライアント証明書のパスフレーズを入力します。

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2FA5IxCbhsAYKIauxrfX6a%2Fimage.png?alt=media&#x26;token=92b8f8e8-22ec-413e-9a5b-c1e629cd5d80" alt=""><figcaption><p>Windowsクライアント証明書のインストール</p></figcaption></figure>

ブラウザを再起動します。

次回Keeperコネクションマネージャーを読み込んだときに、証明書を承認してください。

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2F1ALVebroaZ88lxnoteya%2Fimage.png?alt=media&#x26;token=2cb23969-16fb-48eb-a6c3-236b60937979" alt=""><figcaption><p>クライアント証明書を選択</p></figcaption></figure>

**Mac OSの場合-Chrome**

client.pfxファイルをダブルクリックするか、キーチェーンログイン証明書セクションに読み込んでインポートします。 証明書の「Trust」 (信頼) セクションで、「Always Trust」 (常に信頼) を選択します。

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2Fpct8xkcHSJt60qHK2967%2Fimage.png?alt=media&#x26;token=69e5e7ae-6e58-4aab-a6a7-d2a61f28ef7a" alt=""><figcaption><p>証明書のインポート</p></figcaption></figure>

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2FAUk3EcRwEi8TjYtJ12k9%2Fimage.png?alt=media&#x26;token=ad1b1dac-ab59-403d-bc03-de146c38fa2d" alt=""><figcaption><p>信頼済みの表示</p></figcaption></figure>

ブラウザを再起動し、Keeperコネクションマネージャーのログイン画面を読み込んで証明書を選択します。

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2F1xsjjYtIEmZwp0YJFnGj%2Fimage.png?alt=media&#x26;token=e1ce42a6-d4b9-4786-97b3-a7b4442cdbac" alt=""><figcaption><p>クライアント証明書を選択</p></figcaption></figure>

**Mac OSの場合-Firefox**

Firefoxを開いて、画面右上のメニューをクリックし、「オプション」をクリックし、「プライバシーとセキュリティ」メニューより「証明書を表示(C)」をクリックします。「認証局証明書」タブより「インポート」をクリックし、client.pfx証明書ファイルを選択してインポートします。

<figure><img src="https://4041518992-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZ7s6LQJaKa1G17O787JG%2Fuploads%2FNJiNXNA6tckjsEse4tKw%2Fimage.png?alt=media&#x26;token=56101e68-5157-4947-bb63-187bee8ddc54" alt=""><figcaption><p>Firefoxで証明書をインポート</p></figcaption></figure>

インポートが成功すると、Keeperコネクションマネージャーのログイン画面が読み込まれます。

### オプションパラメータ

SSL/TLS認証の動作をさらに変更するために、以下の追加の環境変数も利用できます。

<table data-header-hidden><thead><tr><th width="198"></th><th width="390.3333333333333"></th><th></th></tr></thead><tbody><tr><td><strong>変数</strong></td><td><strong>説明</strong></td><td><strong>デフォルト</strong></td></tr><tr><td><code>ADDITIONAL_PROXY_CONFIG</code></td><td>NGINXがGuacamoleのプロキシとして機能するように設定する<code>location</code>ブロック内に含める必要のある、任意の追加のNGINX設定ステートメント。</td><td></td></tr><tr><td><code>SSL_VERIFY_CLIENT</code></td><td>NGINXがクライアント（ブラウザ）が提示する証明書を要求および検証する方法とその要否を管理します。NGINXの<code>ssl_verify_client</code>ディレクティブで設定します。</td><td>on</td></tr><tr><td><code>SSL_VERIFY_DEPTH</code></td><td>NGINXがクライアントの証明書を検証しようとするときに、クライアントの証明書チェーンを確認する深さを管理します。NGINXの<code>ssl_verify_depth</code>ディレクティブで設定します。</td><td>1</td></tr></tbody></table>
