openssl-cmp

openssl-cmp

RFC 4120是v2版本(2005年),RFC 9480是V3版本(2023年),RFC 9483是轻量版本,更早的RFC 2510是V1版本,发布于1999年,现已过时。

名字

openssl-cmp – Certificate Management Protocol (CMP, RFC 4210) application

概要

openssl cmp [-help] [-config filename] [-section names] [-verbosity level]

一般消息选项:

[-cmd ir|cr|kur|p10cr|rr|genm] [-infotype name] [-profile name] [-geninfo values] [-template filename] [-keyspec filename]

证书注册选项:

[-newkey filename|uri] [-newkeypass arg] [-subject name] [-days number] [-reqexts name] [-sans spec] [-san_nodefault] [-policies name] [-policy_oids names] [-policy_oids_critical] [-popo number] [-csr filename] [-out_trusted filenames|uris] [-implicit_confirm] [-disable_confirm] [-certout filename] [-chainout filename]

证书注册和吊销选项:

[-oldcert filename|uri] [-issuer name] [-serial number] [-revreason number]

消息传输选项:

[-server [http[s]://][userinfo@]host[:port][/path][?query][#fragment]] [-proxy [http[s]://][userinfo@]host[:port][/path][?query][#fragment]] [-no_proxy addresses] [-recipient name] [-path remote_path] [-keep_alive value] [-msg_timeout seconds] [-total_timeout seconds]

服务器认证选项:

[-trusted filenames|uris] [-untrusted filenames|uris] [-srvcert filename|uri] [-expect_sender name] [-ignore_keyusage] [-unprotected_errors] [-no_cache_extracerts] [-srvcertout filename] [-extracertsout filename] [-cacertsout filename] [-oldwithold filename] [-newwithnew filename] [-newwithold filename] [-oldwithnew filename] [-crlcert filename] [-oldcrl filename] [-crlout filename]

客户端认证和保护选项:

[-ref value] [-secret arg] [-cert filename|uri] [-own_trusted filenames|uris] [-key filename|uri] [-keypass arg] [-digest name] [-mac name] [-extracerts filenames|uris] [-unprotected_requests]

证书格式选项:

[-certform PEM|DER] [-crlform PEM|DER] [-keyform PEM|DER|P12|ENGINE] [-otherpass arg] [-engine id] [-provider name] [-provider-path path] [-propquery propq]

随机数状态选项:

[-rand files] [-writerand file]

TLS连接选项:

[-tls_used] [-tls_cert filename|uri] [-tls_key filename|uri] [-tls_keypass arg] [-tls_extra filenames|uris] [-tls_trusted filenames|uris] [-tls_host name]

客户端调式选项:

[-batch] [-repeat number] [-reqin filenames] [-reqin_new_tid] [-reqout filenames] [-reqout_only filename] [-rspin filenames] [-rspout filenames] [-use_mock_srv]

Mock server 选项:

[-port number] [-max_msgs number] [-srv_ref value] [-srv_secret arg] [-srv_cert filename|uri] [-srv_key filename|uri] [-srv_keypass arg] [-srv_trusted filenames|uris] [-srv_untrusted filenames|uris] [-ref_cert filename|uri] [-rsp_cert filename|uri] [-rsp_crl filename|uri] [-rsp_extracerts filenames|uris] [-rsp_capubs filenames|uris] [-rsp_newwithnew filename|uri] [-rsp_newwithold filename|uri] [-rsp_oldwithnew filename|uri] [-poll_count number] [-check_after number] [-grant_implicitconf] [-pkistatus number] [-failure number] [-failurebits number] [-statusstring arg] [-send_error] [-send_unprotected] [-send_unprot_err] [-accept_unprotected] [-accept_unprot_err] [-accept_raverified]

证书验证选项, for both CMP and TLS:

[-allow_proxy_certs] [-attime timestamp] [-no_check_time] [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-partial_chain] [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192] [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email] [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-issuer_checks]

描述

cmp 命令是 RFC4210(CMP V2) 中定义的证书管理协议 (CMP) 的客户端实现。它可用于从 CA 服务器请求证书、更新其证书、请求吊销证书以及执行其他类型的 CMP 请求。

选项

通用选项

  • -help

    显示所有选项的摘要

  • -config filename

    指定配置文件. 空字符串 “” 表示是 none值. 默认的配置文件来自OPENSSL_CONF环境变量.

  • -section names

    配置文件中用于定义 CMP 选项的section。空字符串“”表示没有特定section。默认值为 cmp。
    可以指定多个section name,以逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中)。后面命名的部分的内容可能会覆盖前面命名的部分的内容。无论如何,与往常一样,[default] section和最终的未命名section(就目前而言)可以提供每个选项的备用值。

  • -verbosity level

    日志记录、错误输出等的详细程度。0 = EMERG、1 = ALERT、2 = CRIT、3 = ERR、4 = WARN、5 = NOTE、6 = INFO、7 = DEBUG、8 = TRACE。默认为 6 = INFO。

一般消息(CMP中的General Message)选项

  • -cmd ir|cr|kur|p10cr|rr|genm

    执行CMP命令. 支持以下命令:
    ir – Initialization Request
    cr – Certificate Request
    p10cr – PKCS#10 Certification Request (for legacy support)
    kur – Key Update Request
    rr – Revocation Request
    genm – General Message

    ir requests 通过颁发第一个证书将最终实体初始化到 PKI 层次结构中。

    cr requests 为已初始化到 PKI 层次结构的最终实体颁发额外证书。

    p10cr requests 颁发与 cr 类似的额外证书,但使用传统的 PKCS#10 CSR 格式发送证书请求。

    kur requests 现有证书进行密钥更新.

    rr requests 吊销现有证书.

    genm requests 使用General Message获取信息, 可以包含InfoTypeAndValues 指定哪些信息是感兴趣的. 返回的所有 infoTypes 将打印到stdout.
    cmp v2一共定义了27个报文,其中9个是请求报文,这里实现了6个请求报文,缺少了交叉证书请求,密钥恢复请求,轮询请求。

  • -infotype name

    设置用于在 genm 中请求特定信息的 InfoType 名称,例如 signKeyPairTypes。返回的内容可能会包括caCerts、rootCaCert、certReqTemplate 和 crlStatusList等字段。

  • -profile name

    证书模板的名称,放在PKIHeader的generalInfo扩展字段中

  • -geninfo values

    以逗号分隔的 InfoTypeAndValue 列表,放置在请求消息的 PKIHeader 的 generalInfo 字段中。每个 InfoTypeAndValue 都会提供一个 OID 和一个整数或字符串值,格式为 OID:int:number 或 OID:str:text,例如“1.2.3.4:int:56789, id-kp:str:name”。

  • -template filename

    用于保存通过包含id-it-certReqTemplate的genp message请求的CRMF certTemplate文件,使用DER格式保存。RFC4211字段。

  • -keyspec filename

    带id-it-keyGenParameters的genp message消息会返回keySpec,这里指定保存keySpec的文件名。RFC4211字段。
    注意:收到的任何 keySpec 字段内容都将记录为 INFO。

Certificate enrollment options(请书注册)

  • -newkey filename|uri

    证书请求中私钥或公钥的来源,如果使用了-csr选项则从PKCS#10 CSR文件是读取。通过证书引用公钥,或指定私钥(应该只是用来算公钥)。
    密钥的公共部分会放在证书请求中。

    除非与 -cmd p10cr、-popo -1 或 -popo 0一起使用,否则也需要私钥来提供所有权证明(POPO),些时需要-key 选项(指定私钥)。

  • -newkeypass arg

    提供一个密码用于newkey指定的文文件

  • -subject name

    X.509 DN,用作 IR/CR/KUR 请求中的证书模板中的subject。如果给出了 NULL-DN (/),则模板中不会放置任何subject。默认值是使用 -csr 选项给出的任何 PKCS#10 CSR 的subject DN。对于 KUR,如果提供了参考证书(请参阅 -oldcert),则另一个后备选项是参考证书的主题 DN。仅当未设置 SAN(subject alternative name) 时,此后备选项才用于 IR 和 CR。

    如果提供了subject DN,而且没有-cert,-oldcert,-csr则会用于发出消息的subject DN。

    DN格式为/type0=value0/type1=value1/type2=...。特殊字符用\转义,允许使用空格,单个/指定空的DN,可以用+代表/作为两个RDN之间的分隔符,例如/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe,/C=CN/ST=Shanghai/L=Shanghia/O=hetao/OU=RD/CN=t.he/emailAddress=t.he@hetao.me/

  • -days number

    请求新证书有效的天数,从主机的当前时间开始计算。还会触发显式请求,即有效期从当前时间(当前主机时间)开始。

  • -reqexts name

    OpenSSL 配置文件中定义证书请求扩展的section name。如果存在 -csr 选项,覆盖CSR文件中任何具有相同 OID 的扩展。

  • -sans spec

    一个或多个IP addresses, email addresses, DNS names或 URI。以逗号或空格分隔(在后一种情况下,整个参数必须括在“…”中),以添加为Subject Alternative Name(s) (SAN) 证书请求扩展。如果给出了特殊元素“critical”,则 SAN 被标记为关键。如果通过 -reqexts 设置了任何主题备用名称扩展,则无效。

  • -san_nodefault

    当未通过 -sans 或 -reqexts 定义SAN时,它们将默认从参考证书中复制(请参阅 -oldcert)。可以通过提供 -san_nodefault 选项来禁用此功能。

  • -policies name

    OpenSSL 配置文件中定义证书策略的section name。此选项不能与 -policy_oids 一起使用。

  • -policy_oids names

    一个或多个 OID,以逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中),以添加为证书策略扩展。此选项不能与 -policies 一起使用。

  • -policy_oids_critical

    把-policy_oids给出的策略oid标记为critical

  • -popo number

    IR/CR/KUR请求的私钥所有权证明方法; values: -1..<2> where -1 = NONE, 0 = RAVERIFIED, 1 = SIGNATURE (default), 2 = KEYENC.RAVERIFIED表示RA已经证明,KEYENC表示私钥加密。
    请注意,只有通过 -newkey 或 -key 选项提供私钥时才能生成signature-based POPO。

  • -csr filename

    PKCS#10 CSR 证书请求,格式为 PEM 或 DER。使用 -cmd p10cr 时,它可直接用于旧式 P10CR 消息。
    与 -cmd ir、cr 或 kur 一起使用时,它会转换为相应的常规 CMP 请求。在这种情况下,必须提供私钥(使用 -newkey 或 -key)以证明所有权(除非使用 -popo -1 或 -popo 0),并且相应的公钥会放在认证请求中(而不是 PKCS#10 CSR 中包含的公钥)。
    PKCS#10 CSR 还可与 -cmd rr 一起使用,通过包含的subject和公钥指定要撤销的证书。如果未提供 -cert 和 -oldcert,则其subject将用作 CMP 消息头中的sender。

  • -out_trusted filenames|uris

    用于验证接收到的新注册证书的受信任证书(事先准备好的CA证书)。在此验证时,将禁用任何证书状态检查。
    可以给出多个源,用逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中)。每个源可能包含多个证书。
    这些选项 -verify_hostname, -verify_ip, and -verify_email 只和这个选项一起使用。
    使用这个选项时证书不能包含keyUsage digitalSignature,否则会报“CMP error: certificate not accepted:rejecting newly enrolled cert with subject:…”错误。

  • -implicit_confirm

    注册证书时要求implicit confirmation(隐式确认,即不发送证书确认)

  • -disable_confirm

    请勿在没有请求隐式确认的情况下发送新注册证书的证书确认消息,以应对无法正确支持implicit confirmation选项的损坏服务器。警告:这会导致违反 RFC 4210 的行为。

  • -certout filename

    保存新证书的文件名

  • -chainout filename

    新证书的证书链. 不包括新证书也不包括trust anchor (the root certificate)。
    如果也给出了 -certout 选项,并且带有相等的文件名参数,则生成的文件会合并在一起,生成一个包含新注册的证书及其链的文件。

