Go to main content

手册页第 7 部分:标准、环境、宏、字符集和杂项

退出打印视图

更新时间: 2018年8月8日 星期三
 
 

pkcs11_parse_uri (7)

名称

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 统一资源标识符 (Uniform Resource Identifier, URI) 方案,用于标识 PKCS#11 令牌中存储的 PKCS#11 对象、标识 PKCS#11 库或标识 PKCS#11 令牌本身。URI 基于 PKCS#11 加密令牌接口标准中标识 PKCS#11 对象、库和令牌的方式。

支持的属性

pkcs11_parse_uri() 实现支持以下属性:tokenmanufacturerserialmodelobjecttypeidpin-source。有关每个属性的更多信息,请参见 RFC 7512 规范。

pin-source 查询属性指定了应用程序或库应从何处查找用户的令牌 PIN。该属性的值可以是以下值之一:

  • 如果值为 builtin-dialog,则会提示提供 PIN,并且会从终端读取 PIN。

  • 如果值表示 URI,则将其视为包含 PIN 的对象 (file://)。

  • 如果值为 |<absolute-command-path>,则会从绝对路径 <absolute-command-path>(其中字符 | 表示不必使用百分号进行编码的管道)所指定的应用程序的输出读取 PIN。


注 -  字符 | 表示不必使用百分号进行编码的管道。

PKCS#11 规范限制某些字段的长度。例如,生产商标签最多可以包含三十二个字符,PKCS#11 URI 不施加此类限制。由 PKCS#11 URI 的使用者负责执行任何必要的合理性长度检查。

过时的属性

以前版本的 Oracle Solaris 支持的但未在 RFC 7512 中定义的属性在此 Oracle Solaris 发行版中已过时。过时的属性包括 objecttypemanufpinfilepassphrasedialog

示例

示例 1 使用空 PKCS#11 URI

空 PKCS#11 URI 对 PKCS#11 使用者来说可能很有用:

pkcs11:
示例 2 标识对象

最简单也是最有用的一种形式可能就是一个 PKCS#11 URI 仅指定一个对象标签及其类型。使用的是缺省令牌,所以 URI 未指定它。请注意,当指定公共对象时,可能不需要令牌 PIN。

pkcs11:object=my-pubkey;objecttype=public

如果指定了私钥,则必须使用 pk11-pin-source 属性向应用程序提供用户的 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] 建议对所有百分比编码的字符使用大写十六进制数字。

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 十进制编码为 195 161,它的百分比编码为 %C3%A1

pkcs11:token=Name%20with%20a%20small%20A%20with%20acute:%20%C3%A1;
       object=my-certificate;
       type=cert

属性

有关下列属性的说明,请参见 attributes(7)

属性类型
属性值
可用性
system/library/security/pkcs11_softtoken
接口稳定性
Uncommitted(未确定)

另请参见

[RFC7512]

J.Pechanec 和 D.Moffat,"The PKCS #11 URI Scheme"(《PKCS #11 URI 方案》),RFC 7512,2015 年 4 月

[RFC3986]

Berners-Lee, T.、Fielding, R. 和 L.。Masinter,"Uniform Resource Identifier (URI): Generic Syntax"(《统一资源标识符 (Uniform Resource Identifier, URI):通用语法》),RFC 3986,STD 66,2005 年 1 月。

[pkcs11_spec]

OASIS PKCS 11 TC,"PKCS #11 Cryptographic Token Interface Current Mechanisms Specification Version 2.40"(《PKCS #11 加密令牌接口最新机制规范版本 2.40》),2014 年 9 月。