Linux クラスターでの暗号化証明書の設定とシークレットの暗号化

この記事では、Linux クラスターでの暗号化証明書の設定と、これを使用してシークレットの暗号化を行う方法について説明します。 Windows クラスターについては、「Windows クラスターでの暗号化証明書の設定とシークレットの暗号化」を参照してください。

データ暗号化証明書を取得する

データ暗号化証明書は、サービスの Settings.xml 内のパラメーター、およびサービスの ServiceManifest.xml 内の環境変数の暗号化と暗号化解除のためにのみ使用されます。 認証や暗号テキストの署名には使用されません。 証明書は次の要件を満たす必要があります。

  • 証明書は秘密キーを含む必要があります。

  • 証明書キーの使用法として、データ暗号化 (10) を指定する必要があります。サーバー認証やクライアント認証を指定することは使用できません。

    たとえば、OpenSSL を使用して必要な証明書を生成するには、次のコマンドを使用できます。

    user@linux:~$ openssl req -newkey rsa:2048 -nodes -keyout TestCert.prv -x509 -days 365 -out TestCert.pem
    user@linux:~$ cat TestCert.prv >> TestCert.pem
    

クラスターへの証明書のインストール

この証明書は、クラスターの各ノードの /var/lib/sfcerts にインストールする必要があります。 サービスを実行しているユーザー アカウント (既定では sfuser) は、インストール済みの証明書 (現在の例では /var/lib/sfcerts/TestCert.pem) に対する読み取りアクセスを持つ必要があります

シークレットを暗号化する

次のスニペットは、シークレットの暗号化に使用できます。 このスニペットは値を暗号化するだけであり、暗号化テキストの署名は行いません。 クラスターにインストールされている同じ暗号化証明書を使用して、シークレット値の暗号化テキストを生成する必要があります

user@linux:$ echo "Hello World!" > plaintext.txt
user@linux:$ iconv -f ASCII -t UTF-16LE plaintext.txt | tr -d '\n' > plaintext_UTF-16.txt
user@linux:$ openssl smime -encrypt -in plaintext_UTF-16.txt -binary -outform der TestCert.pem | base64 > encrypted.txt

encrypted.txt に出力される生成された Base-64 エンコード文字列は、シークレットの暗号化テキストと、暗号化に使用された証明書に関する情報が含まれています。 その有効性は、OpenSSL で暗号化を解除することによって確認できます。

user@linux:$ cat encrypted.txt | base64 -d | openssl smime -decrypt -inform der -inkey TestCert.prv

次のステップ

アプリケーション内で暗号化されたシークレットを指定する方法について学習します。