Certificate enrollment and revocation options

虽然标题为Certificate enrollment and revocation options,实际主要是Revocation和Key Update options

  • -oldcert filename|uri

    要在密钥更新请求 (KUR) 消息中更新(即续订或重新密钥化)或在撤销请求 (RR) 消息中撤销的证书。对于 KUR,要更新的证书默认为 -cert选项,生成的证书称为reference certificate。对于 RR,也可以使用 -csr 指定要撤销的证书。如果提供了 -issuer 和 -serial,则忽略 -oldcert 和 -csr。
    如果有参考证书(KUR)还用于派生默认subject DN 和SAN以及 IR/CR/KUR 请求证书模板中的默认issuer。在认证请求模板中其公钥也会使用。如果未提供 -cert,则其subject将用作传出消息的sender。如果未提供 -recipient、-srvcert 或 -issuer,则其issuer将用作 CMP 消息头中的默认recipient。

  • -issuer name

    X.509 Distinguished Name (DN) 用作 IR/CR/KUR/RR 消息中请求的证书模板中的issuer字段。如果给出 NULL-DN (/),则模板中不会放置任何issuer。
    如果已提供此选项且未给出 -recipient 或 -srvcert,则issuer DN 将用作传出 CMP 消息的recipient。
    参数格式为 /type0=value0/type1=value1/type2=….。具体参考 -subject option.

  • -serial number

    要撤销证书的序列号,可以是10进制或者16进制(0x开头)

  • -revreason number

    Set CRLReason to be included in revocation request (RR); values: 0..10 or -1 for none (which is the default).

    Reason numbers defined in RFC 5280 are:

    CRLReason ::= ENUMERATED {
    unspecified (0),
    keyCompromise (1),
    cACompromise (2),
    affiliationChanged (3),
    superseded (4),
    cessationOfOperation (5),
    certificateHold (6),
    — value 7 is not used
    removeFromCRL (8),
    privilegeWithdrawn (9),
    aACompromise (10)
    }

