ユーザーは認証局 (CA) から証明書を要求したり、独自の自己署名付き TA を生成したりできます。どちらの方法でも、ユーザーは公開鍵と非公開鍵のペアを生成し、非公開鍵を安全な場所に格納します。サードパーティーからの証明書を得るために、ユーザーは CA に要求を送信します。CA は要求に基づいてその非公開鍵を使用して証明書に署名し、署名される証明書にデジタル署名を付加します。CA は署名されたホスト証明書および独自の CA 証明書を元の要求者に送信します。これらの証明書を受け取ったら、ユーザーは、SunSSH サーバーで使用されるキーストア内にホスト証明書をインストールします。最後のステップで、ユーザーは SunSSH サーバーの管理者に TA 証明書を送信します。
鍵および証明書は、OpenSSL 証明書ディレクトリまたは PKCS #11 ソフトトークンキーストアに格納できます。この手順では、PKCS #11 ソフトトークンキーストアおよび自己署名付き TA を使用します。OpenSSL の使用方法については、使用例 3を参照してください。
# pktool setpin Enter token passphrase: changeme Create new passphrase: xxxxxxxx Re-enter new passphrase:xxxxxxxx Passphrase changed.
PKCS #11 ソフトトークンキーストアは /var/user/username に証明書および鍵を格納するために使用されます。指定したパスフレーズを忘れないでください。
結果として得られる証明書はルート証明書です。この証明書をサーバー管理者に送信し、これがユーザーの証明書に署名するために使用されます。
# 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 は、トラストアンカー証明書の一意のシリアル番号を指定します。
前のステップで作成したルート証明書の非公開鍵を使用してこの 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 は、証明書要求の識別名を指定します。この名前は、このユーザーの証明書を識別するために使用できます。
# 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 の識別名が付いた発行者名をユーザー証明書に追加します
# pktool import keystore=pkcs11 \ infile=ExampleUserOwnCert.cert label=SignedExampleUserOwnCert
各情報の意味は次のとおりです。
infile は、インポートされるユーザー証明書のファイル名を指定します。
label は、このシステム上のこのユーザー証明書の一意のラベルを指定します。
この証明書は、次のステップでサーバー管理者に電子メールで送信されます。
# 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 を指定します。
証明書の内容を電子メールにコピー&ペーストでき、またはファイルを電子メールに添付することもできます。これは公開証明書であるため、非公開情報は含まれていません。
これで操作は完了で、サーバー管理者がサーバーのルート証明書をシステムの管理者に送信するまで待機します。使用しているシステム上で、管理者はサーバーのルート証明書をインストールし、X.509 証明書を認証に使用できるように sshd デーモンをふたたび有効化します。
ユーザーはサーバーによって認証される識別情報としてユーザー証明書ラベルを使用します。
# 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 トークンを指定します
次に、その中に Exampleta.cert 証明書ファイルを配置します。このトラストアンカー証明書は、クライアント側からユーザー証明書を検証するために使用されます。
# cd ; mkdir /etc/ssh/cert mv Exampleta.cert /etc/ssh/cert
この例では、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