在/etc/apt/sources.list.d
下找到对应ppa源的配置,把其中的ppa.launchpad.net
替换为launchpad.proxy.ustclug.org
Views: 0
在/etc/apt/sources.list.d
下找到对应ppa源的配置,把其中的ppa.launchpad.net
替换为launchpad.proxy.ustclug.org
Views: 0
/etc/ssl/openssl.cnf添加以下配置
[openssl_init]
providers = provider_sect
# Load default TLS policy configuration
ssl_conf = ssl_module
alg_section = evp_properties
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib64/engines-3/pkcs11.so
MODULE_PATH = /usr/lib64/opensc-pkcs11.so
init = 0
编译libp11
git clone https://github.com/OpenSC/libp11
cd libp11
autoreconf -fi
./configure --prefix=/usr
make && make install
ln -sf /usr/lib64/engines-3/libpkcs11.so /usr/lib64/libpkcs11.so
ubuntu上libp11叫libengine-pkcs11-openssl
执行openssl engine pkcs11 -t后显示以下内容就对了
(pkcs11) pkcs11 engine
[ available ]
但是我执行这个命令的时候70%的概率会报
/lib64/libpkcs11.so: undefined symbol: OPENSSL_finish
不过我用pkcs11生成证书时一直报错
openssl req -engine pkcs11 -new -keyform engine -key ‘pkcs11:model=PKCS%2315;manufacturer=EnterSafe;serial=2c692c97000a0025;token=OpenSC%20Card;id=%45;object=id_4’ -keyform engine -x509 -out cert.pem -text
Engine “pkcs11” set.
PKCS#11: Initializing the engine: (null)
Unable to load module (null)
PKCS11_get_private_key returned NULL
Could not find private key from org.openssl.engine:pkcs11:pkcs11:model=PKCS%2315;manufacturer=EnterSafe;serial=2c692c97000a0025;token=OpenSC%20Card;id=%45;object=id_4
00CE51640C7F0000:error:41000401:libp11:ERR_P11_error:Unable to load PKCS#11 module:p11_load.c:103:
00CE51640C7F0000:error:40800067:pkcs11 engine:ERR_ENG_error:invalid parameter:eng_back.c:730:
00CE51640C7F0000:error:13000080:engine routines:ENGINE_load_private_key:failed loading private key:crypto/engine/eng_pkey.c:79:
Views: 1
smard card和hsm(hardware security module)本质上一种东西,只是不同的行业叫法不一样。都是通过芯片卡或集成电路提供安全功能。
相关名词:
也叫作Cryptoki,是RSA实验室最初发布,现已为OASIS标准。它定义了智能卡与应用程序之间的编程接口。PKCS#11主要在Linux上使用的比较多。
CAPI和CNG
Cryptographic Application Programming Interface也叫作CryptoAPI,Microsoft Cryptography API, MS-CAPI。由Windows NT 4.0引入,作为Cryptographic Service Provider的编程接口。
CNG的全称是Cryptography API: Next Generation,是由Windows Vista中引入,作为CAPI的升级,在CNG中把provider分为了Key storage provider和Cryptographic Algorithm Providers,前者进行密钥创建,存储及签名,后者提供加密算法。CNG提供了ECC等现代算法的支持,还支持硬件加密模块(HSM,Smard Card)。
Cryptographic Service Provider(CSP)/Key storage provider(KSP)/Cryptographic Algorithm Providers(CAP)
Cryptographic Service Provider是CAPI的实现库,同时提供密钥管理和加解密功能,不支持ECC算法。
Key storage provider(KSP)为CNG提供密创建和存储功能,默认情况下导入的私钥会保存在Microsoft Software Key Storage Provider中,如果需要指定KSP,则要用certutil命令。
Cryptographic Algorithm Providers(CAP)为CNG提供加密解功能
关于CSP/KSP参考:https://www.gradenegger.eu/en/basics-cryptographic-service-provider-csp-and-key-storage-provider-ksp/
Microsoft Base Smart Card Cryptographic Service Provider
这是一个基于CAPI接口的CSP,所以同样不支持ECC算法,用于与Smard Card/HSM交互,它提供了相当于PKCS#11的功能。
miniDriver
Microsoft Base Smart Card Cryptographic Service Provider通过miniDriver与Smard Card进行交互,把来自Microsoft Base Smart Card Cryptographic Service Provider的请求转发给Smard Card。
Smard Card也可以直接实现CSP,KSP,CAP,而不是通过Microsoft Base Smart Card Cryptographic Service Provider中转请求,但是这样对硬件厂商来说会增加成本。miniDriver是为了降低硬件厂商开发CSP的成本。
PC/SC (short for Personal Computer/Smart Card)
是智能卡读卡器与计算机通迅的语义接口,最早为Windows上实现,后来Linux和MacOS也提供了对应的实现。
WinSCard智能卡函数
CCID/ICCD
CCID (chip card interface device)是芯片卡设备,用于USB读卡器
ICCD (Integrated Circuit(s) Card Devices),俗称IC卡,用于USB读卡器
这两种卡都可以通过PC/SC协议通迅
FIPS 140
美国联邦信息处理标准FIPS(Federal Information Processing Standard)是一种针对密码算法模块的安全标准,通过部署FIPS功能,能够提升设备的安全性能。
FIPS是由美国国家标准和技术研究院制定,由美国商务部批准的针对密码算法安全的标准,它规定了一个安全系统中的密码算法模块应该满足的安全性要求。FIPS 140是FIPS系列标准中针对密码算法模块的安全标准,是进行密码算法模块评测认证的基础标准,共分Level1, Level2, Level3三个等级。
FIPS 140–2表示的就是FIPS 140 Level 2
FIDO(U2F,UAF)
U2F(Universal 2nd Factor)和UAF(Universal Authentication Framework)是FIDO开发的第一代身份验证标准。
U2F提供双因素身份验证,但不支持生物识别和无密码认证,主要用于银行。
UAF提供无密码认证和生物认证
FIDO2
FIDO2是FIDO开发的第二代身份验证标准,是对FIDO(U2F,UAF)的扩展,可以支持单因素和多因素身份验证,也支持无密码和生物识别。FIDO2由WebAuthn和CTAP组成,支持Web应用和本地应用的无密码和多因素身份验证。
OTP,HOTP,TOTP
OTP 是 One-Time Password的简写,表示一次性密码。
HOTP 是HMAC-based One-Time Password的简写,表示基于HMAC算法加密的一次性密码。
TOTP 是Time-based One-Time Password的简写,表示基于时间戳算法的一次性密码。
Yubico OTP,可以在每次触摸yubikey按钮时从键盘键盘一串密码
Yubico Authenticator可以支持HOTP,TOTP,并与yubikey集成。其实就是提供硬件支持的Gooogle Authenticator,需要在手机或电脑上下载Yubico Authenticator应用。
PIV(Personal Identity Verification)
PIV的规范由FIPS 201定义(2005年),主要用于智能卡身份认证,比如这种门禁卡
当用于Windows登录时则需要提供对应的智能卡CSP,在Linux上用于登录时需要提供PKCS#11接口。
OpenPGP
是一个加密标准,主要用于签名和加密文件,也可以用于签名和加密电子邮件,在Linux上广泛使用。
OpenPGP也支持使用使用智能卡进行加密,称为OpenPGP card,使用ISO/IEC 7816标准,但是OpenPGP Card只实现了ISO/IEC 7816-4/-8的子集,比PIV卡定义的还要早,一般长这样
当然使用的时候是需要读卡器的。
OpenSSH
ssh命令可以通过-I选项指定PKCS#11库来支持智能卡加密,使用PKCS#11时需要使用证书认证。
Views: 1
openssl req -x509 -newkey rsa:2048 -keyout ca-key.pem -out ca.pem -noenc
生成证书请求
openssl req -newkey rsa:2048 -keyout key.pem -out req.pem -noenc
签名证书
openssl req -x509 -CA ca.pem -CAkey ca-key.pem -in req.pem -copy_extensions copy -out c.pem
Views: 0
keyout的内容与key的输入是一样的
openssl req命令中x509v1选项何时生效
如果使用了扩展则一定会使用V3版本(也就是使用扩展时该选项不生效)。根据我测试的情况openssl3.2以上版本才有此选项,如果想使该选项生效需要指定extensions为空的openssl配置文件(默认配置是有extensions的)
openssl x509命令中-extfile选项指定的文件需要指定section name吗
不需要,会从default section中读取扩展配置
copy_extensions选项copy和copyall选项的区别
copyall会覆盖ca上的现有扩展配置,copy不会
Views: 0
data/nexus-key.json
{
"active": "my-key",
"keys": [
{
"id": "my-key",
"key": "some-secret-key"
}
]
}
把上面的id和key改成自己的
修改nexus的docker-compose.yaml配置
nexus:
image: sonatype/nexus3
restart: always
volumes:
- ./data/nexus:/nexus-data
- ./data/nexus-deploy:/opt/sonatype/nexus/deploy
- ./data/nexus-key.json:/opt/nexus-key.json
environment:
- "NEXUS_SECRETS_KEY_FILE=/opt/nexus-key.json"
执行docker compose up -d
修改生成的key
打开System > API > Security Management: Secrets Encryption
点击Try it out,body中输入以下内容
{
"secretKeyId": "my-key"
}
secretKeyId修改为自己的
最后点击Execute
也可以直接调用curl命令
curl -X 'PUT' \
'https://<your-instance-url>/service/rest/v1/secrets/encryption/re-encrypt' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'NX-ANTI-CSRF-TOKEN: <any-token>' \
-H 'X-Nexus-UI: true' \
-d '{
"secretKeyId": "string",
"notifyEmail": "string"
}'
参考:
https://help.sonatype.com/en/re-encryption-in-nexus-repository.html
Views: 2
rec_control show-yaml > recursor.yaml
或者
rec_control show-yaml path/to/recursor.conf > recursor.yaml
从recursor5.2开始默认读取yaml格式的配置而不是conf格式。
Views: 1
RESET BINARY LOGS AND GTIDS;
SHOW BINARY LOGS;
Views: 0
openssl-ca – sample minimal CA application
此命令模拟 CA 应用程序。请参阅警告,尤其是在考虑有效使用它时。
它生成带有 X.509 版本 3 的证书。除非另有说明,否则密钥标识符扩展将包含在 x509v3_config(5) 中。
它可用于签署各种形式的证书请求 (CSR) 并生成证书吊销列表 (CRL)。它还维护已颁发证书及其状态的文本数据库。签署证书时,可以使用 -in 选项指定单个请求,或者可以通过在所有选项后指定一组 certreq 文件来处理多个请求。
请注意,还有非常精简的证书生成方法:req 和 x509 命令可用于直接创建证书。有关详细信息,请参阅 openssl-req(1) 和 openssl-x509(1)。
ca 命令选项按不同的用途描述。
openssl ca [-help] [-verbose] [-quiet] [-config filename] [-name section] [-section section] [-gencrl] [-revoke file] [-valid file] [-status serial] [-updatedb] [-crl_reason reason] [-crl_hold instruction] [-crl_compromise time] [-crl_CA_compromise time] [-crl_lastupdate date] [-crl_nextupdate date] [-crldays days] [-crlhours hours] [-crlsec seconds] [-crlexts section] [-startdate date] [-not_before date] [-enddate date] [-not_after date] [-days arg] [-md arg] [-policy arg] [-keyfile filename|uri] [-keyform DER|PEM|P12|ENGINE] [-key arg] [-passin arg] [-cert file] [-certform DER|PEM|P12] [-selfsign] [-in file] [-inform DER|<PEM>] [-out file] [-notext] [-dateopt] [-outdir dir] [-infiles] [-spkac file] [-ss_cert file] [-preserveDN] [-noemailDN] [-batch] [-msie_hack] [-extensions section] [-extfile section] [-subj arg] [-utf8] [-sigopt nm:v] [-vfyopt nm:v] [-create_serial] [-rand_serial] [-multivalue-rdn] [-rand files] [-writerand file] [-engine id] [-provider name] [-provider-path path] [-propquery propq] [certreq...]
帮助
-verbose
执行时输出更多的信息
-quiet
输出更少的信息,这在批处理和使用管道时很方便,尤其是密钥生成期间抑制进度.
的输出。
-config
指定备用的配置文件,用于替代默认的openssl.cnf
-name section, -section section
指定该命令的section name(覆盖 ca section中的 default_ca)
-in filename
输入证书请书文件的位置
-inform DER|PEM
输入的csr文件格式,默认首先尝试pem格式
-ss_cert filename
CA签署的单个自签名证书
-spkac filename
CA 将签署的包含单个 Netscape 签名公钥和质询以及其他字段值的文件. See the SPKAC FORMAT section for information on the required input and output format.
-infiles
如果存在,这应该是最后一个选项,所有后续参数都被视为包含证书请求的文件的名称。用于批量请定证书请求文件。
-out filename
The output file to output certificates to. The default is standard output. The certificate details will also be printed out to this file in PEM format (except that -spkac outputs DER format).
证书输出文件,默认是标准输出,证书内容默认为PEM格式(如果指定-spkac则为DER格式)
-outdir directory
证书输出目录。证书文件名由十六进制序列号和附加 .pem 组成。
-cert filename
与-keyfile匹配的CA证书.
-certform DER|PEM|P12
The format of the data in certificate input files
输入文件的证书格式(不应该是证书请求文件吗)
-keyfile filename|uri
签名用的CA私钥,与-cer指定的证书匹配
-keyform DER|PEM|P12|ENGINE
读取私钥时的格式
-sigopt nm:v
签名算法的选项,可以多次使用,不同算法有不同的选项
-vfyopt nm:v
验证签名时指定签名算法的选项,不同的签名算法选项也不同
这通常也需要在签名时提供,因为证书签名请求(CSR)的自签名是根据所包含的公钥进行验证的,并且该验证可能需要其自己的一组选项。
-key password
用于加密私钥的密码。由于在某些系统上命令行参数是可见的(例如,在 Unix 上使用 ps(1) 时),因此应谨慎使用此选项。最好使用 -passin。
-passin arg
读取证书或密钥文件的密码
-selfsign
表示颁发的证书将使用证书请求签名的密钥进行签名(使用 -keyfile 给出)。使用不同密钥签名的证书请求将被忽略。如果给出了 -spkac、-ss_cert 或 -gencrl,则忽略 -selfsign。
使用 -selfsign 的结果是自签名证书出现在证书数据库的条目中(请参阅配置文件选项database),并使用与使用自签名证书签名的所有其他证书相同的序列号计数器。
-notext
输出文件中不包括文本格式的表单.
-dateopt
日期的输出格式. Values are: rfc_822 and iso_8601. Defaults to rfc_822.
-startdate date, -not_before date
证书生效的起始日期。格式是YYMMDDHHMMSSZ
或YYYYMMDDHHMMSSZ
,秒SS和时区Z是必须存在的,可以指定today
-enddate date, -not_after date
证书的截止日期。格式是YYMMDDHHMMSSZ
或YYYYMMDDHHMMSSZ
,秒SS和时区Z是必须存在的,可以指定today
,会覆盖 -days options。
-days arg
指定证书从现在起算有效天数,默认为30。
如果设置了选项 -not_after,则明确的到期日期优先。
-md alg
消息摘要算法,支持的摘要算法可以通过openssl dgst –list命令查看。如果遇到签名算法不支持的alg则会忽略(如ed25519,ed448).这个选项也用于CRL签名
-policy arg
此选项定义要使用的 CA“policy”。这是配置文件中的一个部分,它决定哪些字段应该是必填的或与 CA 证书匹配。查看 POLICY FORMAT 部分了解更多信息。
-msie_hack
这是一个弃用的选项,可使此命令与非常旧版本的 IE 证书注册控件“certenr3”配合使用。它几乎在所有方面都使用了 UniversalStrings。由于旧控件存在各种安全漏洞,因此强烈建议不要使用它。
-preserveDN
通常,证书的 DN 顺序与相关策略部分中字段的顺序相同。设置此选项后,顺序与请求相同。这主要是为了与较旧的 IE 注册控件兼容,该控件仅接受 DN 与请求顺序匹配的证书。Xenroll 不需要这样做。
-noemailDN
如果请求 DN 中存在 EMAIL 字段,证书的 DN 可以包含该字段,但是,将电子邮件设置到证书的 altName 扩展中是一种很好的策略。设置此选项后,EMAIL 字段将从证书的主题中删除,并仅设置在最终存在的扩展中。可以在配置文件中使用 email_in_dn 关键字来启用此行为。
-batch
非交互模式,在这种模式下,不会询问任何问题,所有证书将自动认证。
-extensions section
指定X.509扩展的section,这个section中的证书扩展会在签署证书时添加到证书中(默认是x509_extensions,除非指定了-extfile)
See the x509v3_config(5) manual page for details of the extension section format.
-extfile file
从这个文件中读取证书扩展 (using the default section unless the -extensions option is also used).
-subj arg
取代证书请求中给出的主题名称。
指定主题的DN,arg的格式为/type0=value0/type1=value1/type2=...
。
特殊字符用\
转义,允许使用空格,单个/
指定空的DN,可以用+
代表/
作为两个RDN之间的分隔符,例如/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe
,/C=CN/ST=Shanghai/L=Shanghai/CN=hetao/emailAddress=tao@hetao.me/
。
-utf8
所有字段的值用UTF8解释,默认是ASCII.这意味着从终端输入和配置文件中的值都要是UTF8
-create_serial
如果从配置中指定的文本文件读取序列失败,则指定此选项将创建一个新的随机序列作为下一个序列号。要获取随机序列号,请改用 -rand_serial 标志;这只应用于简单的错误恢复。
-rand_serial
生成一个大随机数作为序列号,这将取代命令行和配置文件中的序列号文件方式。
-gencrl
生成CRL基于index file中的信息.
-crl_lastupdate time
允许明确设置 CRL 的 lastUpdate 字段的值;如果不存在此选项,则使用当前时间。接受 YYMMDDHHMMSSZ 格式(与 ASN1 UTCTime 结构相同)或 YYYYMMDDHHMMSSZ 格式(与 ASN1 GeneralizedTime 结构相同)的时间。
-crl_nextupdate time
允许明确设置 CRL 的 nextUpdate 字段的值;如果存在此选项,则将忽略为 -crldays、-crlhours 和 -crlsec 给出的任何值。接受与 -crl_lastupdate 相同格式的时间。
-crldays num
The number of days before the next CRL is due. That is the days from now to place in the CRL nextUpdate field.
下一个 CRL 到期前的天数。即从现在起到 CRL nextUpdate 字段的天数。
-crlhours num
The number of hours before the next CRL is due.
-crlsec num
The number of seconds before the next CRL is due.
-revoke filename
包含要撤销的证书的文件名。.
-valid filename
包含证书的文件名,用于添加有效证书(即当前生效的证书)条目。
-status serial
显示具有指定序列号的证书的撤销状态并退出。
-updatedb
更新数据库索引以清除过期的证书。
-crl_reason reason
撤销原因,其中原因为以下之一:未指定、keyCompromise、CACompromise、affiliationChanged、superseded、cessationOfOperation、certificateHold 或 removeFromCRL。原因匹配不区分大小写。设置任何撤销原因都将使 CRL 成为 v2。
实际上,removeFromCRL 并不是特别有用,因为它仅用于当前尚未实现的delta CRLs(增量CRLs)。
-crl_hold instruction
CRL revocation reason code设置为 certificateHold时设置这一项,其值为 OID。虽然可以使用任何 OID,但通常只使用 holdInstructionNone(RFC2459 不鼓励使用), holdInstructionCallIssuer 或 holdInstructionReject。
-crl_compromise time
CRL revocation reason code设置为 keyCompromise 时设置这一项,并将compromise time设置为time指定的值。时间应采用 GeneralizedTime 格式,即 YYYYMMDDHHMMSSZ。
-crl_CA_compromise time
CRL revocation reason code设置为 CACompromise 时设置这一项,格式与 crl_compromise 相同。
-crlexts section
配置文件中包含CRL扩展的section,如果没有CRL扩展section指定会使用V1版本的CRL,如果指定CRL扩展 section ,使用V2版本的CRL。指定的 CRL 扩展是 CRL 扩展,而不是 CRL entry扩展。应该注意的是,某些软件(例如 Netscape)无法处理 V2 CRL。有关扩展部分格式的详细信息,请参阅 x509v3_config(5) 手册页。
crl Extensions是X.509 V3版本增加的内容,是CRL证书的扩展字段,与普通证书x509v3扩展的格式是一样的。
The section of the configuration file containing options for this command is found as follows: If the -name command line option is used, then it names the section to be used. Otherwise the section to be used must be named in the default_ca option of the ca section of the configuration file (or in the default section of the configuration file). Besides default_ca, the following options are read directly from the ca section: RANDFILE preserve msie_hack With the exception of RANDFILE, this is probably a bug and may change in future releases.
寻找配置文件中section的方式如下:如果使用 -name 命令行选项,则它指定的section会被使用。否则,必须在配置文件的 ca section(或在配置文件的 default section中)的名为default_ca 选项中指定使用的section。除了 default_ca,以下选项直接从 ca 部分读取:RANDFILE preserve msie_hack 除 RANDFILE 外,这大概是一个bug,可能会在将来的版本中更改。(不知道这里说的所有3选项都是bug,还是RANDFILE以外的是bug)
许多配置文件选项与命令行选项相同。如果选项存在于配置文件和命令行中,则使用命令行值。如果选项被描述为必需的,则它必须存在于配置文件或使用的命令行等效项(如果有)中。
这指定了一个包含附加OBJECT IDENTIFIERS的文件。文件的每一行都应由对象标识符的numerical,后跟空格,然后是短名称,后跟空格,最后是长名称的形式组成。
oid_section
这指定配置文件中包含object identifier的section。每行应由object identifier的短名称后跟 = 和numerical组成。使用此选项时,短名称和长名称相同。
其实 = 后跟 长名称 然后是 逗号,最后是oid的数字表示。可以参考openssl config部分的文档。
例如:
[oids]
shortName = a very long OID name, 1.2.3.4
newoid1 = 1.2.3.4.1
some_other_oid = 1.2.3.5
与 -outdir 命令行选项相同。它指定放置新证书的目录。必填。
certificate
与 -cert 选项相同。它提供包含 CA 证书的文件。必需。
private_key
与 -keyfile 选项相同。包含 CA 私钥的文件。必需。
RANDFILE
openssl启动时,指定的文件将被加载到随机数生成器中,退出时将向其中写入 256 个字节。
default_days
The same as the -days option. The number of days from today to certify a certificate for.
default_startdate
The same as the -startdate option. The start date to certify a certificate for. If not set the current time is used.
default_enddate
The same as the -enddate option. Either this option or default_days (or the command line equivalents) must be present.
default_crl_hours default_crl_days
The same as the -crlhours and the -crldays options. These will only be used if neither command line option is present. At least one of these must be present to generate a CRL.
default_md
The same as the -md option. Mandatory except where the signing algorithm does not require a digest (i.e. Ed25519 and Ed448).
database
要使用的text database文件。必需。此文件必须存在,尽管最初它是空的。
unique_subject
如果指定值为 yes,则数据库中的有效证书必须具有唯一的subject。如果指定值为 no,则多个有效证书可能具有完全相同的subject。默认值为 yes,以与旧版本(0.9.8 之前)的 OpenSSL 兼容。但是,为了使 CA 证书更易于更新,建议使用值 no,尤其是与 -selfsign 命令行选项结合使用时。
请注意,在某些情况下,创建没有任何subject的证书是有效的。如果有多个证书没有主题,则这不算重复。
serial
包含下一个要使用的十六进制序列号的文本文件。必需。此文件必须存在且包含有效序列号。
crlnumber
包含下一个要使用的 CRL number(十六进制)的文本文件。仅当此文件存在时,才会将 CRL number插入到 CRL 中。如果此文件存在,则它必须包含有效的 CRL number。
CRL number是CRLExtension中的字段
x509_extensions
A fallback to the -extensions option.
crl_extensions
A fallback to the -crlexts option.
preserve
The same as -preserveDN
email_in_dn
The same as -noemailDN. If you want the EMAIL field to be removed from the DN of the certificate simply set this to ‘no’. If not present the default is to allow for the EMAIL filed in the certificate’s DN.
msie_hack
The same as -msie_hack
policy
The same as -policy. Mandatory. See the POLICY FORMAT section for more information.
name_opt, cert_opt
这些选项允许指定用户确认签名时显示证书详细信息的格式。openssl x509命令中 -nameopt 和 -certopt 开关支持的所有选项都可以在这里使用,但 no_signame 和 no_sigdump 除外,它们是永久设置的,无法禁用(这是因为证书签名无法显示,因为此时证书尚未签名)。
为方便起见,也可以指定 ca_default 值以产生合理的输出。
如果不存在这个选项,则使用早期版本的 OpenSSL 中使用的格式。强烈建议不要使用旧格式,因为它仅显示策略部分中提到的字段,错误处理多字节字符串类型并且不显示扩展。
copy_extensions
Determines how extensions in certificate requests should be handled. If set to none or this option is not present then extensions are ignored and not copied to the certificate. If set to copy then any extensions present in the request that are not already present are copied to the certificate. If set to copyall then all extensions in the request are copied to the certificate: if the extension is already present in the certificate it is deleted first. See the WARNINGS section before using this option.
The main use of this option is to allow a certificate request to supply values for certain extensions such as subjectAltName.
确定如何处理证书请求中的扩展。如果设置为 none 或此选项不存在,则将忽略扩展,而不会将其复制到证书中。如果设置为 copy,则请求中存在但配置文件中不存在的任何扩展都将复制到证书中。如果设置为 copyall,则请求中的所有扩展都将复制到证书中并且会覆盖本地配置中已存在的扩展。使用此选项之前,请参阅“警告”部分。(但是英文中说的是会覆盖现有证书的中扩展,这解释不通)
此选项的主要用途是允许证书请求为某些扩展提供值,例如 subjectAltName。
策略section由一组与证书 DN 字段相对应的变量集组成。如果值为“match”,则字段值必须与 CA 证书中的相同字段匹配。如果值为“supplied”,则必须存在。如果值为“optional”,则可能存在。策略部分中未提及的任何字段都会被默删除,除非设置了 -preserveDN 选项,但这可以看作是一种怪癖,而不是预期的行为。
-spkac filename 命令行选项的输入是 Netscape 签名的公钥和质询。这通常来自 HTML 表单中的 KEYGEN 标记,用于创建新的私钥。但是,可以使用 openssl-spkac(1) 创建 SPKAC。
该文件应包含 SPKAC 变量以及所需的 DN 组件作为name value对。如果您需要两次包含相同的组件,则可以在其前面加上数字和“.”。
处理 SPKAC 格式时,如果使用 -out 标志,则输出为 DER,但如果发送到 stdout 或使用 -outdir 标志,则输出为 PEM 格式。
注意:所有文件的位置都可以通过编译时选项、配置文件条目、环境变量或命令行选项进行更改。以下值反映默认值。
/usr/local/ssl/lib/openssl.cnf – master configuration file
./demoCA – main CA directory
./demoCA/cacert.pem – CA certificate
./demoCA/private/cakey.pem – CA private key
./demoCA/serial – CA serial number file
./demoCA/serial.old – CA serial number backup file
./demoCA/index.txt – CA text database file
./demoCA/index.txt.old – CA text database backup file
./demoCA/certs – certificate output file
text database索引文件是该过程的关键部分,如果损坏,则很难修复。理论上可以从所有已颁发的证书和当前 CRL 重建索引文件:但是没有选项可以这样做。
目前不支持delta CRLs 等 V2 CRL 的功能。
虽然可以一次输入和处理多个请求,但只能包含一个 SPKAC 或 自签名证书。
此命令很古怪,有时甚至非常不友好。
当存在大量证书时,使用内存中的文本数据库可能会导致问题,因为顾名思义,数据库必须保存在内存中(爆内存吗)。
此命令确实需要重写或在命令或interface级别公开所需的功能,以便更用户友好的替代品可以正确处理事情。脚本 CA.pl 有一点帮助,但不是很多。但是有一些商业的CA服务工具,比如smallstep,ejbca。
请求中任何未在策略中出现的字段(DN字段)都会被默默删除。如果使用 -preserveDN 选项,则不会发生这种情况。要强制 DN 中不存在 EMAIL 字段(如 RFC 所建议的那样),无论请求主题的内容如何,都可以使用 -noemailDN 选项。这种处理方式应该更友好且可配置。
Canceling some commands by refusing to certify a certificate can create an empty file.
签署证书被拒绝而使一些命令中止会创建一个空文件
此命令最初旨在作为如何在 CA 中执行操作的示例。其代码不具备生产质量。它本身不应用作完整的 CA,尽管有些人至少在内部将其用于此目的。在这样做时,应特别注意正确保护用于签署证书的私钥。建议将它们保存在安全的硬件存储中,例如智能卡或 HSM,并通过合适的引擎或加密提供程序访问它们。
此命令实际上是一个单用户命令:不会对各个文件进行锁定,并且尝试在同一数据库上运行多个 openssl ca 命令可能会产生不可预测的结果。
应谨慎使用 copy_extensions 选项。如果不小心,则可能存在安全风险。例如,如果证书请求包含带有 CA:TRUE 的 basicConstraints 扩展,并且 copy_extensions 值设置为 copyall,并且用户在显示证书时没有发现这一点,那么这将向请求者提供有效的 CA 证书。可以通过将 copy_extensions 设置为 copy 并在配置文件中包含带有 CA:FALSE 的 basicConstraints 来避免这种情况。这时,如果请求包含 basicConstraints 扩展,它将被忽略。
建议还包括其他扩展的值(例如 keyUsage),以防止请求提供自己的值。
可以对 CA 证书本身施加其他限制。例如,如果 CA 证书具有:
“`openssl cnf
basicConstraints = CA:TRUE, pathlen:0
“`
那么即使证书是用 CA:TRUE 颁发的,它也不会有效。(pathlen:0表示不允许有子CA证书)
自 OpenSSL 1.1.1 起,该程序遵循 RFC5280。具体来说,如果日期早于 2049 年(含),则证书有效期(由 -startdate、-enddate 和 -days 中的任意一个指定)和 CRL 上次/下次更新时间(由 -crl_lastupdate、-crl_nextupdate、-crldays、-crlhours 和 -crlsec 中的任意一个指定)将被编码为 UTCTime,如果日期在 2050 年或之后,则将被编码为 GeneralizedTime。
OpenSSL 1.1.1 引入了一个新的随机生成器 (CSPRNG),并改进了seeding机制。新的seeding机制使得无需定义 RANDFILE 来保存和恢复随机性。保留此选项主要出于兼容性原因。
-section 选项是在 OpenSSL 3.0.0 中添加的。
-multivalue-rdn 选项在 OpenSSL 3.0.0 中已过时,并且无效。
-engine 选项在 OpenSSL 3.0 中已弃用。
自 OpenSSL 3.2 起,生成的证书带有 X.509 版本 3,并且默认包含key identifier扩展。
Views: 8
openssl-x509 – Certificate display and signing command
openssl x509 [-help] [-in filename|uri] [-passin arg] [-new] [-x509toreq] [-req] [-copy_extensions arg] [-inform DER|PEM] [-vfyopt nm:v] [-key filename|uri] [-keyform DER|PEM|P12|ENGINE] [-signkey filename|uri] [-out filename] [-outform DER|PEM] [-nocert] [-noout] [-dateopt] [-text] [-certopt option] [-fingerprint] [-alias] [-serial] [-startdate] [-enddate] [-dates] [-subject] [-issuer] [-nameopt option] [-email] [-hash] [-subject_hash] [-subject_hash_old] [-issuer_hash] [-issuer_hash_old] [-ext extensions] [-ocspid] [-ocsp_uri] [-purpose] [-pubkey] [-modulus] [-checkend num] [-checkhost host] [-checkemail host] [-checkip ipaddr] [-set_serial n] [-next_serial] [-not_before date] [-not_after date] [-days arg] [-preserve_dates] [-set_issuer arg] [-set_subject arg] [-subj arg] [-force_pubkey filename] [-clrext] [-extfile filename] [-extensions section] [-sigopt nm:v] [-badsig] [-digest] [-CA filename|uri] [-CAform DER|PEM|P12] [-CAkey filename|uri] [-CAkeyform DER|PEM|P12|ENGINE] [-CAserial filename] [-CAcreateserial] [-trustout] [-setalias arg] [-clrtrust] [-addtrust arg] [-clrreject] [-addreject arg] [-rand files] [-writerand file] [-engine id] [-provider name] [-provider-path path] [-propquery propq]
此命令是一个多用途证书处理命令。它可用于打印证书信息、将证书转换为各种形式、编辑证书信任设置、从头开始或从证书请求生成证书,然后自行签名或像“micro CA”一样签名。
生成的证书带有 X.509 version 3扩展。除非另有说明,否则密钥标识符扩展将包含。
由于有大量选项,它们将分为不同的部分。
输入,输出和通用选项
帮助
-in filename
输入证书或请书请求(-req指定时)文件的位置,默认为std input。不能与-new选项一起使用
-passin arg
读取证书或密钥文件的密码
-new
从头创建证书,不使用-in读取证书或证书请求,所以不能与-in和-req选项共存。-set_subject option是必须的(subject代表公钥所属的实体),通过-force_pubkey指定公钥(此时是对这个公钥签名)。默认是自签名(自己的公钥)且使用-key (or -signkey)提供的私钥。
-x509toreq
生成证书请求而不是证书,自签名时必须指定 -key (or -signkey) option用于提供自签名私钥,对应的公钥会保存在subjectPKInfo字段。
默认情况下,不会复制输入证书中包含的 X.509 扩展。可以使用 -extfile 选项指定要添加的 X.509 扩展。
-req
默认情况下,输入时需要证书。使用此选项则需要 PKCS#10 证书请求,该请求必须正确自签名(防止篡改)。
默认情况下,不会复制请求中包含的 X.509 扩展。可以使用 -extfile 选项指定要添加的 X.509 扩展。
-copy_extensions arg
当使用-x509toreq证书转请求或-req请求转证书时确定复制X.509扩展的方式。arg为none时忽略所有扩展,为copy或copyall时复制所有扩展,还可以通过-ext选项进一步控制要复制哪些扩展。
-inform DER|PEM
输入的csr文件格式,默认首先尝试pem格式
-vfyopt nm:v
验证签名时指定签名算法的选项,不同的签名算法选项也不同
-key filename|uri
此选项提供用于签署新证书或证书请求的私钥。除非提供 -force_pubkey,否则该私钥对应的公钥将放在新证书或证书请求中,从而产生自签名。
此选项不能与 -CA 选项一起使用。
把issuer name设置为subject name(即使是自签名)。除非提供 -preserve_dates 选项,否则它将有效期开始日期设置为当前时间,并将结束日期设置为由 -days 选项确定的值。开始日期和结束日期也可以通过选项 -not_before 和 -not_after 明确提供。
-signkey filename|uri
这个选项是-key的别名
-keyform DER|PEM|P12|ENGINE
读取key的格式
-out filename
输出文件位置,不指定时输出到终端
-outform DER|PEM
输出文件格式,默认PEM
-nocert
不打印证书,其余部分按下面选项指定的内容打印
-noout
只打印下面选项指定的内容
证书打印选项
注意:-alias 和 -purpose 选项也是打印选项,但在“Trust Settings”部分中描述。
指定日期输出格式。值为:rfc_822 和 iso_8601。默认为 rfc_822。
-text
以文本形式打印出证书。打印的完整详细信息包括public key, signature algorithms, issuer and subject DN名称, serial number, 任意 extensions以及任何trust settings。
-certopt option
为-text自定议打印格式,多个选项可以指定多次也可以用豆号分隔,具体语法参考”Text Printing Flags“
-fingerprint
计算和打印证书(DER编码)的指纹,每个证书的指纹是唯一的
-alias
打印证书的alias(nickname),如果有的话。
-serial
打印证书序列号
-startdate
打印证书生效起始日期
-enddate
打印证书失效日期
-dates
打印证书的起始和失效日期
-subject
Prints the subject name.
-issuer
Prints the issuer name.
-nameopt option
指定subject or issuer names 的显示方式. 参考:openssl-namedisplay-options for details.
Prints the email address(es) if any.
-hash
同-subject_hash
-subject_hash
打印subject name的hash,用于生成索引在目录中通过subject name查找证书。
-subject_hash_old
打印subject name的hash,使用OpenSSL 1.0中的旧hash算法
-issuer_hash
Prints the “hash” of the certificate issuer name.
-issuer_hash_old
Prints the “hash” of the certificate issuer name using the older algorithm as used by OpenSSL before version 1.0.0.
-ext extensions
以文本形式打印出证书扩展。也可用于限制要复制的扩展。扩展用逗号分隔的字符串指定,例如“subjectAltName, subjectKeyIdentifier”。请参阅 x509v3_config .
-ocspid
打印subject name 和 public key 的 OSCP hash.
-ocsp_uri
Prints the OCSP responder address(es) if any.
-purpose
对证书扩展执行测试并输出结果. For a more complete description see “Certificate Extensions” in openssl-verification-options.
-pubkey
Prints the certificate’s SubjectPublicKeyInfo block in PEM format.
-modulus
This option prints out the value of the modulus of the public key contained in the certificate.
-checkend arg
检查如果证书在未来arg秒钟内过期返回非0值,否者返回0值。
-checkhost host
Check that the certificate matches the specified host.
-checkemail email
Check that the certificate matches the specified email address.
-checkip ipaddr
Check that the certificate matches the specified IP address.
-set_serial n
指定证书序列号
Specifies the serial number to use. This option can be used with the -key, -signkey, or -CA options. If used in conjunction with the -CA option the serial number file (as specified by the -CAserial option) is not used.
The serial number can be decimal or hex (if preceded by 0x).
-next_serial
当前证书序列号加1
Set the serial to be one more than the number in the certificate.
-not_before date
指定证书生效起始日期
证书生效的起始日期。格式是YYMMDDHHMMSSZ
或YYYYMMDDHHMMSSZ
,秒SS和时区Z是必须存在的,可以指定today
Cannot be used together with the -preserve_dates option.
-not_after date
指定证书过期时间
证书生效的起始日期。格式是YYMMDDHHMMSSZ
或YYYYMMDDHHMMSSZ
,秒SS和时区Z是必须存在的,可以指定today
Cannot be used together with the -preserve_dates option. This overrides the option -days.
-days arg
指定证书从现在起算有效天数,默认为30。
不能与选项 -preserve_dates 一起使用。如果设置了选项 -not_after,则明确的到期日期优先。
-preserve_dates
签署证书时,保留任何输入证书的“notBefore”和“notAfter”日期,而不是将其调整为当前时间和持续时间。不能与选项 -days、-not_before 和 -not_after 一起使用。
-set_issuer arg
创建证书时指定issuer的DN名,具体格式参考-set_subject
-set_subject arg
创建证书时指定主题的DN,arg的格式为/type0=value0/type1=value1/type2=...
。
特殊字符用\
转义,允许使用空格,单个/
指定空的DN,可以用+
代表/
作为两个RDN之间的分隔符,例如/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe
,/C=CN/ST=Shanghai/L=Shanghai/CN=hetao/emailAddress=tao@hetao.me/
。
This option can be used with the -new and -force_pubkey options to create a new certificate without providing an input certificate or certificate request.
-subj arg
This option is an alias of -set_subject.
-force_pubkey filename
创建证书时使用指定证书的公钥,而不是输入证书或请求中以及-key选项指定的公钥(与私钥对应)。
如果filename是一个私钥文件则使用其公钥部分。
与 -new and -set_subject 一起使用可以直接生成包含指定公钥和subject的证书.
This option is also useful for creating self-issued certificates that are not self-signed, for instance when the key cannot be used for signing, such as DH.
-clrext
默认情况下,将证书转换为新证书时,所有证书扩展都会保留。
转换证书或证书请求时,-clrext 选项会阻止从源接管任何扩展。无论如何,在生成证书请求时,都不会接管主体标识符或授权密钥标识符扩展。
-extfile filename
在创建证书或请求时filename指定要添加的X.509扩展,
-extensions section
为-extfile指定section名称,如果没有指定则直接从default section查看,也会从default section中的extensions变量指定的section中查找。
See the x509v3_config(5) manual page for details of the extension section format.
Unless specified otherwise, key identifier extensions are included as described in x509v3_config(5).
-sigopt nm:v
签名算法的选项,可以多次使用,不同算法有不同的选项
-badsig
写入一个无效签名,用于测试
-digest
要使用的digest算法。这会影响使用消息摘要的任何签名或打印选项,例如 -fingerprint、-key 和 -CA 选项。可以使用 openssl-dgst(1) 命令支持的任何摘要。如果未指定,对于-fingerprint选项则使用 SHA1,对于签名算法的通常为 SHA256。
微型CA(模拟一个小型CA服务器)
指定签名用的 CA 证书,使用这个选项时,它的行为就是一个微型CA:CA证书的subject name会为成新证书的issuer,然后使用CA的私钥签证。
这个选项不能与-key (or -signkey)一起使用。与-req选项一起使用时会读入CSR,否者会读入证书,另外与-new一起使用时会从头创建证书。
-CAform DER|PEM|P12,
CA证书的格式
-CAkey filename|uri
设置CA的私钥,指定的私钥必须与CA证书匹配,如果没有指定这个选项则-CA指定的CA证书中必须包括私钥。
-CAkeyform DER|PEM|P12|ENGINE
The format for the CA key; unspecified by default. See openssl-format-options(1) for details.
-CAserial filename
设置要使用的 CA 序列号文件。
使用此选项和 -CA 选项创建证书时,证书序列号存储在给定文件中。此文件由一行组成,其中包含偶数个十六进制数字,以及上次使用的序列号。读取此数字后,该数字将递增并使用,然后更新文件。
默认文件名由 CA 证书文件基本名称和附加的 .srl 后缀组成。例如,如果 CA 证书文件名为 mycacert.pem,则它会找到一个名为 mycacert.srl 的序列号文件。
如果指定了 -CA 选项,并且未提供 -CAserial> 或 -CAcreateserial,并且默认序列号文件不存在,则会生成一个随机数;这是推荐的做法。
-CAcreateserial
-CA 选项一起使用,如果不存在 CA 序列号文件,则创建该文件。将生成一个随机数用于证书,并保存到如上所述(-CAserial filename)确定的序列号文件中。
可信设置。
受信任证书是一种普通证书,它附带了几个附加信息,例如证书的允许和禁止用途以及可能的“alias”(nickname)。
通常,在验证证书时,必须至少有一个证书是“受信任的”。默认情况下,受信任证书必须存储在本地,并且必须是根 CA:任何以此 CA 结尾的证书链都可以用于任何目的(受支持的)。
信任设置目前仅用于根 CA。它们允许更精细地控制根 CA 的用途。例如,CA 可能被信任用于 SSL 客户端,但不被信任用于 SSL 服务器。
有关信任设置含义的更多信息,请参阅 openssl-verification-options。
OpenSSL 的未来版本将识别任何证书上的信任设置:而不仅仅是根 CA。
可信证书包含在—–BEGIN TRUSTED CERTIFICATE—–分隔符中,用于openssl对证书的用途进行验证。
这个可能主要用于OpenSSL的SSL会话中信任服务端证书,比如s_client命令,相当于OpenSSL专用的受信任根证书列表。
标记任意PEM证书输出为受信任的。普通和受信任证书都可以作为输入但是默认情况下任何可信设置都会丢弃。使用这个选项后可以输出受信任证书。如果只是修改证书的信任设置仍然会输出一个信任证书。
-setalias arg
设置证书的alias,这将允许使用nickname引用一个证书,例如”Steve’s Certificate”
-clrtrust
清除证书的允许用途
-addtrust arg
添加受信任的证书用途。此处可以使用任何对象名称,但目前仅定义了 clientAuth、serverAuth、emailProtection 和 anyExtendedKeyUsage。从 OpenSSL 1.1.0 开始,最后一次在被拒绝时阻止所有用途,在受信任时启用所有用途。其他 OpenSSL 应用程序可能会定义其他用途。
-clrreject
请理证书所有禁止用途。
-addreject arg
添加禁止的证书用途,与-addtrust option的格式相同.
通用选项
指定随机数状态保存的文件,读取之前的随机数生成器状态并写入当前状态用于下次执行的时候继续使用。现在OpenSSL已经从操作系统中读取熵源,这个选项不再需要,只是在特殊情况下才有用。
-engine id
指定engine id,这个选项已经废弃
-provider name
指定provider name
-provider-path path
provider的路径
-propquery propq
provider中的属性
除了自定义名称打印格式外,还可以使用 -certopt 选项(当存在-text选项时)自定义打印的实际字段。默认行为是打印所有字段。
Use the old format. This is equivalent to specifying no printing options at all.
no_header
Don’t print header information: that is the lines saying “Certificate” and “Data”.
no_version
Don’t print out the version number.
no_serial
Don’t print out the serial number.
no_signame
Don’t print out the signature algorithm used.
no_validity
Don’t print the validity, that is the notBefore and notAfter fields.
no_subject
Don’t print out the subject name.
no_issuer
Don’t print out the issuer name.
no_pubkey
Don’t print out the public key.
no_sigdump
Don’t give a hexadecimal dump of the certificate signature.
no_aux
Don’t print out certificate trust information.
no_extensions
Don’t print out any X509V3 extensions.
ext_default
Retain default extension behaviour: attempt to print out unsupported certificate extensions.
ext_error
Print an error message for unsupported certificate extensions.
ext_parse
ASN1 parse unsupported extensions.
ext_dump
Hex dump unsupported extensions.
ca_default
The value used by openssl-ca, equivalent to no_issuer, no_pubkey, no_header, and no_version.
The conversion to UTF8 format used with the name options assumes that T61Strings use the ISO8859-1 character set. This is wrong but Netscape and MSIE do this as do many certificates. So although this is incorrect it is more likely to print the majority of certificates correctly.
名称选项(-subject,-issuer)会转换为UTF8 格式转换,假定 T61Strings 使用的是 ISO8859-1 字符集。这是错误的,但 Netscape 和 MSIE 以及许多证书都这样做。因此,尽管这是不正确的,但更有可能正确打印大多数证书。
-email 选项搜索主题名称和主题备用名称扩展名。只会打印出唯一的电子邮件地址:它不会多次打印相同的地址。
自 OpenSSL 3.2 起,生成的证书带有 X.509 版本 3(不再支持低于V3的版本?),并且默认包含key identifier扩展。
Views: 0