Message transfer options

  • -server [http[s]://][userinfo@]host[:port][/path][?query][#fragment]

    要使用 HTTP(S) 连接的 CMP 服务器的域名或IP 地址以及可选的端口号。IP 地址可以是 v4 或 v6,例如 127.0.0.1 或 [::1] 表示 localhost。如果主机字符串是 IPv6 地址,则必须用 [ 和 ] 括起来。

    此选项不能与 -port 和 -use_mock_srv共存。如果 -rspin 带有足够的文件名参数,则会忽略此选项。

    如果给出了 https,则隐含 -tls_used 选项。使用 TLS 时,默认端口为 443,否则为 80。可选的 userinfo 和 fragment 组件将被忽略。任何给定的query组件都作为path组件的一部分处理。如果包含path,它将为 -path 选项提供默认值。

  • -proxy [http[s]://][userinfo@]host[:port][/path][?query][#fragment]

    用于访问 CMP 服务器的 HTTP(S) 代理服务器(-no_proxy匹配的域名除外。如果主机字符串是 IPv6 地址,则必须将其括在 [ 和 ] 中。如果scheme为 https,则代理端口默认为 80 或 443;除非可选的 http:// 或 https:// 前缀没有指定(请注意,如果要使用TLS则需要-tls_used 或 -server 带有前缀 https ),以及任何path、userinfo、query和fragment组件也可以忽略。
    默认使用境变量 http_proxy的值,如果使用 TLS,则为 HTTPS_PROXY。
    如果未给出 -server,则忽略此选项。

  • -no_proxy addresses

    不使用 HTTP(S) 代理的服务器的 IP 地址和/或 DNS 名称列表,以逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中)。如果设置了环境变量 no_proxy,则默认值为 NO_PROXY的值。如果未指定 -server,则忽略此选项。

  • -recipient name

    Distinguished Name (DN) 用于 CMP request message headers 的recipient字段, i.e., the CMP server (通常是CA).

    recipient 字段在CMP message 的头部是必须的. 如果没有明确给出,则按以下顺序确定recipient:使用 -srvcert 选项给出的 CMP 服务器证书的subject、-issuer 选项、使用 -oldcert 选项给出的证书的issuer、CMP 客户端证书(-cert 选项)的issuer(如果存在的话),否则将使用 NULL-DN 作为最后的手段。

    格式为 /type0=value0/type1=value1/type2=…. 参考 -subject option.

  • -path remote_path

    CMP 服务器(又名 CMP alia)上用于 POST 请求的 HTTP url path。默认为 -server 指定的任何path,否则为“/”。

  • -keep_alive value

    如果给定值为 0,则 HTTP 连接在每次响应后都会关闭(这是 HTTP 1.0 的默认行为),即使 CMP 事务需要多次往返也是如此。如果值为 1 或 2,则每次事务都会请求持久连接。如果值为 2,则强制持久连接,即如果服务器不支持,则会出现错误。默认值为 1,表示倾向于保持连接打开。

  • -msg_timeout seconds

    在返回超时错误之前,CMP 请求-响应消息往返允许的秒数。值 <= 0 表示没有限制(无限期等待)。默认使用 -total_timeout 设置。

  • -total_timeout seconds

    会话可能需要的最大总秒数,包括轮询等。值 <= 0 表示无限制(无限期等待)。默认值为 0。

服务器认证选项

  • -trusted filenames|uris

    root CA证书, client使用这个作为 trust anchors 当验证 signature-based 保护的CMP响应消息. 如果-srvcert选项存在这个选项是忽略的。它比 -srvcert 提供了更大的灵活性,因为服务器的 CMP 保护证书不是固定的,而是可以是信任证书链中任何到tust anchor之间的证书。
    如果没有-trusted, -srvcert, and -secret , message validation errors 会抛出,除非指定 -unprotected_errors 忽略 exception.
    可以给出多个filename,用逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中)。每个源可能包含多个证书。
    如果这个选项指定,则证书验证相关的选项 -verify_hostname, -verify_ip, and -verify_email 不生效。

  • -untrusted filenames|uris

    Non-trusted intermediate CA certificate(s). Any extra certificates given with the -cert option are appended to it. All these certificates may be useful for cert path construction for the own CMP signer certificate (to include in the extraCerts field of request messages) and for the TLS client certificate (if TLS is used) as well as for chain building when validating server certificates (checking signature-based CMP message protection) and when validating newly enrolled certificates.
    非信任中间 CA 证书。使用 -cert 选项提供的任何额外证书都将附加到该证书。用于构建自己的 CMP 签名者证书的证书链(以包含在请求消息的 extraCerts 字段中)和 TLS 客户端证书(如果使用 TLS),以及在验证服务器证书(检查基于签名的 CMP 消息保护)和验证新注册的证书时构建证书链。
    可以给出多个源,用逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中)。每个源可能包含多个证书。
    基于以上这里的untrusted并不是说证书不受信任,而是在信任证书以外但又需要提供的证书。

  • -srvcert filename|uri
    在验证 CMP 响应消息的基于签名的保护时,需要并直接信任的 CMP 服务器证书(即使该证书已过期)。这会固定CMP服务器并导致忽略 -trusted 选项。
    如果设置,证书的subject也将用作 CMP 请求recipient的默认值以及 CMP 响应预期sender的默认值。
    服务器接收到的新注册证书也可以使用-srvcert指定的证书进行验证(这样就不用指定-out_trusted选项了)

  • -expect_sender name

    接到的CMP响应的发件人字段中应包含专有名称 (DN)。默认为 -srvcert 的subject DN(如果有)。
    这可用于确保只有特定实体被接受为 CMP 消息签名者,并且攻击者无法使用受信任 PKI 层次结构的任意证书来冒充 CMP 服务器。请注意,此选项比设置 -srvcert 稍微自由一些,后者将服务器固定到特定证书的持有者,而预期的sender名称在服务器证书更新后将继续匹配。
    参数格式为 /type0=value0/type1=value1/type2=…. For details see the description of the -subject option.

  • -ignore_keyusage

    验证传入 CMP 消息的基于签名的保护时,忽略 CMP 签名者证书中的密钥使用限制。默认情况下,CMP 签名者证书必须允许 digitalSignature。此选项适用于 CMP 客户端和模拟服务器(mock server)。

  • -unprotected_errors

    接受服务器缺失或无效的响应保护。这适用于以下消息类型和内容:
    error messages
    negative certificate responses (IP/CP/KUP)
    negative revocation responses (RP)
    negative PKIConf messages
    警告:此设置会导致未指定的行为,它仅用于允许与违反 RFC 4210 的服务器实现互操作,例如:
    第 5.1.3.1 节仅允许在特殊情况下保护例外:“可能存在故意不使用 PKIProtection BIT STRING 来保护消息 […] 因为将改为应用 PKIX 之外的其他保护的情况。”
    第 5.3.21 节对 ErrMsgContent 进行了明确规定:“CA 必须始终使用签名密钥对其进行签名。”
    附录 D.4 显示 PKIConf 消息具有保护

  • -no_cache_extracerts

    不缓存 CMP 消息的 extraCerts 字段中的证书。默认情况下,它们会被保留,因为它们可能有助于验证后续消息。此选项适用于 CMP 客户端和模拟服务器。

  • -srvcertout filename

    保存已成功验证(-out_trusted选项验证还是消息保护验证?)的证书(如果有)的文件,如果服务器使用基于签名保护的响应消息则会存在这样的证书。如果没有此类证书(通常是因为保护是基于 MAC 的),则会删除该文件(如果存在)。

  • -extracertsout filename

    收到的的响应消息的 extraCerts 字段中包含的证书列表(pollRep,PKIConf除外),则保存到filename。没有中间CA证书时跟-srvcertout的内容是一样的。

  • -cacertsout filename

    如果收到了正确的证书响应(即 IP、CP 或 KUP)消息,或者该消息包含在通用响应(genp)消息的caCerts infoType字段中的证书列表,则保存到filename

  • -oldwithold filename

    EE当前持有的root CA证书放到genm请求的rootCaCert infoType中,如果收到oldWithNew证书由则以newWithNew作为新的trust anchor(信任证书)
    old with new CA创建的包含使用新私钥签名的旧CA公钥的证书
    nenw with old CA创建的包含使用旧私钥签名的新CA公钥的证书
    new with new CA创新的包含使用新私钥签名的新CA公钥
    old with old EE持有的当前自签名CA证书
    这个rootCaCert genm请求包括下面的几个证书返回值,在RFC4210(CMP V2)中并没有,而是在RFC9480中定义的,这是不是写串了。开头明明说这个命令是RFC4210的实现。
    该请求用于获取新的CA证书。
    这个请求的asn.1代码

    GenMsg:    {id-it 20}, RootCaCertValue | < absent >
    GenRep:    {id-it 18}, RootCaKeyUpdateContent | < absent >
    
    RootCaCertValue ::= CMPCertificate
    
    RootCaKeyUpdateValue ::= RootCaKeyUpdateContent
    
    RootCaKeyUpdateContent ::= SEQUENCE {
        newWithNew       CMPCertificate,
        newWithOld   [0] CMPCertificate OPTIONAL,
        oldWithNew   [1] CMPCertificate OPTIONAL
    }
    

    注意:与 CAKeyUpdAnnContent 相比,此类型提供在 GenRep 消息中省略 newWithOld 和 oldWithNew 的功能,具体取决于 EE 的需求。

  • -newwithnew filename

    当使用-oldwithold的时候这个选项用于保存收到的newWithNew证书,如果没有收到newIwthNew证书,则删除filename指定的文件,同时rootCA的密钥更新失败。
    任何收到的 newWithNew 证书都使用任何收到的 newWithOld 证书作为不受信任的中间证书,并使用 -oldwithold 提供的证书作为(唯一)信任锚进行验证,如果未提供,则使用 -trusted 选项提供的证书。

    警告:newWithNew 证书应为受信任的证书。如果存在 -oldwithold 证书,则对其的信任度不能高于-oldwithold指定的证书,也不能高于对任何 -trusted 证书的最弱信任度。

  • -newwithold filename

    该文件用于保存在 genp 消息infoType rootCaKeyUpdate中的的任何 newWithOld 证书。如果未收到此类证书,则删除文件。

  • -oldwithnew filename

    用于保存在 genp 消息infoType rootCaKeyUpdate中的任何 oldWithNew 证书的文件。如果成功时未收到此类证书,则通过删除文件来表示。

  • -crlcert filename

    在具有 infoType crlStatusList 的 genm 消息中请求 通过证书指定CRL issuer。如果指定的DistributionPointName优先于指定证书的issuer名称。
    这个也是RFC9480中的消息类型,通过指定DistributionPointName或issuer来表示EE现有的CRL文件,应返回一个更新的CRL文件。
    asn.1代码

    “`asn.1
    GenMsg: {id-it 22}, SEQUENCE SIZE (1..MAX) OF CRLStatus
    GenRep: {id-it 23}, SEQUENCE SIZE (1..MAX) OF
    CertificateList | < absent >

    CRLSource ::= CHOICE {
    dpn [0] DistributionPointName,
    issuer [1] GeneralNames }

    CRLStatus ::= SEQUENCE {
    source CRLSource,
    thisUpdate Time OPTIONAL }

    “`

  • -oldcrl filename

    在包含infoType crlStatusList的genm消息中通过现有CRL文件指定 CRL issuer。
    任何可用的DistributionPointName都优先于issuer名称。如果还给出了 -crlcrt,则其数据优先于 -oldcrl 中的数据。

  • -crlout filename

    用于保存在 genp 消息crls infType 中收到的 CRL文件。如果成功时未收到此类 CRL,则通过删除文件来表示。

