3 他のツールを使用したTLS/SSLの設定

この章では、TLS/SSLの設定に使用できるその他のツールについて説明します。

あるツールを別のツールよりも選択する理由は様々です。たとえば、一部のツールは他のツールよりも軽量であったり、Javaのkeytoolなど特定の環境を対象としたものもあります。証明書のインフラストラクチャ管理のみでなく、他の様々なセキュアなネットワーク・プロトコルやセキュリティ標準を可能にするアプリケーションを開発するための他の機能、API、ライブラリを含むものもあります。このマニュアルでは、このような機能に関する詳細については説明していませんが、これらの詳細は、対応するマニュアル・ページおよびオープン・ソース・プロジェクトからのドキュメントを参照してください。

GnuTLS

この章では、Oracle Linuxで使用可能なcerttool GnuTLS証明書ツールと、それを使用して証明書署名リクエスト、自己署名証明書および個人所有のCA証明書を作成する方法について説明します。GnuTLSは、通信を保護するためにSSL、TLSおよびDTLSプロトコルおよびテクノロジを実装するライブラリです。これには、セキュアな通信プロトコルにアクセスするためにC言語で記述されたアプリケーション・プログラミング・インタフェース(API)と、X.509、PKCS #12、OpenPGPなどの構造を解析および記述するための追加のAPIが含まれます。

certtoolを使用するには、Application Streamリポジトリから使用可能なgnutls-utilsパッケージをインストールします。
sudo dnf install gnutls-utils

ノート:

Oracle Linux 7を使用している場合は、dnfのかわりにyumを使用して、ol7_latest yumリポジトリからパッケージをインストールできます。

次の例は、certtoolコマンドを使用して、証明書署名リクエスト、自己署名証明書および個人所有CA証明書を作成する方法を示しています。

  • 秘密キーを生成するには、次を実行します。

    sudo certtool --generate-privkey --outfile private_key_file
                

    前述の例で、private_key_fileは秘密キー・ファイルの名前です。

  • CSRを生成するには、次を実行します。

    sudo certtool --generate-request --load-privkey private_key_file --outfile csr_file
                

    前述の例で、csr_fileはCSRファイルの名前です。

  • 自己署名証明書を生成するには、次を実行します。
    sudo certtool --generate-self-signed --load-privkey private_key_file --outfile self_signed_certificate_file 
                

