pkcs11_parse_uri - PKCS#11 URI スキームの解析
cc [flag...] file ... -lcryptoutil [library ... ]
#include <cryptoutil.h> int pkcs11_parse_uri(const char *str, pkcs11_uri_t *uri)
RFC 7512 には、PKCS#11 トークンに格納された PKCS#11 オブジェクトの識別、PKCS#11 ライブラリの識別、または PKCS#11 トークン自体の識別のための、PKCS#11 Uniform Resource Identifier (URI) Scheme が規定されています。この URI は、PKCS#11 Cryptographic Token Interface Standard での PKCS#11 オブジェクト、ライブラリ、およびトークンの識別方法に基づいています。
pkcs11_parse_uri() 実装は、token、manufacturer、serial、model、object、type、id、pin-source の各属性をサポートします。各属性の詳細は、RFC 7512 の仕様を参照してください。
pin-source クエリー属性は、アプリケーションまたはライブラリがユーザーのトークン PIN を検索すべき場所を指定します。この属性の値は次のいずれかです。
この値が builtin-dialog である場合、PIN の入力が求められ、端末から読み取られます。
この値が URI を表している場合は、PIN を含むオブジェクト (file://) として扱われます。
この値が |<absolute-command-path> である場合、PIN は絶対パス <absolute-command-path> (パイプを表す文字 | がパーセントエンコードされている必要はありません) で指定されたアプリケーションの出力から読み取られます。
PKCS#11 仕様では、一部のフィールドの長さが制限されます。たとえば、製造元ラベルの長さは最大 32 文字にでき、PKCS#11 URI にはそのような制限は適用されません。必要な長さの妥当性検査を実行するかどうかは、PKCS#11 URI のコンシューマによって決まります。
以前のバージョンの Oracle Solaris でサポートされていたが、RFC 7512 で定義されていない属性は、この Oracle Solaris リリースでは非推奨です。非推奨の属性は、objecttype、manuf、pinfile、および passphrasedialog です。
空の PKCS#11 URI は PKCS#11 コンシューマに役立つことがあります。
pkcs11:使用例 2 オブジェクトの識別
もっとも単純で役に立つ形式の 1 つは、オブジェクトラベルとそのタイプのみを指定する PKCS#11 URI です。デフォルトのトークンが使用されるため、URI では指定しません。公開オブジェクトの指定時には、トークン PIN は必要ないことがあります。
pkcs11:object=my-pubkey;objecttype=public
非公開鍵が指定されている場合、ユーザーの PIN をアプリケーションに提供するには pk11-pin-source 属性を使用する必要があります。
ファイルから PIN を取得します。
pkcs11:object=my-key;type=private?pin-source=file:///etc/token_pin
コマンド /etc/mygetpin から PIN を取得します。
pkcs11:object=my-key;type=private?pin-source=|/etc/mygetpin
端末から PIN を取得します。
pkcs11:object=my-key;type=private?pin-source=builtin-dialog
次の例は、ソフトウェアトークンの証明書を示します。type を除き、すべての属性に空の値が含まれている可能性があることに注意してください。この場合、serial は空です。これが許可されない場合、URI の顧客は必要なチェックを実行できます。
id 属性値の表記は完全にパーセントエンコードされることに注意してください。予約済みセット内にある , (コンマ) は、使用されているどの部分区切り文字とも競合しないため、パーセントエンコードする必要はありません。# (ハッシュ) 文字は、/ (スラッシュ) のように一般的な区切り文字であるため、パーセントエンコードする必要があります。
pkcs11:token=The%20Software%20PKCS%2311%20softtoken; manufacturer=Snake%20Oil,%20Inc.; serial=; model=1.0; object=my-certificate; type=cert; id=%69%95%3E%5C%f4%BD%EC%91 ?pin-source=file:///etc/ssh/token_pin
トークンだけの場合は、PKCS#11 オブジェクトを指定せずに識別できます。たとえば、すべてのオブジェクトを一覧表示するには、引き続き PIN が必要になる可能性があります。
pkcs11:token=Software%20PKCS%2311%20softtoken; manufacturer=Snake%20Oil,%20Inc. ?pin-source=file:///etc/ssh/token_pin使用例 3 特殊文字の使用
次の例は、属性値にセミコロンが含まれている可能性があることを示しています。そのような場合、パーセントエンコードされます。id 属性値で小文字を使用することもできますが、[RFC3986] では、すべてのパーセントエンコード文字に大文字の 16 進数字を使用するように推奨しています。
pkcs11:token=My%20token%25%20created%20by%20Joe; object=my-certificate; type=cert; id=%69%95%3e%5c%f4%bd%ec%91 ?pin-source=file:///etc/ssh/token_pin
たとえば、リテラル %; 部分列を含める必要がある場合は、両方の文字をエスケープする必要があります。トークン値は次のようにする必要があります。
The token name with a strange substring ';
この場合、次のようになります
pkcs11:token=A%20name%20with%20a%20strange%20substring%20'%25%3B'; object=my-certificate; type=cert ?pinfile=/etc/ssh/token_pin
次の例には、トークン名に鋭アクセント付きの小さい A が含まれています。これは、UTF-8 文字エンコードに従ってオクテットでエンコードしてから、パーセントエンコードを使用する必要があります。鋭アクセント付きの小さい A が U+225 Unicode コードポイントの場合、UTF-8 エンコードは 10 進数では 195 161 で、パーセントエンコードでは %C3%A1 です。
pkcs11:token=Name%20with%20a%20small%20A%20with%20acute:%20%C3%A1; object=my-certificate; type=cert
属性についての詳細は、マニュアルページの attributes(7) を参照してください。
|
J.Pechanec および D.Moffat、「The PKCS #11 URI Scheme」、RFC 7512、2015 年 4 月
Berners-Lee T.、Fielding R.、および L.Masinter、『Uniform Resource Identifier (URI): Generic Syntax』、RFC 3986、STD 66、2005 年 1 月。
OASIS PKCS 11 TC、「PKCS #11 Cryptographic Token Interface Current Mechanisms Specification Version 2.40」、2014 年 9 月