Client authentication options

  • -ref value

    参考值
    参考 number/string/value 作为 senderKID 的值(相当于用户名);如果无法从 -cert 或 <-subject> 选项中确定sender名称,则需要此项,并且通常在使用预共享密钥(password-based MAC)进行身份验证时使用。

  • -secret arg

    秘密值
    提供用于MAC-based message protection的秘密值的来源。这优先于 -cert 和 -key 选项。该密钥用于创建MAC-based protection的传出消息以及验证具有MAC-based protection的传入消息。默认使用的算法是Password-Based Message Authentication Code (PBM),如 RFC 4210 第 5.1.3.1 节中定义。
    For more information about the format of arg see openssl-passphrase-options(1).

  • -cert filename|uri

    客户端当前的 CMP signer certificate. 其私钥通过 -key 指定.
    该证书中包含的subject和公钥作为 IR/CR/KUR 消息的证书模板。
    该证书的subject将用作传出 CMP 消息的sender,而 -oldcert 或 -subjectName 的主题可能提供后备值。
    该证书的issuer用作recipient后备值之一,并用作 IR/CR/KUR 消息的证书模板中的后备issuer条目。
    在执行signature-based message protection时,此“protection certificate”(也称为“signer certificate”)将首先包含在传出消息的 extraCerts 字段中,并使用相应的私钥进行签名。在初始化请求 (IR) 消息中,这可用于使用 RFC 4210 附录 E.7 中定义的外部实体证书进行身份验证。
    对于密钥更新请求 (KUR) 消息,如果未给出 -oldcert 选项,这也用作要更新的证书。
    如果文件还包含其它的证书,它们将被附加到untrusted certs中,因为它们通常构成客户端证书链,该证书链包含在受签名保护的请求消息中的 extraCerts 字段中。

  • -own_trusted filenames|uris

    如果提供了此证书列表,则使用给定的证书作为trust anchors构建证书链来验证使用 -cert 选项给出的客户端 CMP signer certificate。
    可以给出多个源,用逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中)。每个源可能包含多个证书。
    certificate verification options -verify_hostname、-verify_ip 和 -verify_email 对通过此选项启用的证书验证没有影响。

  • -key filename|uri

    The corresponding private key file for the client’s current certificate given in the -cert option. This will be used for signature-based message protection unless the -secret option indicating MAC-based protection or -unprotected_requests is given.
    -cert 选项中给出的客户端当前证书的相应私钥文件。除非通过-secret指定MAC-based protection或 指定了-unprotected_requests,否则这将用于signature-based message protection。
    它还可用作 IR/CR/KUR 消息的 -newkey 选项的后备。

  • -keypass arg

    指定 -key 选项的私钥的密码。如果是加密的 PKCS#12 文件,也用于 -cert 和 -oldcert。如果此处未指定,则在需要时会提示输入密码。
    For more information about the format of arg see openssl-passphrase-options(1).

  • -digest name

    指定在 RFC 4210 的 MSG_SIG_ALG 中使用的受支持摘要算法的名称,以及在 MSG_MAC_ALG 中用作one-way function (OWF) 的名称。如果适用,则用于proof-of-possession (POPO) 签名。要查看受支持的摘要算法列表,请使用 openssl list -digest-commands。默认为 sha256。

  • -mac name

    指定 MSG_MAC_ALG 中的 MAC 算法的名称。要获取受支持的 MAC 算法的名称,请使用 openssl list -mac-algorithms,并可能将此类名称与受支持的摘要算法的名称相结合,例如 hmacWithSHA256。根据 RFC 4210,默认为 hmac-sha1。

  • -extracerts filenames|uris

    发送消息时附加在 extraCerts 字段中的证书。它们可用作要包含的默认 CMP signer certificate chain。
    可以给出多个源,用逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中)。每个源可能包含多个证书。

  • -unprotected_requests

    发送消息不使用 CMP-level protection.

