Go to main content
Oracle® Solaris 11.3 での Secure Shell アクセスの管理

印刷ビューの終了

更新: 2017 年 3 月
 
 

SunSSH クライアントの X.509 証明書を生成する方法

ユーザーは認証局 (CA) から証明書を要求したり、独自の自己署名付き TA を生成したりできます。どちらの方法でも、ユーザーは公開鍵と非公開鍵のペアを生成し、非公開鍵を安全な場所に格納します。サードパーティーからの証明書を得るために、ユーザーは CA に要求を送信します。CA は要求に基づいてその非公開鍵を使用して証明書に署名し、署名される証明書にデジタル署名を付加します。CA は署名されたホスト証明書および独自の CA 証明書を元の要求者に送信します。これらの証明書を受け取ったら、ユーザーは、SunSSH サーバーで使用されるキーストア内にホスト証明書をインストールします。最後のステップで、ユーザーは SunSSH サーバーの管理者に TA 証明書を送信します。

鍵および証明書は、OpenSSL 証明書ディレクトリまたは PKCS #11 ソフトトークンキーストアに格納できます。この手順では、PKCS #11 ソフトトークンキーストアおよび自己署名付き TA を使用します。OpenSSL の使用方法については、使用例 3を参照してください。

  1. 通常のユーザーとして、PIN (パスフレーズ) を初期化して PKCS #11 ソフトトークンキーストアに設定します。
    # pktool setpin
         Enter token passphrase: changeme
         Create new passphrase: xxxxxxxx
         Re-enter new passphrase:xxxxxxxx
         Passphrase changed.

    PKCS #11 ソフトトークンキーストアは /var/user/username に証明書および鍵を格納するために使用されます。指定したパスフレーズを忘れないでください。

  2. pktool gencert コマンドを使用して、ソフトトークンキーストア内の自己署名付き証明書および鍵のペアを生成します。

    結果として得られる証明書はルート証明書です。この証明書をサーバー管理者に送信し、これがユーザーの証明書に署名するために使用されます。

    # pktool gencert keystore=pkcs11 \
       label=ExampleUserTAcert subject="CN=ExUserTA" serial=0x01
         Enter PIN for Sun Software PKCS#11 softtoken: xxxxxxxx

      各情報の意味は次のとおりです。

    • keystore はキーストアのタイプを指定し、ここでは pkcs11 です。

    • label は、鍵のペアとトラストアンカー証明書のラベルを指定します。ラベル label の値を使用して、キーストア内の証明書を見つけることができます。

    • subject は、トラストアンカー証明書の識別名を指定します。これは認証中に証明書を識別するために使用できます。

    • serial は、トラストアンカー証明書の一意のシリアル番号を指定します。

  3. 証明書署名要求 (CSR) を生成します。

    前のステップで作成したルート証明書の非公開鍵を使用してこの CSR に署名します。

    #  pktool gencsr keystore=pkcs11 label=ExampleUserOwnCert \
      outcsr=ExampleUserOwnCert.csr subject="CN=ExampleUserOwnCert"
         Enter PIN for Sun Software PKCS#11 softtoken: xxxxxxxx

      各情報の意味は次のとおりです。

    • label は、キーストア内の非公開鍵を検索するために使用できるラベルを指定します

    • outcsr は、書き込み先の出力 CSR ファイル名を指定します。

    • subject は、証明書要求の識別名を指定します。この名前は、このユーザーの証明書を識別するために使用できます。

  4. ルート証明書の非公開鍵を使用して CSR に署名し、ユーザーの証明書を作成します。
    # pktool signcsr keystore=pkcs11 signkey=ExampleUserOwnCert csr=ExampleUserOwnCert.csr \
      outcert=ExampleUserOwnCert.cert serial=0x02 issuer="CN=ExampleUserOwnCert"
         Enter PIN for Sun Software PKCS#11 softtoken: xxxxxxxx

      各情報の意味は次のとおりです。

    • signkey は、署名される証明書のラベルを指定します。

    • csr は、署名される入力 CSR を指定します。

    • outcert は、署名付きユーザー証明書の出力ファイル名を指定し、ここでは Exampleupriv.cert です

    • serial は、ユーザー証明書の一意のシリアル番号を指定します。

    • issuer は、TA の識別名が付いた発行者名をユーザー証明書に追加します

  5. ユーザー証明書をソフトトークンキーストアに追加します。
    # pktool import keystore=pkcs11 \
      infile=ExampleUserOwnCert.cert label=SignedExampleUserOwnCert

      各情報の意味は次のとおりです。

    • infile は、インポートされるユーザー証明書のファイル名を指定します。

    • label は、このシステム上のこのユーザー証明書の一意のラベルを指定します。

  6. ソフトトークンキーストアからルート証明書をエクスポートします。

    この証明書は、次のステップでサーバー管理者に電子メールで送信されます。

    # pktool export keystore=pkcs11 outfile=ExampleUserta.cert \
      objtype=cert label=ExampleUserSigned outformat=pem
         Enter PIN for Sun Software PKCS#11 softtoken: xxxxxxxx

      各情報の意味は次のとおりです。

    • outfile は、ルート証明書の出力ファイル名を指定し、ここでは ExampleUserta.cert です

    • objtype は、オブジェクトのクラス、つまり証明書を指定します。

    • label は、キーストア内のルート証明書の label 属性の値を指定します。

    • outformat は、ルート証明書の出力形式 pem を指定します。

  7. ルート証明書をサーバー管理者に電子メールで送信します。

    証明書の内容を電子メールにコピー&ペーストでき、またはファイルを電子メールに添付することもできます。これは公開証明書であるため、非公開情報は含まれていません。

    これで操作は完了で、サーバー管理者がサーバーのルート証明書をシステムの管理者に送信するまで待機します。使用しているシステム上で、管理者はサーバーのルート証明書をインストールし、X.509 証明書を認証に使用できるように sshd デーモンをふたたび有効化します。

  8. 通常のユーザーとして、クライアントからサーバーにログインします。

    ユーザーはサーバーによって認証される識別情報としてユーザー証明書ラベルを使用します。

    # ssh -o IdentityFile="pkcs11:object=SignedExampleUserOwnCert;token=Sun Software PKCS#11 softtoken" username@hostname
       Enter PIN for 'Sun Software PKCS#11 softtoken': xxxxxxxx

      各情報の意味は次のとおりです。

    • IdentityFile は、PKCS #11 URI スキームによってソフトトークンキーストア内のユーザー証明書を指定します。ssh(1) のマニュアルページを参照してください。

    • object は、ソフトトークンキーストア内の証明書オブジェクトのラベルを指定します

    • token は、そのトークンラベルによって PKCS #11 トークンを指定します

  9. サーバー上の root として、/etc/ssh/cert ディレクトリを作成します。

    次に、その中に Exampleta.cert 証明書ファイルを配置します。このトラストアンカー証明書は、クライアント側からユーザー証明書を検証するために使用されます。

    #  cd ; mkdir /etc/ssh/cert 
      mv Exampleta.cert /etc/ssh/cert
使用例 3  openssl を使用して SunSSH クライアント用の X.509 証明書を生成する

この例では、root として openssl コマンドを使用して、自己署名付き証明書と鍵のペアを生成します。

# cd $HOME
# openssl req \
> -x509 -new \
> -subj "/C=CZ/ST=Here region/L=Here /CN=ExampleTAkey" \
> -newkey rsa:2048 -keyout ExampleTAkey.pem \
> -out exampleTAkey.pem
Generating a 2048 bit RSA private key
.+++
........+++
writing new private key to 'exampleTAkey.pem'
Enter PEM pass phrase: xxxxxxxx

Verifying - Enter PEM pass phrase:  xxxxxxxx