始める前に
クライアント上で、.ssh ディレクトリ内の known_hosts ファイルには、クライアントが認証するホストの公開鍵を識別するエントリが含まれていないことを確認します。
# pktool setpin Enter token passphrase: changeme Create new passphrase: Re-enter new passphrase: Passphrase changed.
PKCS #11 ソフトトークンキーストアは証明書および鍵を保存するために使用されます。ソフトトークンキーストアのデフォルトのパスフレーズは changeme です。
結果として生成された証明書はこの手順でトラストアンカー証明書として使用されます。gencert サブコマンドを実行すると、ソフトトークンキーストア用の PIN を入力するように求めるプロンプトが表示されます。
# pktool gencert keystore=pkcs11 label=authority subject="CN=authority" serial=0x01 Enter PIN for Sun Software PKCS#11 softtoken:
各情報の意味は次のとおりです。
keystore はキーストアのタイプを指定し、ここでは pkcs11 です
label は、鍵のペアとトラストアンカー証明書のラベルを指定します
subject は、トラストアンカー証明書の識別名を指定します
serial は、トラストアンカー証明書の一意のシリアル番号を指定します
export サブコマンドを実行すると、ソフトトークンキーストア用の PIN を入力するように求めるプロンプトが表示されます。
# pktool export keystore=pkcs11 outfile=ta.cert \ objtype=cert label=authority outformat=pem Enter PIN for Sun Software PKCS#11 softtoken:
各情報の意味は次のとおりです。
outfile は、トラストアンカー証明書の出力ファイル名を指定し、ここでは ta.cert です
objtype は、トラストアンカー証明書のクラスを指定します
label は、トラストアンカー証明書のラベルを指定します
outformat は、トラストアンカー証明書の出力形式を指定します
次に、その中に Exampleta.cert 証明書ファイルを配置します。このトラストアンカー証明書は、クライアント側からユーザー証明書を検証するために使用されます。
# mv Exampleta.cert /etc/ssh/cert
gencsr サブコマンドを実行すると、ソフトトークンキーストア用の PIN を入力するように求めるプロンプトが表示されます。
# pktool gencsr keystore=pkcs11 label=host outcsr=host.csr subject="CN=<HOSTNAME>" Enter PIN for Sun Software PKCS#11 softtoken:
各情報の意味は次のとおりです。
label は、ソフトトークンキーストア内で作成される非公開鍵のラベルを指定します
outcsr は、出力 CSR ファイルの名前を指定します
subject は、証明書要求の識別名を指定します
signcsr サブコマンドを実行すると、ソフトトークンキーストア用の PIN を入力するように求めるプロンプトが表示されます。
# pktool signcsr keystore=pkcs11 signkey=authority csr=host.csr \ outcert=host.cert serial=0x03 issuer="CN=authority" Enter PIN for Sun Software PKCS#11 softtoken:
各情報の意味は次のとおりです。
signkey は、トラストアンカー非公開鍵のラベルを指定します
csr は、署名される入力 CSR を指定します
outcert は、ホスト証明書の出力ファイル名を指定し、ここでは host.cert です
serial は、ホスト証明書の一意のシリアル番号を指定します
issuer は、トラストアンカーの識別名が付いた発行者名をホスト証明書に指定します
# pktool import keystore=pkcs11 infile=host.cert label=host
各情報の意味は次のとおりです。
infile は、インポートされるホスト証明書のファイル名を指定します
label は、ホスト証明書のラベルを指定します
# kmfcfg create dbfile=/etc/ssh/policy.xml policy=ssh ta-name=search mapper-name=cn
各情報の意味は次のとおりです。
dbfile は、ポリシーデータベースファイルの名前を指定します
policy は、ポリシーデータベースファイルに作成されるポリシーレコードの名前を指定します
ta-name は、ここでは search 値を指定し、これは KMF ポリシーが、証明書の発行者名と一致する証明書を検証用に使用することを示します
mapper は、その共通名 (cn) 属性を使用して、証明書を名前にマッピングすることを指定します
# printf "keystore-passphrase" > /etc/ssh/pinfile
# pfedit /etc/ssh/sshd_config ... HostKey pkcs11:object=host;token=Sun Metaslot;pinfile=/etc/ssh/pinfile
ここで、PKCS #11 URI スキームの属性は次のとおりです。
object は、ソフトトークンキーストア内の証明書オブジェクトのラベルを指定します
token は、そのトークンラベルによって PKCS #11 トークンを指定します
pinfile は、ソフトトークンキーストアのパスフレーズを指定します
HostKey キーワードは、PKCS #11 URI スキームのホスト証明書を指定します。sshd(1M) のマニュアルページを参照してください。
SSH デーモンはホスト証明書をホスト鍵として使用します。
# svcadm disable svc:/network/ssh # svcadm enable svc:/network/ssh
これらのキーワードは、ホスト証明書を検証するために使用するトラストアンカー証明書を指定します。
# ssh -o TrustedAnchorKeystore=/etc/ssh/cert -o KMFPolicyDatabase=/etc/ssh/policy.xml -o KMFPolicyName=ssh <USERNAME>@<HOSTNAME>
各情報の意味は次のとおりです。
TrustedAnchorKeystore は、トラストアンカーの証明書を含むディレクトリを指定します
KMFPolicyDatabase は、ポリシーデータベースファイルのファイル名を指定します
KMFPolicyName は、使用するポリシーの名前を指定します