Credentials format options

  • -certform PEM|DER

    将证书保存到文件时使用的文件格式。默认值为 PEM。

  • -crlform PEM|DER

    将 CRL 保存到文件时使用的文件格式。默认值为 DER。DER 格式是首选格式,因为它可以更有效地存储大型 CRL。

  • -keyform PEM|DER|P12|ENGINE

    私钥输入的格式;默认情况下未指定。有关详细信息,请参阅 openssl(1) 中的“Format Options”。

  • -otherpass arg

    其它指定证书的密钥,包括 -trusted, -untrusted, -own_trusted, -srvcert, -crlcert, -out_trusted, -extracerts, -srv_trusted, -srv_untrusted, -ref_cert, -rsp_cert, -rsp_extracerts, -rsp_capubs, -rsp_newwithnew, -rsp_newwithold, -rsp_oldwithnew, -tls_extra, and -tls_trusted 选项. 如果此处未指定,则在需要时会提示输入密码。

  • -engine id

    参考 “Engine Options” in openssl(1). 这个选项已废弃。
    通过以下值的组合来指定:
    -engine {engineid} -key {keyid} -keyform ENGINE
    也可以用-key选项指定一个URI格式的key ID
    -key org.openssl.engine:{engineid}:{keyid}
    应用于所有指定私钥的选项: -key, -newkey, and -tls_key.

