OpenSSLを使用した自己署名証明書および秘密キーの生成ガイドライン

自己署名証明書を使用すると、Oracle NoSQL Databaseプロキシにセキュアに接続できます。この項では、OpenSSLを使用したセキュアな接続のために、自己署名証明書およびその他の必須ファイルを生成するステップについて説明します。

前提条件として、ホスト・マシンにOpenSSLをダウンロードしてインストールします。OpenSSLを参照してください。

証明書を生成する前に、セキュリティで保護する必要がある様々なホスト名、ドメイン、サブドメインおよびIPアドレスをすべてリストします。どのようにアプリケーションがOracle NoSQL Databaseプロキシに接続するかを知ることで、SSL証明書やTLS証明書の必要性がわかります。まず、セキュリティで保護する必要があるホスト名、ドメインおよびサブドメインの数を特定する必要があります。これは、アプリケーションとOracle NoSQL Databaseプロキシの間のトラフィックの暗号化に必要な、適切なSSL証明書やTLS証明書、または複合証明書を特定する際に役立ちます。

OpenSSLを使用して自己署名証明書および秘密キーを生成するには、次のステップを実行します。

  1. 構成ホストで、証明書ファイルを配置する必要があるディレクトリにナビゲートします。
  2. 次のいずれかのOpenSSLコマンドを使用して自己署名証明書と秘密キーを生成します。プロンプトが表示されたら、証明書ファイル用のセキュアな任意のパスワードを入力します。

    ノート:

    この例では、すべてのプロンプト・パスワードに123456を使用します。
    openssl req -x509 -days 365 -newkey rsa:4096 -keyout key.pem -out certificate.pem
     -subj "/C=US/ST=CA/L=San/CN=*.example.com/emailAddress=localhost@oracle.com"
    or
    openssl req -x509 -days 365 -newkey rsa:4096 -keyout key.pem -out certificate.pem
     -subj "/C=US/ST=CA/L=San/CN=proxy-nosql.example.com/emailAddress=localhost@oracle.com"
    ここで、subjでのCNは、NoSQL Databaseプロキシ・サーバーのホスト名、またはNoSQL Databaseプロキシのドメイン名にマップする必要があります。
    自己署名証明書生成時のCNの使用とSAN(オプション)の使用:
    • 共通名(CN)は、NoSQL Databaseプロキシ・サーバーのホスト名、またはNoSQL Databaseプロキシ・サーバーのドメイン名を指定するために使用します。
    • クライアントは、Oracle NoSQL Databaseプロキシに接続しようとするときに、SSL証明書を取得し、接続先となるNoSQL Databaseプロキシ・サーバーのホスト名またはNoSQL Databaseプロキシ・サーバーのドメイン名を、そのSSL証明書内で指定されているCNと比較します。それらが完全に同じである場合は、そのSSL証明書を使用して接続を暗号化します。そうでない場合は、接続に失敗します。
    • 標準X509では、1つのSSL証明書で使用できるCNは1つのみであると定義されています。つまり、1つのSSL証明書は、1つのNoSQL Databaseプロキシ・サーバー・ホスト名またはNoSQL Databaseプロキシ・サーバー・ドメイン名にのみ使用できます。
    • この制限事項を解決するには、サブジェクトの代替名(SAN)を作成します。SANは、SSL証明書内で複数名または多数のCNを定義するために使用します。
    • SANは、SSL証明書内で別個の属性として示されます。SANの例を次に示します。
      openssl req -x509 -days 365 -newkey rsa:4096 -sha256   \
        -keyout key.pem  -out certificate.pem -extensions san -config \
        <(echo "[req]"; 
          echo distinguished_name=req; 
          echo "[san]"; 
          echo subjectAltName=DNS:proxy-nosql,IP:10.0.0.9
          ) \
        -subj "/C=US/ST=CA/L=San/CN=proxy-nosql.example.com/emailAddress=localhost@example.com"
  3. 秘密キーをPKCS#8形式に変換します。プロンプトが表示されたら、暗号化のためのセキュアな任意のパスワードを入力します。
    openssl pkcs8 -topk8 \ 
    -inform PEM -outform PEM \ 
    -in key.pem -out key-pkcs8.pem
ディレクトリ内に次のファイルが生成されます。
  • key.pemは秘密キーです。
  • key-pkcs8.pemは、PKCS#8形式の秘密キーです。
  • certificate.pemは、pem形式のSSL証明書ファイルです。

ノート:

キーがPKCS#5 v2.0アルゴリズムで暗号化されている場合は、次の変換を行う必要があります。そうしないと、サポートされていないアルゴリズムが原因で、ファイルに有効な秘密キーが含まれていないことを示すIllegalArgumentException例外が発生する可能性があります。暗号化アルゴリズムは、-v1フラグを使用したPKCS#5 v1.5またはPKCS#12アルゴリズムを指定することで、OpenSSLのpkcs8ユーティリティを介して変換できます。次のコマンドは、キーの暗号化アルゴリズムをPBE-SHA1-3DESに変換します。
openssl pkcs8 -topk8 -in <PKCS#5v2.0_key_file> -out <new_key_file> -v1 PBE-SHA1-3DES
また、Javaドライバを使用している場合は、driver.trustファイルも必要となります。このdriver.trustファイルは、その他の言語ドライバには必要ありません。driver.trustファイルを生成するには、証明書をJavaキーストアにインポートします。プロンプトが表示されたら、キーストア・パスワードを入力します。
keytool -import -alias example -keystore driver.trust -file certificate.pem