# Gemalto HSMとの統合

## Gemalto HSMとの統合

![](https://2257682436-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpnnyqlSSLL0TJdycg6le%2Fuploads%2F0N2r4bxdktgiwawAFqfn%2Fhsm.jpg?alt=media\&token=477787a4-82af-4d67-9d25-32e99ac7bdc6)

## Keeper SSOコネクトHSMの概要

SSOコネクトの`data`フォルダ内には、ファイルがいくつかあります。このうちの2つのファイルには、サーバーで生成された、保護する必要のある秘密鍵が含まれ、エンドユーザーの自動生成されたマスターパスワードの暗号化と復号化に利用されます。また、暗号化されたデータのローカルキャッシュを含む`.sql`ファイルもあります。重要なのは、このデータフォルダへのアクセスを制限することです。

Windows以外のマシンの場合、`data`フォルダはSSOコネクトのインストールフォルダ (通常は、`$HOME/sso_connect/data`) の下にあります。

Windowsマシンの場合、バージョン14.1以降、`data`フォルダは、`C:\ProgramData\Keeper SSO Connect\data\`にあります。バージョン14.1より前は、`C:\Program Files\Keeper Security\SSO Connect\data\`にありました。

以下に説明するように、HSM (ハードウェアセキュリティモジュール) を利用することで、セキュリティをもう1層追加できます。HSMが使用可能な場合、SSOコネクトのインスタンスごとに暗号鍵が生成され、HSMに安全に保存されます。暗号鍵は、`data/`フォルダ内の重要なプロパティファイルの暗号化に使用されます。

## Gemalto Luna HSMの手順

### HSMの要件

1. Gemalto HSMは、Lunaファームウェア6.2以降を実行している必要があります。

### ネットワーク要件

* TCP/443ポートの開放、Keeper SSOコネクトからwww\.keepersecurity.comへのステートフルな発信
* TCP/22ポートの開放、HSM管理端末からHSMシステムへのステートフルな発信
* TCP/22ポートの開放、CLI 設定用のKeeper SSOコネクトサーバーへの着信
* TCP/1792ポートの開放、HSMシステムとの双方向通信
* TCP/8080ポートの開放、管理者GUIにアクセスするためのKeeper管理者ワークステーションからKeeper SSOコネクトへの着信 (オプション)

### ネットワークアクセスをテスト

```
$ telnet www.keepersecurity.com 443
Trying 52.204.60.27
Connected to www.keepersecurity.com.
Escape character is '^]'.

$ telnet push.services.keepersecurity.com 443
Trying 52.44.0.141...
Connected to push.services.keepersecurity.com.
Escape character is '^]'.

$ ssh <HSMのIPアドレス（ip address of the HSM）>
password: <管理者パスワード（admin-password）>
```

### Linux固有の要件

CentOS 6または7を推奨しますが、以下の操作を追加すれば、Ubuntuでも実行できます。

```
UBUNTUのみ:
$ sudo apt-get install zip unzip # used by the Luna installer
$ sudo apt-get install alien # used by the Luna installer to convert .rpm files
$ sudo apt-get install gcc-multilib # Because some Luna programs are 32-bit
```

`/lib/ld-linux.so.2`が存在する場合は、次のセクションに進みます。

```
/lib/ld-linux.so.2が存在しない場合:
    /usr/lib/ld-linux.so.2が存在する場合:
        $ sudo ln -s /usr/lib/ld-linux.so.2 /lib/ld-linux.so.2
    /lib32/ld-linux.so.2が存在する場合:
        $ sudo ln -s /lib32/ld-linux.so.2 /lib/ld-linux.so.2
    それ以外の場合（Ubuntu）:
        $ sudo yum install gcc-multilib    # use yum or apt-get

Red Hat（CentOS）をご使用の場合は、次の操作を実行します。
    $ sudo yum install glibc-devel.i686
```

### Lunaクライアントをインストール

Keeper SSOコネクトでLuna HSMを使用するには、Lunaクライアントをインストールして、正しく設定する必要があります。

* LunaクライアントソフトウェアをSSOコネクトサーバーにコピーします。 通常、ファイルの名前は、`LunaClient_7.3.0-165_Linux.tar.gz`のようになっています。
* SSOコネクトサーバーにログインします。
* Lunaクライアントのインストーラーを実行します。

```
$ tar xzf LunaClient_7.3.0-165.Linux.tar.gz
$ cd LunaClient_7.3.0-165_Linux/64
$ sudo sh install.sh
-Luna Network HSMを選択
- (N)extを選択
- Luna JSP (Java)を選択
- (I)nstallを選択

$ sudo gpasswd --add <ユーザー名（username）> hsmusers
- 'groups'と入力して、所属するグループを確認します。
- 新しいグループを識別するために、シェルを新たに作成してください。

「~/.bash_profile」ファイルにエイリアスを追加しておくと便利でしょう。
alias luna='sudo /usr/safenet/lunaclient/bin/lunacm'
```

* `$JAVA_HOME/jre/lib/security/java.security`を編集します。

  a. セキュリティプロバイダの一覧を見つけます。

  b. `security.provider.10=com.safenetinc.luna.provider.LunaProvider`を追加します。

  c.ファイルを保存します。

### Lunaへのアクセスを設定

#### 要件

1. HSMマシンのIPアドレスまたはホスト名。
2. 管理者パスワード (別名、セキュリティ責任者のパスワード）。
3. 現在使用中のマシンのIPアドレスやユーザーの名前などの一意の文字列。
4. パーティションのクリプトオフィサーのパスワード。
5. 鍵を保管するパーティション名 (これは設定済みのはずです）。

   > パーティションをまだ設定していない場合は、'lunash'プログラムを使用し、管理者としてログインしてパーティションを作成してください。Gemalto Lunaのドキュメントをご参照ください。

#### HSMの設定を確認

1. Lunaクライアントを起動します。

```
$ luna
lunacm (64-bit) v7.3.0-165.Copyright (c) 2018 SafeNet.All rights reserved.

lunacm:> clientconfig deploy -n <HSMのIPアドレス（hsm-ip-address）> -c <一意の文字列（unique-string）> -par <パーティション名（partition-name）> -ur admin -pw <HSMの管理者パスワード（hsm-admin-password）> -v

... make sure it finishes successfully


Available HSMs:

Slot Id -> 0 
Label -> [ご利用のパーティション名]
Serial Number -> 12345678987654321
Model -> LunaSA 7.3.0 
Firmware Version -> 7.3.0 
Configuration -> Luna User Partition With SO (PW) Key Export With Cloning Mode
Slot Description -> Net Token Slot


Current Slot Id:0


lunacm:>role login -n co
enter password: クリプトオフィサーのパスワード

Command Result :No Error

lunacm:>par con # パーティションの内容を表示
lunacm:>exit
```

### HSMにアクセスするためにKeeper SSOコネクトを設定

通常のSSOコネクト設定の質問に加えて、以下に示すようなHSM固有の質問がいくつかあります。

```
$ java -jar SSOConnect.jar -config

... 通常のSSO Connect設定の質問...

Configure Secure Key Storage (y/N): y
IMPORTANT:Make sure that this server is already connected to a networked HSM or other secure key storage device.
Type of Secure Key Storage (Gemalto SafeNet Luna HSM): <return>
Secure storage device access parameters (slot,password): <return>
  slot:0
  password: クリプトオフィサーのパスワード
A certificate chain is required in order to store an encryption key.
You may use the SSL certificate file entered previously, or use a different one.
Certificate chain file (/home/ubuntu/keeperSSO/data/sso_keystore.jks): <return>
Certificate chain file password (none): <return>
1 certificates found
Enable Secure Key Storage (Y/n): y
```

### トラブルシューティング

#### 設定のトラブルシューティング

1. サーバーが適正であることを確認します。CentOS 6または7を推奨します。現時点ではWindowsはサポートしていません。

   ```
   $ rpm -q centos-release
   centos-release-7-6.1810.2.el7.centos.x86_64

   $ cat /etc/centos-release
   CentOS Linux release 7.6.1810 (Core)
   ```
2. Lunaクライアントがサーバーに正しくインストールされていることを確認します。Lunaクライアントを実行して、クリプトオフィサーとしてログインし、正常にログインしてパーティションの内容を表示できることを確認します。

   ```
   $ sudo /usr/safenet/lunaclient/bin/lunacm

   luna> role login -n co
   （パスワードを入力）
   luna> par con
   このHSMを過去にKeeperで使用したことがある場合は、Keeper SSO Properties 514320201573のような名前の既存の鍵があるはずです。
   ```
3. Java 1.8またはJava 11が利用可能であることを確認します。

   ```
   $ java -version
   java version "1.8.0_201"
   Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
   Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
   ```
4. Lunaライブラリが利用可能であることを確認します。

   ```
   $ ls sso_connect/*Luna*
   libLunaAPI.so   LunaProvider.jar
   ```
5. 正しいポートが解放されていることを確認します。ファイアウォールは、ポート22および1792で発着信両方の接続を許可する必要があります。

   ```
   ファイアウォールがローカルの場合は、以下のコマンドラインを使用します。
   $ iptables -xvn -L
   ```
6. ユーザーがhsmusersグループのメンバーであることを確認します。

   ```
   $ whoami
   centos

   $ groups
   centos adm wheel systemd-journal hsmusers

   **Lunaソフトウェアでは、Lunaライブラリにアクセスするユーザーがhsmusersグループのメンバーであることが必要です。
   $ sudo gpasswd --add centos hsmusers
   このコマンドが正しく動作したことを確認するには、新しいシェルを開く必要があります。
   ```
7. SSOconnectがマシンにインストールされていることを確認します。
   * 通常、`sso_connect`、`KeeperSSO`、またはそれに類似した名前のフォルダがあります。フォルダには多数のjarファイルが含まれます。
8. `data`フォルダに不完全な設定がないことを確認します。
   * 以前KeeperSSOを設定しようとして失敗した場合は、

     `KeeperSSO/data`フォルダを削除してもう一度やり直すのが安全です。
9. アプリが`data/`フォルダに対する読み取り/書き込み権限を持っていることを確認します。

   ```
   $ ls -ld data
   drwxrwxr-x 2 centos centos  181 Feb  4 19:42 data
   ```

#### 動作のトラブルシューティング

1. ログファイルにエラーがないか確認します。SSOconnectのセキュアキーストレージサブシステムは、問題が発生すると、ログにERROR行を出力します。

   ```
   $ more logs/ssoconnect.log
   ```
2. エラーは、「セキュアキーストレージが使用できません (Unable to use Secure Key Storage）」といったパターンになります。これは、以下のいずれかの問題を示しています。

   ```
     a.Network problem accessing the HSM
        -「設定のトラブルシューティング」の手順2を実行して、HSMへのアクセスをご確認ください。

     b.data/sks.properties is missing
        -data/sks.propertiesがない場合は、SSOConnectを再設定する必要があります。

     c.The encrypted property files are missing
        -data/instance.encpとdata/shared.encpの有無を確認します。

     d.The encryption key is missing from the HSM
        -HSMパーティションが消去された可能性があります。 SSOConnectを再設定する必要があります。

     e.The server may be out of disk space
        -ディスク領域を一部消去します。

     f.The encryption algorithm used is not supported on the HSM
        -アルゴリズムは、AES/GCM/NoPaddingです。 デバイスの販売業者にお問い合わせください。

     g.The file data/sso-keystore.jks is missing
        -このプログラムは、sso_keystore.jksファイルからの証明書チェーンがないと、HSMに鍵を保管できません。
          ファイルを検索し、データフォルダにあることをご確認ください。
   ```

## バックアップ

`data`フォルダにはSSOコネクト設定ファイルが含まれています。少なくとも、最初の設定の後、および設定を変更するたびにバックアップする必要があります。設定ファイル以外にも、`data`にはデータファイルがありますが、こちらは、Keeperサーバーとの同期が外れると自動的に更新されます。そのため、通常の定期バックアップを利用してもよいですが、必須ではありません。すべてのコンフィグレーション設定がインスタンス間で共有されているわけではないため、各SSOコネクトインスタンスの`data`フォルダを個別にバックアップする必要があります。

Windows以外のマシンの場合、`data`フォルダはSSOコネクトのインストールフォルダ (通常は、`$HOME/sso_connect/data`) の下にあります。

Windowsマシンの場合、バージョン14.1以降、`data`フォルダは、`C:\ProgramData\Keeper SSO Connect\data\`にあります。バージョン14.1より前は、`C:\Program Files\Keeper Security\SSO Connect\data\`にありました。

## 回復

### サーバーの障害

SSOコネクトサーバーが停止した場合は、上記の標準的なインストール手順に従って、代替マシンにLunaとSSOコネクトを再インストールする必要があります。

上記のとおり、`data`フォルダをバックアップした場合は、データフォルダを復元してから、SSOコネクトを起動してください。(SSOコネクトを起動したため) `data`フォルダがすでに存在する場合は、SSOコネクトを停止し、データフォルダ内のファイルをすべて削除し、バックアップしたデータフォルダからファイルをコピーして、SSOコネクトを再起動します。SSOコネクトが正常に起動するはずです。

`data`フォルダをバックアップしていなかった場合、またはバックアップが古い場合は、代替インスタンスを新規でインストールするように設定する必要があります。SSOコネクトのインストールガイドに従ってください。

### HSMの障害

HSMを使用する場合、HSMは設定ファイルの復号化に使用した暗号鍵を`data`フォルダに保存します。HSMへのアクセスは、SSOコネクトの起動時に1度、設定が変更されるときにも随時行われます。設定ファイルが暗号化されており、HSMに保存した暗号鍵が失われたか、またはアクセスできない場合は、暗号化されていない設定ファイルを新規作成するために、SSOコネクトインスタンスを再度設定する必要があります。`data`フォルダの内容を削除し、SSOコネクトをもう一度最初から設定します。

HSM/SKSの使用を無効にするには、「SKSを有効にしますか?  (Enable SKS?）」という設定の質問に「いいえ（no）」を入力するか、または`-disableSKS`コマンドラインオプションを使用します。