Provider options

  • -provider name
  • -provider-path path
  • -propquery propq

Random state options

  • -rand files, -writerand file

TLS connection options

  • -tls_used

    让 CMP 客户端使用 TLS(无论是否设置了其他与 TLS 相关的选项)与 HTTP 与服务器交换消息。-port 选项不支持此选项。如果使用 https 方案指定了 -server 选项,则隐含此选项。如果未指定 -server 选项或指定了 -use_mock_srv 或指定了带有足够文件名参数的 -rspin,则会忽略此选项。
    如果不使用 TLS,则会忽略以下与 TLS 相关的选项。

  • -tls_cert filename|uri

    用于连接 TLS 服务器时进行身份验证的客户端 TLS 证书。如果filename还包含其他证书,则-untrusted certs指定的证书将用于构建提供给 TLS 服务器的客户端证书链。

  • -tls_key filename|uri

    证书私钥

  • -tls_keypass arg

    客户端TLS私钥 -tls_key 的密码源。如果是加密的 PKCS#12 文件,也用于 -tls_cert。如果此处未提供,则在需要时会提示输入密码。
    For more information about the format of arg see openssl-passphrase-options(1).

  • -tls_extra filenames|uris

    TLS握手期间向服务器提供的额外证书。

  • -tls_trusted filenames|uris

    用于验证 TLS 服务器证书的Trusted certificate(s)。这意味着主机名验证。
    可以给出多个源,用逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中)。每个源可能包含多个证书。
    证书验证选项 -verify_hostname、-verify_ip 和 -verify_email 对通过此选项启用的证书验证没有影响。

  • -tls_host name

    hostname validation期间要检查的地址。这可能是 DNS 名称或 IP 地址。如果未指定,则默认为 -server 地址。