詳細は、certtool(1)マニュアル・ページおよびGnuTLSオープン・ソース・プロジェクト(https://www.gnutls.org/)を参照してください。

NSS

この章では、Oracle Linuxで使用可能なcertutilネットワーク・セキュリティ・サービス(NSS)証明書ツール、およびこれを使用して証明書署名リクエスト(CSR)、自己署名証明書、およびアプリケーションの証明書と秘密キーを格納するNSSデータベース・ファイルを含む非公開CA証明書を作成する方法について説明します。

NSSは、セキュリティ対応のクライアントおよびサーバー・アプリケーションのクロス・プラットフォーム開発をサポートするように設計されたライブラリのセットです。NSSを使用して構築されたアプリケーションは、SSL v2およびv3、TLS、PKCS #5、PKCS #7、PKCS #11、PKCS #12、S/MIME、X.509 v3証明書、およびその他のセキュリティ標準をサポートできます。

certutilを使用して証明書、CSRおよびキーを管理する前に、NSSデータベース・ファイルにアクセスできる必要があります。レガシー・セキュリティ・データベース・ファイル(証明書の場合はcert8.db、キーの場合はkey3.db、PKCS #11モジュール情報の場合はsecmod.db)または新しいSQLiteデータベース・ファイル(証明書の場合はcert9.db、キーの場合はkey4.db、PKCS #11モジュールの場合はpkcs11.txt)を使用できます。この項では、新しいデータベース・ファイルの例を示します。

また、関連するpk12utilコマンドを使用して、証明書およびキーをPKCS #12ファイルからNSSデータベースにエクスポートおよびインポートしたり、その逆にすることもできます。

certutilおよびpk12utilを使用するには、アプリケーション・ストリーム・リポジトリから利用できるnss-toolsパッケージをインストールします。
sudo dnf install nss-tools

ノート:

Oracle Linux 7を使用している場合は、dnfのかわりにyumを使用して、ol7_latest yumリポジトリからパッケージをインストールできます。

次の例は、certutilおよびpk12utilコマンドを使用する方法を示しています。

  • NSSデータベースを作成するには、次を実行します。
    certutil -N -d database_directory
                
    前述の例で、database_directoryは、cert9.db、key4.dbおよびpkcs11.txt NSSデータベース・ファイルを作成するホーム・ディレクトリです。たとえば、次の例では、端末のユーザー・アカウントのホーム・ディレクトリにあるnssdbというフォルダにデータベースを作成します。
    certutil -N -d ~/nssdb
  • 自己署名証明書を生成するには、次を実行します。

    certutil -d database_directory -S -s subject -n nickname -x -t trust_args -o file
    前述の例では次のようになります。
    • -Sは、個々の証明書を作成して証明書データベースに追加することを示します。
    • -sは、subjecthttps://www.rfc-editor.org/rfc/rfc1485.htmlで定義された識別名形式を使用する識別名を指定することを示します。
    • -nは、ニックネームを指定します。ここで、nicknameは作成するエンティティのニックネームです。
    • -xは、別のCAから署名を取得するのではなく、作成またはデータベースに追加される証明書の署名を生成することを示します。
    • -tは、信頼引数を追加することを示します。ここで、trust_argsは証明書に適用する信頼属性です。証明書ごとに3つの使用可能な信頼カテゴリがあり、各信頼設定のSSL、電子メール、オブジェクト署名の順序で表されます。各カテゴリ位置では、属性コードをまったく使用しないか、すべて使用するか、またはすべて使用します。有効なコードは次のとおりです。
      • p - Valid peer
      • P - Trusted peer (includes p)
      • c - Valid CA
      • C - 信頼できるCA (cを含む)
      • T - クライアント認証用の信頼できるCA (sslサーバーのみ)
    たとえば、次の例では、example_testニックネームを持つwww1.example.com共通名の自己署名証明書を作成します。信頼属性は、各カテゴリのC (信頼できるCA)です。
    certutil -d ~/nssdb/ -S -s 'CN=www1.example.com, O=Example Organization, L=Ottawa, C=CA' -n example_test -x -t C,C,C
  • 他の場所で生成された既存の証明書または証明書を追加するには、次を実行します。
    certutil -A -n nickname -t trust_args -d database_directory -i input-file
                

    前述の例では次のようになります。

    • -Aは、証明書を証明書データベースに追加することを示します。
    • -iは、証明書ファイルなどの入力ファイル(PEMファイルなど)を指定することを示します。
    例:
    certutil -A -n "CN=My SSL Certificate" -t C,C,C -d ~/nssdb/ -i ~/tls-ca-bundle.pem
  • すべての証明書のリストを取得するには、次を実行します。

    certutil -L -d database_directory
                
    例:
    certutil -L -d ~/nssdb/
    
    Certificate Nickname                                         Trust Attributes
                                                                 SSL,S/MIME,JAR/XPI
    
    example_test                                                 Cu,Cu,Cu
    CN=My SSL Certificate                                        C,C,C

    証明書をリストする際、信頼タグには、秘密キーが証明書に関連付けられていることを示すuフラグが含まれることがあります。

  • データベースから証明書を削除するには、次を実行します。
    certutil -D -d database_directory -n nickname
                

    前述の例では、-Dは、データベースから特定の証明書を削除することを示します。

  • すべてのキーのリストを取得するには、次を実行します。

    certutil certutil -K -d database_directory
                
    例:
    certutil -K -d ~/nssdb/
    certutil: Checking token "NSS Certificate DB" in slot "NSS User Private Key and Certificate Services"
    Enter Password or Pin for "NSS Certificate DB":
    < 0> rsa      35f4555f329c1490b3570c9d36e1ec56f2329f08   NSS Certificate DB:example_test
    < 1> rsa      303936d20b3522e9293b75db3dc48f77c1871767   NSS Certificate DB:example_test2
  • 公開キーをPEM形式で表示するには、次を実行します。

    certutil -L -d database_directory -a -n nickname
                
    例:
    certutil -L -d ~/nssdb/ -a -n example_test
    -----BEGIN CERTIFICATE-----
    ...[certificate text]
    -----END CERTIFICATE-----
  • 証明書とキーを1つのPKCS #12ファイルにエクスポートするには、次を実行します。
    pk12util -o certs.p12 -n example_test -d sql:database_directory
                
  • 証明書を変更するには、-Mオプションを使用します。たとえば、次の例では、example_test証明書の信頼引数をC, C, CからP,P,Pに変更します。

    $ certutil -d database_directory -M -t "P,P,P" -n example_test

詳細は、certutil(1)およびpk12util(1)マニュアル・ページおよびNSSオープン・ソース・プロジェクト(https://firefox-source-docs.mozilla.org/security/nss/index.html)を参照してください。

Java

ほとんどのJavaアプリケーションでは、JDKに付属するキーストアを使用して暗号化キー、X.509証明書チェーン情報および信頼できる証明書を格納します。Oracle LinuxのデフォルトのJDKキーストアは、/etc/pki/java/cacertsファイルです。keytoolコマンドを使用して、Javaキーストアで証明書を生成、インストールおよび管理できます。

次の例は、keytoolコマンドの使用方法を示しています。

  • キーストア/etc/pki/java/cacertsのコンテンツを表示します。

    sudo keytool -list [-v] -keystore /etc/pki/java/cacerts

    デフォルト・キーストアのパスワードはchangeitです。Oracleでは、できるだけ早くパスワードを変更することをお薦めします。指定されている場合、詳細オプション-vにより詳細情報が表示されます。

  • キーストアのパスワードを変更します(例: /etc/pki/java/cacerts)。

    sudo keytool -storepasswd -keystore /etc/pki/java/cacerts
  • キーストア(keystore.jks)を作成して、次のことを実現します。

    • 信頼できるエンティティから公開キーと秘密キーのペアと証明書を管理します。

    • RSAアルゴリズムと3072ビットのキー長を使用して、公開キーと非公開キーのペアを生成します。

    • 公開キーと指定された識別名情報を含む自己署名証明書を作成します。

    sudo keytool -genkeypair -alias mycert -keyalg RSA -keysize 3072 \
    -dname "CN=www.unserdom.com, OU=Eng, O=Unser Dom Corp, C=US, ST=Ca, L=Sunnydale" \
    -alias engineering -keypass pkpassword -keystore keystore.jks \
    -storepass storepassword -validity 100

    コマンドでは、pkpasswordは秘密キーのパスワードで、storepasswordはキーストアのパスワードです。この例では、証明書は100日間有効で、別名engineeringを持つキーストア・エントリ内の秘密キーに関連付けられています。

  • 証明書ファイルのコンテンツを判読可能な形式で出力します。

    sudo keytool -printcert [-v] -file cert.cer

    指定されている場合、詳細オプション-vにより詳細情報が表示されます。

  • CAに送信するために、CSRをファイルcarequest.csrで生成します。

    sudo keytool -certreq -file carequest.csr

    CAは署名して、公開キーを認証する証明書または証明書チェーンを戻します。

  • CAのルート証明書または証明書チェーンをACME.cerファイルからkeystore.jksキーストアにインポートして、別名acmecaを割り当てます。

    sudo keytool -importcert -alias acmeca [-trustcacerts] -file ACME.cer \
    -keystore keystore.jks -storepass storepassword
                

    指定されている場合、-trustcacertsオプションは、keytoolに、信頼チェーンをcacertsキーストア内の既存のルートCA証明書に照らして検証できる場合にのみ、証明書を追加するよう指示します。または、keytool -printcertコマンドを使用して、証明書のフィンガープリントとCAが発行するフィンガープリントが一致することを確認できます。

  • CAから受け取ったら、組織の署名証明書をインポートします。

    sudo keytool -importcert -v -trustcacerts -alias acmeca -file ACMEdom.cer \
    -keystore keystore.jks -storepass storepassword
                

    この例では、証明書を含むファイルはACMEdom.cerです。-aliasオプションは、CAのルート証明書チェーンの最初のエントリのエントリを指定します。署名証明書はチェーンの先頭に追加され、別名で処理されるエンティティになります。

  • 別名aliasnameを持つ証明書をkeystore.jksキーストアから削除します。

    sudo keytool -delete -alias aliasname -keystore keystore.jks -storepass storepassword
                
  • 別名aliasnameを持つ証明書を、バイナリPKCS7形式のファイルとしてエクスポートします。これには、サポートしている証明書チェーンと発行された証明書が含まれます。

    sudo keytool -exportcert -noprompt -alias aliasname -file output.p7b \
    -keystore keystore.jks -storepass storepassword
                
  • 別名aliasnameを持つ証明書を、base64でエンコードされたテキスト・ファイルとしてエクスポートします(PEMまたはRFC 1421とも呼ばれます)。

    sudo keytool -exportcert -noprompt -rfc -alias aliasname -file output.pem \
    -keystore keystore.jks -storepass storepassword
                

    証明書チェーンの場合、ファイルには別名エンティティの公開キーを認証するチェーンの最初の証明書のみが含まれます。

詳細は、keytool(1)マニュアル・ページを参照してください。