Client-side options for debugging and offline scenarios

  • -batch

    不要以交互方式提示输入,例如当需要密码时。这对于批处理和测试很有用。

  • -repeat number

    使用相同参数调用命令给定的次数。默认为一次调用。

  • -reqin filenames

    从给定的文件(而不是内部生成的请求序列)中获取要发送到服务器的 CMP 请求序列。
    此选项对于支持离线场景很有用,在这种场景中,证书请求(或任何其他 CMP 请求)是预先生成并稍后发送的。
    如果给出了 -rspin 选项,则会忽略此选项,因为在后一种情况下实际上没有发送任何请求。
    请注意,在任何情况下,客户端都会在内部生成其 CMP 请求消息序列。因此,当存在 -reqin 选项时,还需要提供执行此操作所需的所有选项(例如 -cmd 和为其提供所需参数的所有选项)。
    如果为证书请求提供了 -reqin 选项,并且未提供 -newkey、-key、-oldcert 或 -csr 选项,则从请求消息文件中获取后备公钥(如果它包含在证书模板中)。
    提示:如果为证书请求提供了 -reqin 选项,则在某些情况下,默认情况下需要用于POPO的私钥,但是客户端可以访问公钥,但无法访问私钥,在这种情况下,POPO 实际上不是必需的(因为内部生成的certificate request消息不会发送),并且可以使用选项 -popo -1 或 -popo 0 禁用其生成。
    可以给出多个文件名,用逗号和/或空格分隔(在后一种情况下,整个参数必须括在“…”中)。
    The files are read as far as needed to complete the transaction and filenames have been provided. If more requests are needed, the remaining ones are taken from the items at the respective position in the sequence of requests produced internally.
    读取提供的文件以完成会话。如果需要更多请求,则剩余的请求将从内部生成的请求序列中相应位置的项目中获取。
    客户端需要更新给定请求中的 recipNonce 字段(第一个请求除外),以满足服务器要执行的检查。这会导致re-protection(if protecting requests is required)。

  • -reqin_new_tid

    使用 -reqin 读取 CMP 请求消息时使用新的 transactionID,这会导致reprotection这些消息(如果需要保护请求)。如果请求序列被重用,并且 CMP 服务器抱怨事务 ID 已被使用,则可能需要这样做。

  • -reqout filenames

    Save the sequence of CMP requests created by the client to the given file(s). These requests are not sent to the server if the -reqin option is used, too.(-reqout和-reqin能同时用吗)
    将客户端创建的 CMP 请求序列保存到给定的文件中。如果使用了 -reqin 选项,则不会将这些请求发送到服务器。
    可以指定多个文件名,以逗号和/或空格分隔。
    根据需要写入文件以保存会话。如果事务包含更多请求,则不会保存剩余的请求。

  • -reqout_only filename

    将客户端创建的第一个 CMP 请求保存到给定文件并退出。与 CMP 服务器及其响应相关的任何选项都将被忽略。
    此选项对于支持离线场景很有用,在离线场景中,证书请求(或任何其他 CMP 请求)是预先生成的,稍后再发送。

  • -rspin filenames

    处理给定文件中提供的 CMP 响应序列,不联系任何给定的服务器,只要提供足够的文件名来完成会话即可。
    可以给出多个文件名,以逗号和/或空格分隔。
    仅当需要更多响应来完成事务时,才会联系通过 -server 或 -use_mock_srv 选项指定的任何服务器。在这种情况下,除非服务器已准备好继续已存在的会话,否则会话将失败。

  • -rspout filenames

    将实际使用的 CMP 响应序列保存到给定的文件中。除非 -rspin 生效,否则这些响应是从服务器接收的。
    可以给出多个文件名,以逗号和/或空格分隔。
    写入提供的文件以保存事务中包含的响应。如果事务包含更多响应,则不会保存其余响应。

  • -use_mock_srv

    使用 API 级别的内部 CMP 服务器模型测试客户端,绕过基于套接字的 HTTP 传输。这不包括 -server 和 -port 选项。(直接调用C API吗)

Mock server options

CMP模拟服务器(为什么不弄个真的)
  • -port number

    充当基于 HTTP 的 CMP 服务器模拟,监听给定的本地端口。客户端可以通过 127.0.0.1 或 [::1] 等地址来访问服务器。此选项不能与 -server 和 -use_mock_srv 选项共存。到目前为止,此模式不支持 -rspin、-rspout、-reqin 和 -reqout 选项。

  • -max_msgs number

    CMP HTTP 服务器模型应处理的最大 CMP(请求)消息数,该值必须为非负数。默认值为 0,表示不设限制。在任何情况下,服务器都会因内部错误而终止,但当检测到 CMP-level 错误并能成功用错误消息进行应答时不会终止。

  • -srv_ref value

    在没有给出 -srv_cert 的情况下用作服务器的 senderKID 的参考值。

  • -srv_secret arg

    使用预共享密钥(秘密值)进行服务器身份验证的密码。

  • -srv_cert filename|uri

    CMP服务器的证书(CA证书)

  • -srv_key filename|uri

    服务器用于签名消息的私钥(也是-srv_cert filename的私钥)。

  • -srv_keypass arg

    服务器私钥(和证书)文件密码

  • -srv_trusted filenames|uris

    Trusted certificates for client authentication.
    客户端认证时的可信证书

    此时以下证书验证选项是不生效的: -verify_hostname, -verify_ip, and -verify_email.

  • -srv_untrusted filenames|uris

    验证客户端证书的中间CA证书

  • -ref_cert filename|uri

    RR(revocation request) messages 引用的证书以及KUR(Key Update Request) messages的oldCertID.

  • -rsp_cert filename|uri

    模拟注册证书时返回的证书

  • -rsp_crl filename|uri

    crls genp请求返回的CRL文件

  • -rsp_extracerts filenames|uris

    模拟证书响应中的Extra certificates

  • -rsp_capubs filenames|uris

    模拟的Initialization Response (IP) message中的CA证书

  • -rsp_newwithnew filename|uri

    rootCaKeyUpdate genp消息中newWithNew字段的证书

  • -rsp_newwithold filename|uri

    rootCaKeyUpdate genp消息中newWithOld字段的证书

  • -rsp_oldwithnew filename|uri

    rootCaKeyUpdate genp消息中oldWithNew字段的证书

  • -poll_count number

    客户端在收到证书之前必须轮询的次数(故意延迟返回)。

  • -check_after number

    轮询响应消息中的checkAfter value (number of seconds to wait)

  • -grant_implicitconf

    注册证书时接受implicit confirmation

  • -pkistatus number

    包含在服务器响应中的PKIStatus。有效范围是 0(accepted)… 6(keyUpdateWarning)。

  • -failure number

    服务器响应中要包含的单个故障信息bit位置。bit位置的有效范围是 0 (badAlg) … 26 (duplicateCertReq)。

  • -failurebits number

    number 表示failure的10进制值. 范围是 0 … 2^27 – 1.

  • -statusstring arg

    作为status string包含在服务器响应中的Text(free text?)。

  • -send_error

    强制服务器返回错误

  • -send_unprotected

    发送一个不带CMP-level protection的响应消息

  • -send_unprot_err

    如果出现不良响应,服务器将发送unprotected(不带CMP-level protection) 的error messages、证书响应 (IP/CP/KUP) 和撤销响应 (RP)。警告:此设置会导致违反 RFC 4210 的行为。

  • -accept_unprotected

    接受无保护/无效保护的请求

  • -accept_unprot_err

    接受来自客户端的unprotected的错误消息。到目前为止,这没有任何效果,因为服务器不接受任何错误消息。

  • -accept_raverified

    接受RAVERIFED所有权证书(POPO)的值.

Certificate verification options

对CMP and TLS都有效的选项:-allow_proxy_certs, -attime, -no_check_time, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -partial_chain, -policy, -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict -issuer_checks。
证书链验证的各种 “Verification Options” in openssl-verification-options(1) for details.
证书验证选项 -verify_hostname、-verify_ip 和 -verify_email 仅影响通过 -out_trusted 选项启用的证书验证。

NOTES

当客户端从 CMP 服务器获取要信任的 CA 证书时(例如通过general messages caCerts 或 rootCACert infoType的响应),CMP 服务器的身份验证尤为重要。因此,在使用certificate-based authentication或使用 -secret 进行MAC-based protection时必须特别小心使用 -trusted 和相关选项进行来设置服务器身份验证。如果身份验证是基于证书的,则应使用 -srvcertout 选项获取经过验证的服务器证书并基于该证书执行authorization check(检查谁?)。
在设置 CMP 配置和试验证书注册选项时,通常会发生各种错误,直到配置正确且完整。当 CMP 服务器报告错误时,客户端将默认检查 CMP 响应消息的保护。然而,一些 CMP 服务往往不保护不良响应(negative responses)。在这种情况下,客户端将拒绝它们,因此不会显示它们的内容,尽管它们通常包含有助于诊断的提示。为了帮助解决此类情况,CMP 客户端通过 -unprotected_errors 选项提供了一种解决方法,允许接受此类negative responses。
如果 OpenSSL 是在启用跟踪支持的情况下构建的(例如,./config enable-trace),并且环境变量 OPENSSL_TRACE 包含 HTTP,则会打印通过 HTTP 传输的请求和响应标头。

Views: 2

评论

发表回复