分类: 未分类

  • openssl-x509

    openssl-x509

    名字

    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扩展。除非另有说明,否则密钥标识符扩展将包含。
    由于有大量选项,它们将分为不同的部分。

    命令选项

    Input, Output, and General Purpose Options

    输入,输出和通用选项

    • -help

      帮助

    • -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

      只打印下面选项指定的内容

    Certificate Printing Options

    证书打印选项
    注意:-alias 和 -purpose 选项也是打印选项,但在“Trust Settings”部分中描述。

    • -dateopt

      指定日期输出格式。值为: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.

    • -email

      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.

    Certificate Checking Options

    • -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.

    Certificate Output Options

    • -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

      指定证书生效起始日期
      证书生效的起始日期。格式是YYMMDDHHMMSSZYYYYMMDDHHMMSSZ,秒SS和时区Z是必须存在的,可以指定today

      Cannot be used together with the -preserve_dates option.

    • -not_after date

      指定证书过期时间
      证书生效的起始日期。格式是YYMMDDHHMMSSZYYYYMMDDHHMMSSZ,秒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。

    Micro-CA Options

    微型CA(模拟一个小型CA服务器)

    • -CA filename|uri

      指定签名用的 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)确定的序列号文件中。

    Trust Settings

    可信设置。

    受信任证书是一种普通证书,它附带了几个附加信息,例如证书的允许和禁止用途以及可能的“alias”(nickname)。
    通常,在验证证书时,必须至少有一个证书是“受信任的”。默认情况下,受信任证书必须存储在本地,并且必须是根 CA:任何以此 CA 结尾的证书链都可以用于任何目的(受支持的)。
    信任设置目前仅用于根 CA。它们允许更精细地控制根 CA 的用途。例如,CA 可能被信任用于 SSL 客户端,但不被信任用于 SSL 服务器。
    有关信任设置含义的更多信息,请参阅 openssl-verification-options
    OpenSSL 的未来版本将识别任何证书上的信任设置:而不仅仅是根 CA。

    可信证书包含在—–BEGIN TRUSTED CERTIFICATE—–分隔符中,用于openssl对证书的用途进行验证。
    这个可能主要用于OpenSSL的SSL会话中信任服务端证书,比如s_client命令,相当于OpenSSL专用的受信任根证书列表。

    • -trustout

      标记任意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的格式相同.

    Generic options

    通用选项

    • -rand files, -writerand file

      指定随机数状态保存的文件,读取之前的随机数生成器状态并写入当前状态用于下次执行的时候继续使用。现在OpenSSL已经从操作系统中读取熵源,这个选项不再需要,只是在特殊情况下才有用。

    • -engine id

      指定engine id,这个选项已经废弃

    • -provider name

      指定provider name

    • -provider-path path

      provider的路径

    • -propquery propq

      provider中的属性

    Text Printing Flags

    除了自定义名称打印格式外,还可以使用 -certopt 选项(当存在-text选项时)自定义打印的实际字段。默认行为是打印所有字段。

    • compatible

      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.

    NOTES

    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

  • openssl-req

    openssl-req

    名字

    openssl-req – PKCS#10 certificate request and certificate generating command

    概述

    openssl req [-help] [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-passin arg] [-out filename] [-passout arg] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-new] [-newkey arg] [-pkeyopt opt:value] [-noenc] [-nodes] [-key filename|uri] [-keyform DER|PEM|P12|ENGINE] [-keyout filename] [-keygen_engine id] [-digest] [-config filename] [-section name] [-x509] [-x509v1] [-CA filename|uri] [-CAkey filename|uri] [-not_before date] [-not_after date] [-days n] [-set_serial n] [-newhdr] [-copy_extensions arg] [-extensions section] [-reqexts section] [-addext ext] [-precert] [-utf8] [-reqopt] [-subject] [-subj arg] [-multivalue-rdn] [-sigopt nm:v] [-vfyopt nm:v] [-batch] [-verbose] [-quiet] [-nameopt option] [-rand files] [-writerand file] [-engine id] [-provider name] [-provider-path path] [-propquery propq]

    描述

    这个命令用于生成证书请求文件,生成的证书请求文件符合PKCS#10标准,证书请求是申请证书的第一步。
    同时这个命令也能创建自签名证书。

    选项说明

    • -help

      帮助

    • -inform DER|PEM

      输入的csr文件格式,默认首先尝试pem格式

    • -outform DER|PEM

      输出CSR格式,无默认值

    • -in filename

      输入文件的位置,默认为std input,除非指定了-x509 or -CA。也就是说-x509或-CA必须通过-in选项从文件读取公钥
      只有未指定创建选项时 (-new or -newkey or -precert) 才会读取证书请求.
      req命令是用来生成证书请求的,-in参数有什么用呢?共实req命令不光能生成证书请求还能读取和验证证书请求,以及根据证书请求签署证书,这时候就需要-in参数。

    • -sigopt nm:v

      指定签名算法

    • -vfyopt nm:v

      验证签名时指定签名算法的选项,不同的签名算法选项也不同

    • -passin arg

      输入文件的密码来源,可以是pass:password,env:var,file:pathname,fd:number,stdin

    • -passout arg

      输出文件的密码来源

    • -out filename

      输出文件名,通常是证书请求或证书(-x509或-ca)

    • -text

      打印csr的内容到屏幕上并且后面跟CSR正文,当指定-out参数时则是写入到文件中

      用法如下:
      openssl req -in ca.csr -text

    • -subject

      打印CSR的subject到屏幕上

    • -noout

      阻止输出CSR正文,当不指定-text都打印参数时则什么也不输出,指定-text参数时只会输出text。

    • -modulus

      打印csr的公钥模数

    • -verify

      验证csr中的自签名是否正确,如果失败立即退出,如果正确会显示Certificate request self-signature verify OK。

    • -new

      生成新的证书请求,它会提示输入相关字段的值。提示输入的字段在配置文件中指定。
      如果没有指定-key则根据配置文件生成私钥或者指定-newkey and -pkeyopt选项,否者会使用2048位的RSA私钥。

    • -newkey arg

      指定生成私钥的参数
      在没有指定-key的时候用于生成私钥,可以与-new一起使用创建csr,也可以与-x509一起使用来创建证书。
      arg参数有一下几种格式:

      • [rsa:]nbits

        指定rsa算法及位数,rsa是可选的

      • param:file

        指定参数文件,只有dsa,dh,dhx,ec算法支持参数文件。

      • algname[:file]

        指定具体算法和参数文件,只有dsa,dh,dhx,ec算法支持参数文件

      • dsa:filename

        指定dsa算法和参数文件

      • ec:filename

        指定ec算法和参数文件。

      • gost2001:filename

        指定gost2001算法和参数文件,gost是俄罗斯政府推出的签名算法。

      参数文件是用openssl genpkey命令生成的,对于dsa,dh,dhx算法,参数文件已经包含了私钥的各种参数值,对于ec算法,参数文件就是曲线的OID标识符,可以是各种类型的曲线。当不指定参数文件时可以通过-pkeyopt指定算法参数

    • -pkeyopt opt:value

      如果有多个参数可以指定多次,参数的具体值参考openssl genpkey命令

    • -key filename|uri

      指定私钥文件,用于签名新的证书或证书请求。如果不指定-in的话会把-key指定的私钥的公钥放入证书或证书请求中形成自签名证书或证书请求。
      指定-CA选项时这个这个选项会被覆盖(-CA可以生成非自签名证书)

    • -keyform DER|PEM|P12|ENGINE

      私钥的格式

    • -keyout filename

      写入私钥到指定的文件名,私钥可以是-newkey创建的,也可以是-key读入的。如果生成了新私钥且未指定-keyout则会输出到标准输出。如果-keyout和-key选项都没有指定则使用配置文件中的default_keyfile选项,如果存在的话。(If neither the -keyout option nor the -key option are given then the filename specified in the configuration file with the default_keyfile option is used, if present.)。

    • -noenc

      不加密私钥

    • -nodes

      已废弃,同-noenc

    • -digest

      签名用的摘要算法,只要是openssl dgst支持的算法都可以,会覆盖配置文件中指定的摘要算法。一些公钥算法只支持特定的摘要算法,这个选项不生效。例如DSA仅支持SHA1。

    • -config

      指定备用的配置文件,用于替代默认的openssl.cnf

    • -section name

      指定该命令的section name,默认是req

    • -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/

    • -multivalue-rdn

      废弃选项,不起作用

    • -x509

      使用这个选项时生成证书而不是证书请求,当指定-CA选项是-x509是默认指定的。
      使用-x509选项时如果没有指定-in选项则隐含包括-new选项。
      如果没有指定-CA则会生成自签名证书
      如果-in选项指定了证书请求则将其转换为证书,否者从头创建请书请求。(If an existing request is specified with the -in option, it is converted to a certificate; otherwise a request is created from scratch.)
      如果没有指定-set_serial则使用一个大随机数作为证书序列号
      除非使用 -copy_extensions 选项,否则不会从证书请求输入文件中复制 X.509 扩展。

      可以在配置文件中指定要添加的 X.509 扩展,可以使用 -config 和 -extensions 选项,和/或使用 -addext 选项指定配置文件。
      除非给出 -x509v1,否则生成的证书将带有 X.509 版本 3。除非另有说明,否则将包含密钥标识符扩展属性,如 x509v3_config(5) 中所述。也就是说密钥标识符是默认就包含的V3扩展。

    • -x509v1

      使用X509 V1版本,使用-x509时这是一个隐含选项。如果使用了扩展则一定会使用V3版本(也就是使用扩展时该选项不生效)。
      根据我测试的情况openssl3.2以上版本才有此选项,如果想使该选项生效需要指定extensions为空的openssl配置文件(默认配置是有extensions的)

    • -CA filename|uri

      指定签名用的CA证书,CA证书的subject DN会放入签署证书的issuer DN字段,并使用-CAkey指定的私钥生成签名。

    • -CAkey filename|uri

      签署证书的CA私钥,必须与-CA指定的证书中的公钥匹配,如果不指定则-CA指定的证书中必须包含私钥(If this option is not provided then the key must be present in the -CA input).

    • -not_before date

      证书生效的起始日期。格式是YYMMDDHHMMSSZYYYYMMDDHHMMSSZ,秒SS和时区Z是必须存在的,可以指定today

    • -not_after date

      证书的截止日期。格式是YYMMDDHHMMSSZYYYYMMDDHHMMSSZ,秒SS和时区Z是必须存在的,可以指定today,会覆盖 -days options。

    • -days n

      指定证书生效的天数。始终从今天开始算而不管-not_before的值,如果指定-not_after则-days不生效。n是正整 数,默认值为30天。

    • -set_serial n

      指定自签名证书的证书序列号,可以指定10进制数或以0x开头的16进制数。不指定的时候会使用一个大随机数。

    • copy_extensions arg

      确定如何处理证书请求中的扩展。如果设置为 none 或此选项不存在,则将忽略证书请求中的扩展,而不会将其复制到证书中。如果设置为 copy,则请求中存在但尚未存在的任何扩展都将复制到证书中。如果设置为 copyall,则请求中的所有扩展都将复制到证书中:如果扩展已存在于证书中,则首先将其删除。

    • -extensions section, -reqexts section

      用于覆盖生成证书请求或证书时X.509 V3扩展的section name,允许使用多次。

    -reqexts是-extensions的别名
    – -addext ext

    添加一个指定的V3扩展属性到证书或证书请求中。ext的格式是`key=value`,这个选项可以指定多次,但是扩展的`key`(不是密钥,是键)不能重复使用.
    如果指定的key与配置文件中的扩展OID相同则会覆盖配置文件中的值(每个key都有一个oid)。
    
    • -precert

      生成一个预证书,这个预计书会推带一个poison extension扩展,然后把这个预证书提交到SCT服务器,然后从SCT服务器返回SCT,然后SCT可以包含到最终签发的证书或配置到http服务器上。
      poison扩展是RFC6962定义的一个扩展(不同于X.509 V3),现已被废弃。新的RFC 9162(Certificate Transparency Version 2.0)不再使用这个扩展。
      这个是为了支持google的Certificate Transparency计划,确保CA签署的证书不被篡改并对CA签署的的所有证书进行公示,避免CA乱发证书。
      这个选项已经隐含了-new选项。

      国内厂商开发了支技国密算法的证书透明(基于RFC6962),详见:https://zotrus.com/blog/what-is-certificate-transparency_what-is-sm2-certificate-transparency.html
      其实CT V2.0已经支持所有在IANA注册的TLS SignatureScheme签名Log,https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-signaturescheme

      在线的SCT日志查询网站:
      https://myssl.com/ct_check.html
      https://ctlogsearch.com/searchdomainname
      chrome自2018年开始要求所有证书支持SCT

    • -utf8

      所有字段值都用utf-8编码解释(默认是ASCII),无论是来自终端还是配置文件的字段。

    • -reqopt option

      自定义-text 输出的格式,可以豆号分隔多个选项也可以指定多次-reqopt。option的值参见:https://docs.openssl.org/3.4/man1/openssl-x509/#text-printing-flags

    • -newhdr

      在输出的证书请求文件的行和尾添加”NEW”,某些CA和软件需要。添加后BEGIN变成BEGIN NEW

    • -batch

      非交互模式

    • -verbose

      执行时输出更多的信息

    • -quiet

      输出更少的信息,这在批处理和使用管道时很方便,尤其是密钥生成期间抑制进度.的输出。

    • -keygen_engine id

      指定生成密钥的engine

    • -nameopt option

      指定如何显示subject和issuer中的DN,具体参考:https://docs.openssl.org/3.4/man1/openssl-namedisplay-options/#name-format-option-arguments

    • -rand files, -writerand file

      指定随机数状态保存的文件,读取之前的随机数生成器状态并写入当前状态用于下次执行的时候继续使用。现在OpenSSL已经从操作系统中读取熵源,这个选项不再需要,只是在特殊情况下才有用。

    • -engine id

      指定engine id,这个选项已经废弃

    • -provider name

      指定provider name

    • -provider-path path

      provider的路径

    • -propquery propq

      provider中的属性

    配置文件格式

    配置选项是在配置文件的req section中指定的,也可以用-section指定备用section name,如果section中没有指定值则也会在配置文件的default section中搜索。(As with all configuration files, if no value is specified in the specific section then the initial unnamed or default section is searched too.这句话说的有歧议,经过我反复测试,这句话的真正意思是如果指定的section中没有的属性也会在default section去查找,value应该是setcion中的filed或property, 而the specific section指的是默认的req section或用-section指定的其它section,也就是说default section中的配置是对所有命令都有效的)
    比如这样配置(把req section的字段都移到了default section):

    config_diagnostics = 1
    openssl_conf = openssl_init
    default_bits        = 4096
    default_keyfile     = privkey.pem
    distinguished_name  = req_distinguished_name
    attributes      = req_attributes
    x509_extensions = v3_ca # The extensions to add to the self signed cert
    [ req ]
    ... 移到了上面 ...
    [ openssl_init ]
    oid_section = oids
    providers = providers
    alg_section = evp_properties
    ssl_conf = ssl_configuration
    engines = engines
    random = random
    
    • input_password, output_password

      读取和写入私钥的加密密码,对应-passin和-passout选项

    • default_bits

      指定rsa密钥的位数

    • default_keyfile

      私钥文件的输出位置,对应-keyout选项

    • oid_file

      oid定义文件,每行一个

    • oid_section

      指定定义oid的section

    • RANDFILE

      对应-rand files选项

    • encrypt_key

      加密私钥的密码,对应-encrypt_rsa_key

    • default_md

      指定摘要算法,对应-digest

    • string_mask

      指定允许的字符串编码

      • utf8only

        only UTF8Strings are used (this is the default value)

      • pkix

        any string type except T61Strings

      • nombstr

        any string type except BMPStrings and UTF8Strings

      • default

        any kind of string type

      utf8only是默认值,如果遇到不兼容utf8的软件可以指定nombstr

    • req_extensions

      包含在证书请求中的X.509 V3扩展,对应-reqexts (or -extensions)选项

    • x509_extensions

      包含在证书中的X.509 V3扩展,对应-reqexts (or -extensions)选项

    • prompt

      yes or no
      设为no的时候从文件读取而不是从终端读取DN信息
      会影响distinguished_name或attributes的格式。

    • utf8

      yes or no
      对应-utf8

    • attributes

      这个section包含任何需要终端输入的属性
      其格式与 distinguished_name 相同。通常,这些可能包含 challengePassword 或 unstructuredName 类型。它们目前被 OpenSSL req命令忽略,但一些 CA 可能需要它们。
      ${attributes}_default可以指定属性的默认值

    • distinguished_name

      生成证书或证书请求的DN信息,${distinguished_name}_default可以指定默认的DN信息

      配置文件示例

      “`openssl cnf
      [ req ]
      default_bits = 2048
      default_keyfile = keyfile.pem
      distinguished_name = req_distinguished_name
      attributes = req_attributes
      prompt = no
      output_password = mypass

      [ req_distinguished_name ]
      countryName = Country Name (2 letter code)
      countryName_default = CN
      countryName_min = 2
      countryName_max = 2

      stateOrProvinceName = State or Province Name (full name)
      stateOrProvinceName_default = Shanghai

      localityName = Locality Name (eg, city)
      localityName_default = Shanghai

      0.organizationName = Organization Name (eg, company)
      0.organizationName_default = Hangshu

      <h1>we can do this but it is not needed normally :-)</h1>

      <h1>1.organizationName = Second Organization Name (eg, company)</h1>

      <h1>1.organizationName_default = World Wide Web Pty Ltd</h1>

      organizationalUnitName = Organizational Unit Name (eg, section)
      organizationalUnitName_default = R&D

      commonName = Common Name (e.g. server FQDN or YOUR name)
      commonName_default = t.he
      commonName_max = 64

      emailAddress = Email Address
      emailAddress_default = t.he@hang-shu.com
      emailAddress_max = 64

      [ req_attributes ]
      challengePassword = A challenge password

      “`

    DISTINGUISHED NAME AND ATTRIBUTE SECTION FORMAT

    DISTINGUISHED NAME和attribute sections(应该指的是定义DN的section)有两种不同的格式(根据prompt选项)。如果将prompt选项设置为否,则这些部分仅由field names and values组成:例如,

    CN=My Name
    OU=My Organization
    emailAddress=someone@somewhere.org
    

    这允许外部程序(例如基于 GUI 的程序)生成包含所有字段名称和值的模板文件,并将其传递给此命令。此类配置文件的示例包含在 EXAMPLES 部分中。
    或者,如果prompt选项不存在或未设置为 no,则文件包含字段提示信息。它由以下形式的行组成:

    fieldName="prompt"
    fieldName_default="default field value"
    fieldName_min= 2
    fieldName_max= 4
    

    “fieldName” 是正在使用的字段名称,例如 commonName(或 CN)。”prompt”字符串用于询问用户输入相关详细信息。如果用户未输入任何内容,则使用默认值;如果没有默认值,则省略该字段。如果用户仅输入”.”字符,则如果存在默认值,仍然可以省略字段。

    输入的字符数必须介于 fieldName_min 和 fieldName_max 限制之间:根据所使用的字段,可能会有其他限制(例如,countryName 只能是两个字符长,并且必须适合 PrintableString)。

    某些字段(例如 organizationName)可以在 DN 中使用多次。这会带来问题,因为配置文件无法识别两次出现的相同名称。为了避免此问题,如果 fieldName 包含一些字符,后面跟一个”.”字符,则会忽略这些字符。因此,例如,可以通过将其称为“1.organizationName”来输入第二个 organizationName。

    实际允许的字段名称是任何object identifier短名称或长名称。这些名称被编译到 OpenSSL 中,包括常用值,例如 commonName、countryName、localityName、organizationName、organizationalUnitName、stateOrProvinceName。此外,还包括 emailAddress 以及 name、surname、givenName、initials 和 dnQualifier。
    关于这些DN中的RDN值的object identifier及短/长名称,可以通过命令openssl list -objects| grep "2\.5\.4"查看,不过这样看的不完整,也可以通过微软的这个文档查看名称属性

    可以使用配置文件中的 oid_file 或 oid_section 选项定义附加object identifiers。任何附加字段都将被视为 DirectoryString。

    Views: 0

  • openssl-pkcs12

    openssl-pkcs12

    名字

    openssl-pkcs12 – PKCS#12 file command

    概要

    openssl pkcs12 [-help] [-passin arg] [-passout arg] [-password arg] [-twopass] [-in filename|uri] [-out filename] [-nokeys] [-nocerts] [-noout] [-legacy] [-engine id] [-provider name] [-provider-path path] [-propquery propq] [-rand files] [-writerand file]

    PKCS#12 input (解析PKCS12文件) options: [-info] [-nomacver] [-clcerts] [-cacerts]

    [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-noenc] [-nodes]

    PKCS#12 output (输出PKCS12文件) options:

    [-export] [-inkey filename|uri] [-certfile filename] [-passcerts arg] [-chain] [-untrusted filename] [-CAfile file] [-no-CAfile] [-CApath dir] [-no-CApath] [-CAstore uri] [-no-CAstore] [-name name] [-caname name] [-CSP name] [-LMK] [-keyex] [-keysig] [-keypbe cipher] [-certpbe cipher] [-descert] [-macalg digest] [-iter count] [-noiter] [-nomaciter] [-maciter] [-macsaltlen] [-nomac] [-jdktrust usage]

    描述

    此命令允许创建和解析 PKCS#12 文件(有时称为 PFX 文件)。PKCS#12 文件被多个程序使用,包括 Netscape、MSIE 和 MS Outlook。

    通用选项

    有很多选项,其中一些选项的含义取决于是在创建还是解析 PKCS#12 文件。默认情况下,将解析 PKCS#12 文件。可以使用 -export 选项创建 PKCS#12 文件(见下文)。PKCS#12 导出时的加密和 MAC 选项(例如 -certpbe 和 -iter)以及许多其他选项(例如 -chain)仅与 -export 相关。相反,输出(读取并显示)PKCS#12 时有关私钥加密的选项仅在未给出 -export 选项时相关。
    默认加密算法为 AES-256-CBC,使用 PBKDF2 进行密钥派生。
    当加载涉及 RC2-40-CBC 等的旧版 PKCS#12 文件时遇到问题时,请尝试使用 -legacy 选项,如果需要,还可以使用 -provider-path 选项。

    • -help

      Print out a usage message.

    • -passin arg

      输入文件的密码,用于读取加密的私钥

    • -passout arg

      输出文件的密码

    • -password arg

      和 -export一起时等于 -passout, 其它情况等于 -passin.

    • -twopass

      完整性和加密密码分开输入,大部分软件不支持两个密码是不同的,这种情况会导致文件无法读取。不能与-password,-passin,-passout一起使用。

    • -nokeys

      不导出私钥

    • -nocerts

      不导出证书

    • -noout

      此选项禁止所有凭证输出,因此仅验证输入。

    • -legacy

      使用旧式操作模式并自动加载旧式提供程序。如果未在系统范围内安装 OpenSSL,则还需要使用例如 -provider-path ./providers 或设置环境变量 OPENSSL_MODULES 以指向可以找到提供程序的目录。
      在旧式模式下,证书加密的默认算法是 RC2_CBC 或 3DES_CBC,具体取决于构建中是否启用了 RC2 密码。私钥加密的默认算法是 3DES_CBC。如果未指定旧式选项,则不会加载旧式提供程序,证书和私钥的默认加密算法都是 AES_256_CBC,并使用 PBKDF2 进行密钥派生。

    • -engine id

      See “Engine Options” in openssl(1). This option is deprecated.

    • -provider name

    • -provider-path path

    • -propquery propq

      See “Provider Options” in openssl(1), provider(7), and property(7).

    • -rand files, -writerand file

      See “Random State Options” in openssl(1) for details.

    PKCS#12 input (parsing) options

    • -in filename|uri

      这指定输入文件名或 URI。默认情况下使用标准输入。如果没有 -export 选项,则表示解析 PKCS#12 文件。有关使用 -export 选项的信息,请参阅“PKCS#12 输出(导出)选项”部分。

    • -out filename

      写入证书和私钥的文件名,默认为标准输出。它们都以 PEM 格式写入。

    • -info

      输出有关 PKCS#12 文件结构、使用的算法和迭代计数的附加信息。

    • -nomacver

      不验证完整性MAC

    • -clcerts

      仅输出客户证书(not CA certificates).

    • -cacerts

      仅输出CA证书(不包括客户证书)

    • -aes128, -aes192, -aes256

      使用AES加密输出(PEM格式)的私钥

    • -aria128, -aria192, -aria256

      使用ARIA加密输出(PEM格式)的私钥

    • -camellia128, -camellia192, -camellia256

      使用Camellia加密输出的私钥

    • -des

      使用DES加密输出的私钥

    • -des3

      使用3DES加密输出的私钥

    • -idea

      使用 IDEA 加密输出的私钥

    • -noenc

      不加密私钥

    • -nodes

      同-noenc,已废弃

    PKCS#12 output (export) options

    • -export

      指定创建而不是解析PKCS#12文件

    • -out filename

      写入的PKCS#12文件,默认是标准输出

    • -in filename|uri

      这指定输入文件名或 URI。默认情况下使用标准输入。使用 -export 选项,这是一个包含证书和密钥的文件,或引用通过引擎访问的密钥的 URI。文件中凭证的顺序无关紧要,但应该有一个私钥及其对应的证书。如果存在其他证书,它们也将包含在 PKCS#12 输出文件中。

    • -inkey filename|uri

      PKCS12 输出的私钥输入。如果未指定此选项,则输入文件(-in 参数)必须包含私钥。如果未使用引擎,则参数将被视为文件。如果使用 -engine 选项或 URI 具有前缀 org.openssl.engine:,则 URI 的其余部分将被视为给定引擎的密钥标识符。

    • -certfile filename

      如果给出了 -export 选项,则包含额外证书的输入文件将被添加到 PKCS#12 输出。

    • -passcerts arg

      输入证书的密码,比如-certfile,-untrusted指定的证书

    • -chain

      如果存在此选项,则会构建最终实体证书的证书链并将其包含在 PKCS#12 输出文件中。如果未提供密钥,则最终实体证书是从 -in 文件读取的第一个证书,否则是第一个与给定密钥匹配的证书。标准 CA trust store用于链构建,以及使用 -untrusted 选项提供的任何不受信任的 CA 证书。

    • -untrusted filename

      可用于构建链的不受信任证书的输入文件,仅当使用 -export 选项创建 PKCS#12 文件并且同时指定 -chain 选项时才相关。实际上属于链的任何证书都将添加到输出中。

    • -CAfile file, -no-CAfile, -CApath dir, -no-CApath, -CAstore uri, -no-CAstore

      See “Trusted Certificate Options” in openssl-verification-options(1) for details.

    • -name friendlyname

      PKCS12中证书的friendlyName,相当于证书的别名。导入软件通常会在列表中框中显示。

    • -caname friendlyname

      指定其他证书的“friendlyName”。此选项可多次使用,按证书出现的顺序指定所有证书的名称。Netscape 会忽略其他证书的friendlyName,而 MSIE 会显示这些名称。

    • -CSP name

      Write name as a Microsoft CSP(Cloud Solution Provider program?) name. The password source for the input, and for encrypting any private keys that are output. For more information about the format of arg see openssl-passphrase-options(1).

    • -LMK

      Add the “Local Key Set” identifier to the attributes.
      标识密钥仅用于本地应用?

    • -keyex|-keysig

      指定私钥用于密钥交换或仅用于签名。此选项仅由 MSIE 和类似的 MS 软件解释。通常,“export grad”软件只允许使用 512 位 RSA 密钥进行加密,但允许使用任意长度的密钥进行签名。-keysig 选项标记密钥仅用于签名。仅签名密钥可用于 S/MIME 签名、Authenticode(ActiveX 控件签名)和 SSL 客户端身份验证,但是,由于存在错误,只有 MSIE 5.0 及更高版本支持使用仅签名密钥进行 SSL 客户端身份验证。

    • -keypbe alg, -certpbe alg

      这些选项允许选择用于加密私钥和证书的算法。可以使用任何 PKCS#5 v1.5 或 PKCS#12 PBE 算法名称(有关详细信息,请参阅“注释”部分)。如果指定了密码名称(如 openssl list -cipher-algorithms 输出),则它将与 PKCS#5 v2.0 一起使用。出于互操作性原因,建议仅使用 PKCS#12 算法。
      指定NONE值则禁用私钥和证书加密。
      一般默认即可,除非需要使用特殊的加密算法。

    • -descert

      使用3DES 加密证书。默认情况下,私钥和证书使用 AES-256-CBC 加密,除非使用“-legacy”选项。如果将“-descert”与“-legacy”一起使用,则私钥和证书均使用3DES 加密。

    • -macalg digest

      指定MAC摘要算法,如果不指定则使用SHA256

    • -iter count

      This option specifies the iteration count for the encryption key and MAC. The default value is 2048.

      To discourage attacks by using large dictionaries of common passwords the algorithm that derives keys from passwords can have an iteration count applied to it: this causes a certain part of the algorithm to be repeated and slows it down. The MAC is used to check the file integrity but since it will normally have the same password as the keys and certificates it could also be attacked.

    • -noiter, -nomaciter

      By default both encryption and MAC iteration counts are set to 2048, using these options the MAC and encryption iteration counts can be set to 1, since this reduces the file security you should not use these options unless you really have to. Most software supports both MAC and encryption iteration counts. MSIE 4.0 doesn’t support MAC iteration counts so it needs the -nomaciter option.

    • -maciter

      This option is included for compatibility with previous versions, it used to be needed to use MAC iterations counts but they are now used by default.

    • -macsaltlen

      This option specifies the salt length in bytes for the MAC. The salt length should be at least 16 bytes as per NIST SP 800-132. The default value is 8 bytes for backwards compatibility.

    • -nomac

      不要尝试提供 MAC 完整性。这对于 FIPS 提供商很有用,因为 PKCS12 MAC 需要 PKCS12KDF,而这不是经批准的 FIPS 算法,并且不受 FIPS 提供商支持。

    • -jdktrust

      以与 Java 密钥库使用兼容的格式导出 pkcs12 文件。此选项接受一个字符串参数,指示要授予与其关联的证书的信任 oid 名称。当前仅定义了“anyExtendedKeyUsage”。请注意,由于 Java 密钥库不接受具有受信任证书和密钥对的 PKCS12 文件(不能包含私钥),因此使用此选项意味着设置 -nokeys 选项

    注意

    尽管有大量选项,但大多数选项很少使用。对于 PKCS#12 文件解析,只需要使用 -in 和 -out,对于创建 PKCS#12 文件,还需要使用 -export 和 -name。

    如果不存在 -clcerts、-cacerts 或 -nocerts 选项,则所有证书将按照它们在输入 PKCS#12 文件中出现的顺序输出。不能保证第一个存在的证书是与私钥相对应的证书。某些试图获取私钥和​​相应证书的软件可能会假设文件中的第一个证书是与私钥相对应的证书,但情况可能并非总是如此。使用 -clcerts 选项将通过仅输出与私钥相对应的证书来解决此问题。如果需要 CA 证书,则可以使用 -nokeys -cacerts 选项将它们输出到单独的文件中,以仅输出 CA 证书。

    -keypbe 和 -certpbe 算法允许指定私钥和证书的精确加密算法。通常情况下,默认设置就足够了,但有时软件无法处理3DES 加密的私钥,则可以使用选项 -keypbe PBE-SHA1-RC2-40 将私钥加密减少到 40 位 RC2。所有算法的完整描述包含在 openssl-pkcs8(1) 中。

    1.1 版之前的密码包含非 ASCII 字符,采用不合规方式编码,这限制了与 Windows 的互操作性。但切换到符合标准的密码编码会导致访问受损坏编码保护的旧数据出现问题。因此,在读取数据时甚至会尝试使用旧编码。如果您在生产应用程序中使用 PKCS#12 文件,建议您转换数据,因为这种启发式读取策略(heuristic approach)不是 MT-safe的,其唯一目标是使用此命令促进数据升级(兼容旧数据)。

    示例

    从p12文件导出nginx使用的证书文件
    需要server证书是证书链中的第一个证书,如果不是需要手动调整顺序
    openssl pkcs12 -in .\ejbca.ca.com.p12 -noenc -nokeys -out fullchain.cer
    openssl pkcs12 -in .\ejbca.ca.com.p12 -noenc -nocerts -out ejbca.hetao.me.key
    转换jks格式到pkcs12格式
    keytool -importkeystore -srckeystore server.jks -destkeystore server.p12 -deststoretype pkcs12
    要用openssl处理keytool生成的p12文件需要加-legacy选项

    Views: 0

  • openssl-ciphers

    openssl-ciphers

    名字

    openssl-ciphers – SSL cipher display and cipher list command

    概述

    openssl ciphers [-help] [-s] [-v] [-V] [-ssl3] [-tls1] [-tls1_1] [-tls1_2] [-tls1_3] [-s] [-psk] [-srp] [-stdname] [-convert name] [-ciphersuites val] [-provider name] [-provider-path path] [-propquery propq] [cipherlist]

    此命令将文本 OpenSSL 密码列表转换为有序的 SSL 密码首选项列表(cipher suites密码套件)。它可用于确定适当的密码列表。

    选项

    • -help

      Print a usage message.

    • -provider name

    • -provider-path path

    • -propquery propq

      See “Provider Options” in openssl(1), provider(7), and property(7).

    • -s

      仅列出受支持的加密算法:即与安全级别以及最低和最高协议版本一致的加密算法。这更接近应用程序实际支持的实际密码列表。
      默认情况下不启用 PSK 和 SRP 算法:它们需要 -psk 或 -srp 选项才能启用它们。
      它也不会更改受支持的签名算法的默认列表。
      在服务器上,受支持的密码列表还可能根据配置的证书和 DH 参数排除其他密码。
      如果不使用此选项,则将列出与cipherlist匹配的所有加密算法。

    • -psk

      与-s选项一起使用时将会包括PSK(pre-shared keys)cipher suites

    • -srp

      与-s选项一起使用时将会包括SRP cipher suites。这个选项已经废弃。

    • -v

      详细输出: 对于每个cipher suite, 列出SSL_CIPHER_description(3)提供的详细信息.

    • -V

      与-v选项类似,但是会额外包含cipher suite的16进制值

    • -tls1_3, -tls1_2, -tls1_1, -tls1, -ssl3

      与-s选项一起使用, 列出指定协议可用的密码算法. 请注意,并非所有协议和标志都可用,这取决于 OpenSSL 的构建方式。

    • -stdname

      每个密码套件前面都增加一列显示其标准名称,与-v选项一起使用。

    • -convert name

      转换标准算示名字到OpenSSL名字。

    • -ciphersuites val

      设置 TLSv1.3 密码套件列表。此列表将与已配置的任何 TLSv1.2 及以下密码套件相结合。此列表的格式是一个简单的冒号(“:”)分隔的 TLSv1.3 密码套件名称列表。默认情况下,此值为:
      TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256

    • cipherlist

      TLSv1.2 及以下版本的密码套件的算法列表,用于转换为加密首选项列表。此列表将与已配置的任何 TLSv1.3 密码套件相结合。如果未指定,则将使用默认密码列表。格式如下所述。

    CIPHER LIST FORMAT

    cipher list由一个或多个用冒号分隔的cipher strings组成。逗号或空格也是可接受的分隔符,但通常使用冒号。
    cipher strings可以使用来自 IANA的 TLS 密码套件注册表 (https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4) 的标准名称来引用算法。

    实际的cipher strings可以采用几种不同的形式。

    它可以由单个cipher suite(例如 RC4-SHA)组成。
    它可以表示包含特定算法的cipher suites列表,也可以表示特定类型的cipher suites。例如,SHA1 表示所有使用摘要算法 SHA1 的cipher suites,SSLv3 表示所有 SSL v3 算法。

    cipher suites列表可以由单个cipher string用+号组合而生。这当作逻辑与运算。例如,SHA1+DES 表示同时包含 SHA1 和 DES 算法的所有密码套件。

    每个密码字符串前面都可以选择加上字符 !、- 或 +。
    如果使用 !,则密码将从列表中永久删除。即使明确声明,删除的密码也不会再出现在列表中。
    如果使用 -,那么密码将从列表中删除,但可以通过以后的选项再次添加部分或全部密码。
    如果使用 +,则密码将移至列表末尾。此选项不会添加任何新密码,而只会移动匹配的现有密码。
    如果这些字符均(!-+)不存在,则该字符串仅被解释为要附加到当前首选项列表的密码列表。如果列表已经包含任何指定的算法,则它们将被忽略:也就是说,它们不会移动到列表末尾。
    @STRENGTH可以在任何位置使用,用于对于当前算法列表按密钥长度进行排序。
    字符串 @SECLEVEL=n 可随时用于将安全级别设置为 n,该级别应为 0 到 5 之间的数字(含 0 和 5)。请参阅 SSL_CTX_set_security_level(3) 了解每个级别的含义。
    cipher list可以以 DEFAULT 关键字作为前缀,这将启用下面定义的默认cipher list。与cipher strings不同,此前缀不能使用 + 字符与其他字符串组合。例如,DEFAULT+DES 无效。
    默认列表的内容在编译时确定,通常对应于 ALL:!COMPLEMENTOFDEFAULT:!eNULL。

    CIPHER STRINGS

    以下是所有允许的算法字符串及其含义的列表。

    • COMPLEMENTOFDEFAULT

      ALL 中包含的密码,但默认情况下未启用。当前这包括所有 RC4 和匿名算法。请注意,此规则不涵盖 ALL 中未包含的 eNULL(如有必要,请使用 COMPLEMENTOFALL)。请注意,默认情况下,基于 RC4 的密码套件未内置到 OpenSSL 中(请参阅 Configure 中的 enable-weak-ssl-ciphers 选项)。

    • ALL

      除 eNULL 密码之外的所有密码套件(如果需要,必须明确启用)。从 OpenSSL 1.0.0 开始,所有密码套件都默认按合理顺序排列。

    • COMPLEMENTOFALL

      没有被ALL包含的密码在磁件,当前是eNULL

    • HIGH

      “High”加密密码套件。目前这是指密钥长度大于 128 位的密码套件,以及一些密钥长度为 128 位的密码套件。

    • MEDIUM

      “Medium” 加密密码套件, 一些128位密钥.

    -LOW

    "Low" 加密密码套件, 一些使用的64或56位加密算法,但不包括export(出口?)密码套件。从 OpenSSL 1.1.0 开始,所有这些密码套件都已被删除。
    
    • eNULL, NULL

      NULL密码是指不提供加密的密码。由于这些ciphers根本不提供加密,并且存在安全风险,因此无法通过 DEFAULT 或 ALL 密码字符串启用它们。在使用 kRSA 或 aECDSA 等较低级别原语构建密码列表时要小心,因为它们与 eNULL ciphers重叠。如有疑问,请在cipherlist中包含 !eNULL。

    • aNULL

      不提供身份验证的密码套件。目前是匿名 DH 算法和匿名 ECDH 算法。这些密码套件容易受到“中间人”攻击,因此不鼓励使用它们。这些密码套件被排除在DEFAULT ciphers之外,但包含在ALL ciphers中。使用低级原语(如 kDHE 或 AES)构建cipherlist时要小心,因为它们与 aNULL ciphers重叠。如有疑问,请在cipherlist中包含 !aNULL。

    • kRSA, aRSA, RSA

      Cipher suites using RSA key exchange or authentication. RSA 是 kRSA 的别名.
      kRSA表示RSA key exchange,aRSA表示RSA authentication

    • kDHr, kDHd, kDH

      使用静态 DH key agreement的Cipher suites以及由使用 RSA 和 DSS 密钥的CA签名的 DH 证书. 所以这些Cipher suites已经在OpenSSL 1.1.0中移除.

    • kDHE, kEDH, DH

      Cipher suites 使用 ephemeral DH key agreement, 包括在 anonymous cipher suites中.

    • DHE, EDH

      带认证的ephemeral DH key agreement Cipher suites

    • ADH

      Anonymous DH cipher suites, 注意,它不包括在 anonymous Elliptic Curve DH (ECDH) cipher suites.

    • kEECDH, kECDHE, ECDH

      Cipher suites using ephemeral ECDH key agreement, 包括在 anonymous cipher suites.

    • ECDHE, EECDH

      Cipher suites using authenticated ephemeral ECDH key agreement.

    • AECDH

      Anonymous Elliptic Curve Diffie-Hellman cipher suites.

    • aDSS, DSS

      Cipher suites using DSS authentication, i.e. the certificates carry DSS keys.

    • aDH

      Cipher suites有效地使用 DH 身份验证,即证书携带 DH 密钥。所有这些密码套件已在 OpenSSL 1.1.0 中删除。

    • aECDSA, ECDSA

      Cipher suites using ECDSA authentication, i.e. the certificates carry ECDSA keys.

    • TLSv1.2, TLSv1.0, SSLv3

      列出至少在 TLS v1.2、TLS v1.0 或 SSL v3.0 中受支持的cipher suites。注意:没有特定于 TLS v1.1 的cipher suites。由于这只是最低版本,因此,例如,如果协商了 TLSv1.0,则 TLSv1.0 和 SSLv3.0 密码套件都可用。
      Note: these cipher strings do not change the negotiated version of SSL or TLS, they only affect the list of available cipher suites.
      注意:cipher strings不会影响协商的SSL或TLS版本,它们仅影响可用的cipher suites列表。

    • AES128, AES256, AES

      cipher suites using 128 bit AES, 256 bit AES or either 128 or 256 bit AES.

    • AESGCM

      AES in Galois Counter Mode (GCM): these cipher suites are only supported in TLS v1.2.

    • AESCCM, AESCCM8

      AES in Cipher Block Chaining – Message Authentication Mode (CCM): 这些cipher suites只有TLS v1.2支持. AESCCM references CCM cipher suites using both 16 and 8 octet Integrity Check Value (ICV) while AESCCM8 only references 8 octet ICV.

    • ARIA128, ARIA256, ARIA

      Cipher suites using 128 bit ARIA, 256 bit ARIA or either 128 or 256 bit ARIA.

    • CAMELLIA128, CAMELLIA256, CAMELLIA

      Cipher suites using 128 bit CAMELLIA, 256 bit CAMELLIA or either 128 or 256 bit CAMELLIA.

    • CHACHA20

      Cipher suites using ChaCha20.

      3DES

    • Cipher suites using triple DES.

      DES

    • Cipher suites using DES (not triple DES). All these cipher suites have been removed in OpenSSL 1.1.0.

      RC4

    • Cipher suites using RC4.

      RC2

    • Cipher suites using RC2.

      IDEA

    • Cipher suites using IDEA.

      SEED

    • Cipher suites using SEED.

      MD5

    • Cipher suites using MD5.

      SHA1, SHA

    • Cipher suites using SHA1.

    • SHA256, SHA384

      Cipher suites using SHA256 or SHA384.

    • aGOST

      Cipher suites using GOST R 34.10 (either 2001 or 94) for authentication (needs an engine supporting GOST algorithms).

    • aGOST01

      Cipher suites using GOST R 34.10-2001 authentication.

    • kGOST

      Cipher suites, using VKO 34.10 key exchange, specified in the RFC 4357.

    • GOST94

      Cipher suites, using HMAC based on GOST R 34.11-94.

    • GOST89MAC

      Cipher suites using GOST 28147-89 MAC instead of HMAC.

    • PSK

      All cipher suites using pre-shared keys (PSK).

    • kPSK, kECDHEPSK, kDHEPSK, kRSAPSK

      Cipher suites using PSK key exchange, ECDHE_PSK, DHE_PSK or RSA_PSK.

    • aPSK

      Cipher suites using PSK authentication (currently all PSK modes apart from RSA_PSK).

    • SUITEB128, SUITEB128ONLY, SUITEB192

      启用suite B操作模式,分别使用 128(允许对等方使用 192 位模式)、128 位(不允许对等方使用 192 位)或 192 位安全级别。如果使用这些cipherstrings,它们应该首先出现在密码列表中,并且它们之后的任何内容都将被忽略。设置套件 B 模式会产生符合 RFC6460 要求的其他后果。特别是,支持的签名算法减少到仅支持 ECDSA 和 SHA256 或 SHA384,只能使用椭圆曲线 P-256 和 P-384,并且只允许使用两个符合suite B的密码套件(ECDHE-ECDSA-AES128-GCM-SHA256 和 ECDHE-ECDSA-AES256-GCM-SHA384)。由此可见SUITEB比HIGH安全性还要高

    • CBC

      所有使用Cipher Block Chaining (CBC) 模式加密算法的密码套件。这些密码套件仅在 TLS v1.2 及更早版本中受支持。目前它是以下密码字符串的别名:SSL_DES、SSL_3DES、SSL_RC2、SSL_IDEA、SSL_AES128、SSL_AES256、SSL_CAMELLIA128、SSL_CAMELLIA256、SSL_SEED。

    CIPHER SUITE NAMES

    以下列表提供了相关规范中的标准 SSL 或 TLS 密码套件名称及其 OpenSSL 等效名称。您可以在密码列表中使用标准名称或 OpenSSL 名称,也可以两者混合使用。

    需要注意的是,一些密码套件名称不包括所使用的身份验证,例如 DES-CBC3-SHA。在这些情况下,使用 RSA 身份验证。

    • SSL v3.0 cipher suites
      SSL_RSA_WITH_NULL_MD5                   NULL-MD5
      SSL_RSA_WITH_NULL_SHA                   NULL-SHA
      SSL_RSA_WITH_RC4_128_MD5                RC4-MD5
      SSL_RSA_WITH_RC4_128_SHA                RC4-SHA
      SSL_RSA_WITH_IDEA_CBC_SHA               IDEA-CBC-SHA
      SSL_RSA_WITH_3DES_EDE_CBC_SHA           DES-CBC3-SHA
      
      SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA        DH-DSS-DES-CBC3-SHA
      SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA        DH-RSA-DES-CBC3-SHA
      SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA       DHE-DSS-DES-CBC3-SHA
      SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA       DHE-RSA-DES-CBC3-SHA
      
      SSL_DH_anon_WITH_RC4_128_MD5            ADH-RC4-MD5
      SSL_DH_anon_WITH_3DES_EDE_CBC_SHA       ADH-DES-CBC3-SHA
      
      SSL_FORTEZZA_KEA_WITH_NULL_SHA          Not implemented.
      SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA  Not implemented.
      SSL_FORTEZZA_KEA_WITH_RC4_128_SHA       Not implemented.
      
    • TLS v1.0 cipher suites
      TLS_RSA_WITH_NULL_MD5                   NULL-MD5
      TLS_RSA_WITH_NULL_SHA                   NULL-SHA
      TLS_RSA_WITH_RC4_128_MD5                RC4-MD5
      TLS_RSA_WITH_RC4_128_SHA                RC4-SHA
      TLS_RSA_WITH_IDEA_CBC_SHA               IDEA-CBC-SHA
      TLS_RSA_WITH_3DES_EDE_CBC_SHA           DES-CBC3-SHA
      
      TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA        Not implemented.
      TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA        Not implemented.
      TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA       DHE-DSS-DES-CBC3-SHA
      TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA       DHE-RSA-DES-CBC3-SHA
      
      TLS_DH_anon_WITH_RC4_128_MD5            ADH-RC4-MD5
      TLS_DH_anon_WITH_3DES_EDE_CBC_SHA       ADH-DES-CBC3-SHA
      
    • AES cipher suites from RFC3268, extending TLS v1.0
      TLS_RSA_WITH_AES_128_CBC_SHA            AES128-SHA
      TLS_RSA_WITH_AES_256_CBC_SHA            AES256-SHA
      
      TLS_DH_DSS_WITH_AES_128_CBC_SHA         DH-DSS-AES128-SHA
      TLS_DH_DSS_WITH_AES_256_CBC_SHA         DH-DSS-AES256-SHA
      TLS_DH_RSA_WITH_AES_128_CBC_SHA         DH-RSA-AES128-SHA
      TLS_DH_RSA_WITH_AES_256_CBC_SHA         DH-RSA-AES256-SHA
      
      TLS_DHE_DSS_WITH_AES_128_CBC_SHA        DHE-DSS-AES128-SHA
      TLS_DHE_DSS_WITH_AES_256_CBC_SHA        DHE-DSS-AES256-SHA
      TLS_DHE_RSA_WITH_AES_128_CBC_SHA        DHE-RSA-AES128-SHA
      TLS_DHE_RSA_WITH_AES_256_CBC_SHA        DHE-RSA-AES256-SHA
      
      TLS_DH_anon_WITH_AES_128_CBC_SHA        ADH-AES128-SHA
      TLS_DH_anon_WITH_AES_256_CBC_SHA        ADH-AES256-SHA
      
    • Camellia cipher suites from RFC4132, extending TLS v1.0
      TLS_RSA_WITH_CAMELLIA_128_CBC_SHA      CAMELLIA128-SHA
      TLS_RSA_WITH_CAMELLIA_256_CBC_SHA      CAMELLIA256-SHA
      
      TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA   DH-DSS-CAMELLIA128-SHA
      TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA   DH-DSS-CAMELLIA256-SHA
      TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA   DH-RSA-CAMELLIA128-SHA
      TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA   DH-RSA-CAMELLIA256-SHA
      
      TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA  DHE-DSS-CAMELLIA128-SHA
      TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA  DHE-DSS-CAMELLIA256-SHA
      TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA  DHE-RSA-CAMELLIA128-SHA
      TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA  DHE-RSA-CAMELLIA256-SHA
      
      TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA  ADH-CAMELLIA128-SHA
      TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA  ADH-CAMELLIA256-SHA
      
    • SEED cipher suites from RFC4162, extending TLS v1.0
      TLS_RSA_WITH_SEED_CBC_SHA              SEED-SHA
      
      TLS_DH_DSS_WITH_SEED_CBC_SHA           DH-DSS-SEED-SHA
      TLS_DH_RSA_WITH_SEED_CBC_SHA           DH-RSA-SEED-SHA
      
      TLS_DHE_DSS_WITH_SEED_CBC_SHA          DHE-DSS-SEED-SHA
      TLS_DHE_RSA_WITH_SEED_CBC_SHA          DHE-RSA-SEED-SHA
      
      TLS_DH_anon_WITH_SEED_CBC_SHA          ADH-SEED-SHA
      
    • GOST cipher suites from draft-chudov-cryptopro-cptls, extending TLS v1.0

      注意:这些密码需要一个包含 GOST 加密算法的引擎,例如 gost 引擎,它不是 OpenSSL 发行版的一部分。

      TLS_GOSTR341094_WITH_28147_CNT_IMIT GOST94-GOST89-GOST89
      TLS_GOSTR341001_WITH_28147_CNT_IMIT GOST2001-GOST89-GOST89
      TLS_GOSTR341094_WITH_NULL_GOSTR3411 GOST94-NULL-GOST94
      TLS_GOSTR341001_WITH_NULL_GOSTR3411 GOST2001-NULL-GOST94
      
    • GOST cipher suites, extending TLS v1.2

      注意:这些密码需要一个包含 GOST 加密算法的引擎,例如 gost 引擎,它不是 OpenSSL 发行版的一部分。

      TLS_GOSTR341112_256_WITH_28147_CNT_IMIT GOST2012-GOST8912-GOST8912
      TLS_GOSTR341112_256_WITH_NULL_GOSTR3411 GOST2012-NULL-GOST12
      

      Note: GOST2012-GOST8912-GOST8912 is an alias for two ciphers ID old LEGACY-GOST2012-GOST8912-GOST8912 and new IANA-GOST2012-GOST8912-GOST8912

    • Additional Export 1024 and other cipher suites

      Note: these ciphers can also be used in SSL v3.

      TLS_DHE_DSS_WITH_RC4_128_SHA            DHE-DSS-RC4-SHA
      
    • Elliptic curve cipher suites
      TLS_ECDHE_RSA_WITH_NULL_SHA             ECDHE-RSA-NULL-SHA
      TLS_ECDHE_RSA_WITH_RC4_128_SHA          ECDHE-RSA-RC4-SHA
      TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA     ECDHE-RSA-DES-CBC3-SHA
      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA      ECDHE-RSA-AES128-SHA
      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA      ECDHE-RSA-AES256-SHA
      
      TLS_ECDHE_ECDSA_WITH_NULL_SHA           ECDHE-ECDSA-NULL-SHA
      TLS_ECDHE_ECDSA_WITH_RC4_128_SHA        ECDHE-ECDSA-RC4-SHA
      TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA   ECDHE-ECDSA-DES-CBC3-SHA
      TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA    ECDHE-ECDSA-AES128-SHA
      TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA    ECDHE-ECDSA-AES256-SHA
      
      TLS_ECDH_anon_WITH_NULL_SHA             AECDH-NULL-SHA
      TLS_ECDH_anon_WITH_RC4_128_SHA          AECDH-RC4-SHA
      TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA     AECDH-DES-CBC3-SHA
      TLS_ECDH_anon_WITH_AES_128_CBC_SHA      AECDH-AES128-SHA
      TLS_ECDH_anon_WITH_AES_256_CBC_SHA      AECDH-AES256-SHA
      
    • TLS v1.2 cipher suites
      TLS_RSA_WITH_NULL_SHA256                  NULL-SHA256
      
      TLS_RSA_WITH_AES_128_CBC_SHA256           AES128-SHA256
      TLS_RSA_WITH_AES_256_CBC_SHA256           AES256-SHA256
      TLS_RSA_WITH_AES_128_GCM_SHA256           AES128-GCM-SHA256
      TLS_RSA_WITH_AES_256_GCM_SHA384           AES256-GCM-SHA384
      
      TLS_DH_RSA_WITH_AES_128_CBC_SHA256        DH-RSA-AES128-SHA256
      TLS_DH_RSA_WITH_AES_256_CBC_SHA256        DH-RSA-AES256-SHA256
      TLS_DH_RSA_WITH_AES_128_GCM_SHA256        DH-RSA-AES128-GCM-SHA256
      TLS_DH_RSA_WITH_AES_256_GCM_SHA384        DH-RSA-AES256-GCM-SHA384
      
      TLS_DH_DSS_WITH_AES_128_CBC_SHA256        DH-DSS-AES128-SHA256
      TLS_DH_DSS_WITH_AES_256_CBC_SHA256        DH-DSS-AES256-SHA256
      TLS_DH_DSS_WITH_AES_128_GCM_SHA256        DH-DSS-AES128-GCM-SHA256
      TLS_DH_DSS_WITH_AES_256_GCM_SHA384        DH-DSS-AES256-GCM-SHA384
      
      TLS_DHE_RSA_WITH_AES_128_CBC_SHA256       DHE-RSA-AES128-SHA256
      TLS_DHE_RSA_WITH_AES_256_CBC_SHA256       DHE-RSA-AES256-SHA256
      TLS_DHE_RSA_WITH_AES_128_GCM_SHA256       DHE-RSA-AES128-GCM-SHA256
      TLS_DHE_RSA_WITH_AES_256_GCM_SHA384       DHE-RSA-AES256-GCM-SHA384
      
      TLS_DHE_DSS_WITH_AES_128_CBC_SHA256       DHE-DSS-AES128-SHA256
      TLS_DHE_DSS_WITH_AES_256_CBC_SHA256       DHE-DSS-AES256-SHA256
      TLS_DHE_DSS_WITH_AES_128_GCM_SHA256       DHE-DSS-AES128-GCM-SHA256
      TLS_DHE_DSS_WITH_AES_256_GCM_SHA384       DHE-DSS-AES256-GCM-SHA384
      
      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256     ECDHE-RSA-AES128-SHA256
      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384     ECDHE-RSA-AES256-SHA384
      TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256     ECDHE-RSA-AES128-GCM-SHA256
      TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384     ECDHE-RSA-AES256-GCM-SHA384
      
      TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256   ECDHE-ECDSA-AES128-SHA256
      TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384   ECDHE-ECDSA-AES256-SHA384
      TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256   ECDHE-ECDSA-AES128-GCM-SHA256
      TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384   ECDHE-ECDSA-AES256-GCM-SHA384
      
      TLS_DH_anon_WITH_AES_128_CBC_SHA256       ADH-AES128-SHA256
      TLS_DH_anon_WITH_AES_256_CBC_SHA256       ADH-AES256-SHA256
      TLS_DH_anon_WITH_AES_128_GCM_SHA256       ADH-AES128-GCM-SHA256
      TLS_DH_anon_WITH_AES_256_GCM_SHA384       ADH-AES256-GCM-SHA384
      
      RSA_WITH_AES_128_CCM                      AES128-CCM
      RSA_WITH_AES_256_CCM                      AES256-CCM
      DHE_RSA_WITH_AES_128_CCM                  DHE-RSA-AES128-CCM
      DHE_RSA_WITH_AES_256_CCM                  DHE-RSA-AES256-CCM
      RSA_WITH_AES_128_CCM_8                    AES128-CCM8
      RSA_WITH_AES_256_CCM_8                    AES256-CCM8
      DHE_RSA_WITH_AES_128_CCM_8                DHE-RSA-AES128-CCM8
      DHE_RSA_WITH_AES_256_CCM_8                DHE-RSA-AES256-CCM8
      ECDHE_ECDSA_WITH_AES_128_CCM              ECDHE-ECDSA-AES128-CCM
      ECDHE_ECDSA_WITH_AES_256_CCM              ECDHE-ECDSA-AES256-CCM
      ECDHE_ECDSA_WITH_AES_128_CCM_8            ECDHE-ECDSA-AES128-CCM8
      ECDHE_ECDSA_WITH_AES_256_CCM_8            ECDHE-ECDSA-AES256-CCM8
      
    • ARIA cipher suites from RFC6209, extending TLS v1.2

      Note: the CBC modes mentioned in this RFC are not supported.

      TLS_RSA_WITH_ARIA_128_GCM_SHA256          ARIA128-GCM-SHA256
      TLS_RSA_WITH_ARIA_256_GCM_SHA384          ARIA256-GCM-SHA384
      TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256      DHE-RSA-ARIA128-GCM-SHA256
      TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384      DHE-RSA-ARIA256-GCM-SHA384
      TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256      DHE-DSS-ARIA128-GCM-SHA256
      TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384      DHE-DSS-ARIA256-GCM-SHA384
      TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256  ECDHE-ECDSA-ARIA128-GCM-SHA256
      TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384  ECDHE-ECDSA-ARIA256-GCM-SHA384
      TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256    ECDHE-ARIA128-GCM-SHA256
      TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384    ECDHE-ARIA256-GCM-SHA384
      TLS_PSK_WITH_ARIA_128_GCM_SHA256          PSK-ARIA128-GCM-SHA256
      TLS_PSK_WITH_ARIA_256_GCM_SHA384          PSK-ARIA256-GCM-SHA384
      TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256      DHE-PSK-ARIA128-GCM-SHA256
      TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384      DHE-PSK-ARIA256-GCM-SHA384
      TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256      RSA-PSK-ARIA128-GCM-SHA256
      TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384      RSA-PSK-ARIA256-GCM-SHA384
      
    • Camellia HMAC-Based cipher suites from RFC6367, extending TLS v1.2
      TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 ECDHE-ECDSA-CAMELLIA128-SHA256
      TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 ECDHE-ECDSA-CAMELLIA256-SHA384
      TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256   ECDHE-RSA-CAMELLIA128-SHA256
      TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384   ECDHE-RSA-CAMELLIA256-SHA384
      
    • Pre-shared keying (PSK) cipher suites
      PSK_WITH_NULL_SHA                         PSK-NULL-SHA
      DHE_PSK_WITH_NULL_SHA                     DHE-PSK-NULL-SHA
      RSA_PSK_WITH_NULL_SHA                     RSA-PSK-NULL-SHA
      
      PSK_WITH_RC4_128_SHA                      PSK-RC4-SHA
      PSK_WITH_3DES_EDE_CBC_SHA                 PSK-3DES-EDE-CBC-SHA
      PSK_WITH_AES_128_CBC_SHA                  PSK-AES128-CBC-SHA
      PSK_WITH_AES_256_CBC_SHA                  PSK-AES256-CBC-SHA
      
      DHE_PSK_WITH_RC4_128_SHA                  DHE-PSK-RC4-SHA
      DHE_PSK_WITH_3DES_EDE_CBC_SHA             DHE-PSK-3DES-EDE-CBC-SHA
      DHE_PSK_WITH_AES_128_CBC_SHA              DHE-PSK-AES128-CBC-SHA
      DHE_PSK_WITH_AES_256_CBC_SHA              DHE-PSK-AES256-CBC-SHA
      
      RSA_PSK_WITH_RC4_128_SHA                  RSA-PSK-RC4-SHA
      RSA_PSK_WITH_3DES_EDE_CBC_SHA             RSA-PSK-3DES-EDE-CBC-SHA
      RSA_PSK_WITH_AES_128_CBC_SHA              RSA-PSK-AES128-CBC-SHA
      RSA_PSK_WITH_AES_256_CBC_SHA              RSA-PSK-AES256-CBC-SHA
      
      PSK_WITH_AES_128_GCM_SHA256               PSK-AES128-GCM-SHA256
      PSK_WITH_AES_256_GCM_SHA384               PSK-AES256-GCM-SHA384
      DHE_PSK_WITH_AES_128_GCM_SHA256           DHE-PSK-AES128-GCM-SHA256
      DHE_PSK_WITH_AES_256_GCM_SHA384           DHE-PSK-AES256-GCM-SHA384
      RSA_PSK_WITH_AES_128_GCM_SHA256           RSA-PSK-AES128-GCM-SHA256
      RSA_PSK_WITH_AES_256_GCM_SHA384           RSA-PSK-AES256-GCM-SHA384
      
      PSK_WITH_AES_128_CBC_SHA256               PSK-AES128-CBC-SHA256
      PSK_WITH_AES_256_CBC_SHA384               PSK-AES256-CBC-SHA384
      PSK_WITH_NULL_SHA256                      PSK-NULL-SHA256
      PSK_WITH_NULL_SHA384                      PSK-NULL-SHA384
      DHE_PSK_WITH_AES_128_CBC_SHA256           DHE-PSK-AES128-CBC-SHA256
      DHE_PSK_WITH_AES_256_CBC_SHA384           DHE-PSK-AES256-CBC-SHA384
      DHE_PSK_WITH_NULL_SHA256                  DHE-PSK-NULL-SHA256
      DHE_PSK_WITH_NULL_SHA384                  DHE-PSK-NULL-SHA384
      RSA_PSK_WITH_AES_128_CBC_SHA256           RSA-PSK-AES128-CBC-SHA256
      RSA_PSK_WITH_AES_256_CBC_SHA384           RSA-PSK-AES256-CBC-SHA384
      RSA_PSK_WITH_NULL_SHA256                  RSA-PSK-NULL-SHA256
      RSA_PSK_WITH_NULL_SHA384                  RSA-PSK-NULL-SHA384
      PSK_WITH_AES_128_GCM_SHA256               PSK-AES128-GCM-SHA256
      PSK_WITH_AES_256_GCM_SHA384               PSK-AES256-GCM-SHA384
      
      ECDHE_PSK_WITH_RC4_128_SHA                ECDHE-PSK-RC4-SHA
      ECDHE_PSK_WITH_3DES_EDE_CBC_SHA           ECDHE-PSK-3DES-EDE-CBC-SHA
      ECDHE_PSK_WITH_AES_128_CBC_SHA            ECDHE-PSK-AES128-CBC-SHA
      ECDHE_PSK_WITH_AES_256_CBC_SHA            ECDHE-PSK-AES256-CBC-SHA
      ECDHE_PSK_WITH_AES_128_CBC_SHA256         ECDHE-PSK-AES128-CBC-SHA256
      ECDHE_PSK_WITH_AES_256_CBC_SHA384         ECDHE-PSK-AES256-CBC-SHA384
      ECDHE_PSK_WITH_NULL_SHA                   ECDHE-PSK-NULL-SHA
      ECDHE_PSK_WITH_NULL_SHA256                ECDHE-PSK-NULL-SHA256
      ECDHE_PSK_WITH_NULL_SHA384                ECDHE-PSK-NULL-SHA384
      
      PSK_WITH_CAMELLIA_128_CBC_SHA256          PSK-CAMELLIA128-SHA256
      PSK_WITH_CAMELLIA_256_CBC_SHA384          PSK-CAMELLIA256-SHA384
      
      DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256      DHE-PSK-CAMELLIA128-SHA256
      DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384      DHE-PSK-CAMELLIA256-SHA384
      
      RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256      RSA-PSK-CAMELLIA128-SHA256
      RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384      RSA-PSK-CAMELLIA256-SHA384
      
      ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256    ECDHE-PSK-CAMELLIA128-SHA256
      ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384    ECDHE-PSK-CAMELLIA256-SHA384
      
      PSK_WITH_AES_128_CCM                      PSK-AES128-CCM
      PSK_WITH_AES_256_CCM                      PSK-AES256-CCM
      DHE_PSK_WITH_AES_128_CCM                  DHE-PSK-AES128-CCM
      DHE_PSK_WITH_AES_256_CCM                  DHE-PSK-AES256-CCM
      PSK_WITH_AES_128_CCM_8                    PSK-AES128-CCM8
      PSK_WITH_AES_256_CCM_8                    PSK-AES256-CCM8
      DHE_PSK_WITH_AES_128_CCM_8                DHE-PSK-AES128-CCM8
      DHE_PSK_WITH_AES_256_CCM_8                DHE-PSK-AES256-CCM8
      
    • ChaCha20-Poly1305 cipher suites, extending TLS v1.2
      TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256      ECDHE-RSA-CHACHA20-POLY1305
      TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256    ECDHE-ECDSA-CHACHA20-POLY1305
      TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256        DHE-RSA-CHACHA20-POLY1305
      TLS_PSK_WITH_CHACHA20_POLY1305_SHA256            PSK-CHACHA20-POLY1305
      TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256      ECDHE-PSK-CHACHA20-POLY1305
      TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256        DHE-PSK-CHACHA20-POLY1305
      TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256        RSA-PSK-CHACHA20-POLY1305
      
    • TLS v1.3 cipher suites
      TLS_AES_128_GCM_SHA256                     TLS_AES_128_GCM_SHA256
      TLS_AES_256_GCM_SHA384                     TLS_AES_256_GCM_SHA384
      TLS_CHACHA20_POLY1305_SHA256               TLS_CHACHA20_POLY1305_SHA256
      TLS_AES_128_CCM_SHA256                     TLS_AES_128_CCM_SHA256
      TLS_AES_128_CCM_8_SHA256                   TLS_AES_128_CCM_8_SHA256
      
    • TLS v1.3 integrity-only cipher suites according to RFC 9150
      TLS_SHA256_SHA256          TLS_SHA256_SHA256
      TLS_SHA384_SHA384          TLS_SHA384_SHA384
      

      注意:这些密码完全基于 HMAC,不提供任何机密性,因此默认情况下处于禁用状态。这些密码仅在安全级别 0 下可用。

    • Older names used by OpenSSL

      The following names are accepted by older releases:

      SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA    EDH-RSA-DES-CBC3-SHA (DHE-RSA-DES-CBC3-SHA)
      SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA    EDH-DSS-DES-CBC3-SHA (DHE-DSS-DES-CBC3-SHA)
      

    NOTES

    OpenSSL 的某些编译版本可能不包含此处列出的所有密码,因为某些密码在编译时被排除。

    Views: 1

  • openssl-dgst

    openssl-dgst

    名字

    openssl-dgst – perform digest operations

    概要

    openssl dgst|digest [-digest] [-list] [-help] [-c] [-d] [-debug] [-hex] [-binary] [-xoflen length] [-r] [-out filename] [-sign filename|uri] [-keyform DER|PEM|P12|ENGINE] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-sigopt nm:v] [-hmac key] [-mac alg] [-macopt nm:v] [-fips-fingerprint] [-engine id] [-engine_impl id] [-rand files] [-writerand file] [-provider name] [-provider-path path] [-propquery propq] [file ...]

    描述

    此命令以十六进制形式输出所提供文件的消息摘要,并使用消息摘要生成和验证数字签名。

    通用名称 openssl dgst 可与选项指定的算法的一起使用。默认摘要算法为 sha256。支持的摘要算法名称也可用作子命令名称。要查看支持的算法列表,请使用 openssl list -digest-algorithms

    选项

    • -help

      Print out a usage message.

    • -digest

      指定要使用的摘要算法名,可用的算法看下面的-list选项

    • -list

      打印支持的摘要算法列表

    • -c

      Print out the digest in two digit groups separated by colons, only relevant if the -hex option is given as well.
      以冒号分隔的双数字组打印摘要,仅跟-hex选项一起使用才有效。

    • -d, -debug

      Print out BIO debugging information.

    • -hex

      以hex dump格式输出摘要,这是普通digest(非签名)的默认格式,详细情况参考NOTES部分

    • -binary

      以二进制格式输出摘要或签名

    • -xoflen length

      设置 XOF 算法(如 shake128 和 shake256)的输出长度。签名操作不支持此选项。

      对于 OpenSSL providers,需要为 shake 算法设置此值,因为以前的默认值仅设置为最大安全强度的一半。

      为了确保 128 位的最大安全强度,shake128 的 xoflen 应至少设置为 32(字节)。为了与以前版本的 OpenSSL 兼容,可以将其设置为 16,导致安全强度仅为 64 位。
      为了确保 256 位的最大安全强度,shake256 的 xoflen 应至少设置为 64(字节)。为了与以前版本的 OpenSSL 兼容,可以将其设置为 32,导致安全强度仅为 128 位。

    • -r

      以coreutils格式输出摘要,打包换行。用于像sha1sum这样的程序。

    • -out filename

      输出的文件名,默认为standard output.

    • -sign filename|uri

      使用给定的私钥对摘要进行数字签名。请注意,此选项不支持 Ed25519 或 Ed448 私钥, 如需要请使用 openssl-pkeyutl(1) 命令代替。

    • -keyform DER|PEM|P12|ENGINE

      用于签名的key的格式,没有默认值。 See openssl-format-options(1) for details.

    • -sigopt nm:v

      在签名或验签操作期间传递给签名算法的选项。这些names和values是算法特定的,关于Signature parameters的文档记录请参考provider-signature(7)

    • -passin arg

      输入私钥的密码源,参考openssl-passphrase-options(1).

    • -verify filename

      指定一个公钥文件并使用这个公钥进行验签,输出是”Verified OK” or “Verification Failure”。

    • -prverify filename

      指定一个私钥并使用这个私钥进行验签

    • -signature filename

      指定要验证的签名文件

    • -hmac key

      使用指定的key创建一个hashed MAC码

      与使用此命令行选项相比,应优先使用 openssl-mac(1) 命令。

    • -mac alg

      创建 MAC(keyed Message Authentication Code)。最流行的 MAC 算法是 HMAC(hash-based MAC),但也有其他不基于哈希的 MAC 算法,例如 gost-mac 算法,由 gost 引擎支持。MAC 密钥和其他选项应通过 -macopt 参数设置。
      与使用此命令行选项相比,应优先使用 openssl-mac(1) 命令。

    • -macopt nm:v

      可以传递给MAC算法(-mac指定)的选项。以下选项是HMAC和gost-mac同时支持的:

      - key:string
      
          将 MAC 密钥指定为字母数字字符串(只使用可打印字符)。字符串长度必须符合 MAC 算法的任何限制,例如 gost-mac 的长度必须恰好为 32 个字符。
      
      - hexkey:string
      
          以十六进制形式指定 MAC key(two hex digits per byte)。密钥长度必须符合 MAC 算法的任何限制,例如 gost-mac 的长度必须恰好为 32 个字符。
      

      与使用此命令行选项相比,应优先使用 openssl-mac(1) 命令。

    • -fips-fingerprint

      使用特定密钥为某些 OpenSSL-FIPS 操作计算 HMAC。

    • -rand files, -writerand file

      See “Random State Options” in openssl(1) for details.

    • -engine id

      See “Engine Options” in openssl(1). This option is deprecated.

      The engine is not used for digests unless the -engine_impl option is used or it is configured to do so, see “Engine Configuration Module” in config(5).

    • -engine_impl id

      When used with the -engine option, it specifies to also use engine id for digest operations.

      -provider name
      -provider-path path

    • -propquery propq

      See “Provider Options” in openssl(1), provider(7), and property(7).

    • file …

      需要签名的file或files.如果没有文件指定则使用标准输入。openssl dgst命令不使用-in选项指定输入文件,而是输入文件名放在命令行的结尾。

    注意

    可用的摘要机制将取决于构建 OpenSSL 时使用的选项。可以使用 openssl list -digest-algorithms 命令列出它们。
    新的或agile的应用程序应该使用 SHA-256。其他摘要,特别是 SHA-1 和 MD5,仍然广泛用于与现有格式和协议进行互操作。
    签名文件时,此命令将根据私钥的 ASN.1 信息自动确定用于签名的算法(RSA、ECC 等)。验证签名时,它仅处理 RSA、DSA 或 ECDSA 签名本身,而不处理 x.509、CMS 和 S/MIME 等格式中用于标识signer and algorithm的相关数据(意思是签名算法由私钥决定,而不管证书的算法信息?)。

    某些签名算法需要随机数源,特别是 ECDSA 和 DSA。

    仅当要签名或验证单个文件时,才应使用signing and verify选项。

    无法使用 openssl 验证十六进制签名。相反,在验证之前,请使用“xxd -r”或类似程序将十六进制签名转换为二进制签名。

    与 -hmac、-mac 和 -macopt 命令行选项相比,应优先使用openssl-mac(1) 命令。

    Views: 0

  • openssl-enc

    openssl-enc

    名称

    openssl-enc – symmetric cipher routines

    概要

    openssl enc|cipher [-cipher] [-help] [-list] [-ciphers] [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a] [-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md digest] [-iter count] [-pbkdf2] [-p] [-P] [-bufsize number] [-nopad] [-v] [-debug] [-none] [-engine id] [-rand files] [-writerand file] [-provider name] [-provider-path path] [-propquery propq]

    openssl cipher [...]

    描述

    对称加密命令允许使用基于密码或明确提供的密钥,使用各种块和流密码算法对数据进行加密或解密。在执行时可以使用 Base64 编码或解码,也可以在加密或解密操作之外执行。

    选项

    • -cipher

      指定使用的算法,cipher替换为具体的算法名字

    • -help

      Print out a usage message.

    • -list

      列出所支持的算法

    • -ciphers

      同-list

    • -in filename

      如果未指定此选项,则标准输入读取数据。

    • -out filename

      如果不指定,则写入标准输出

    • -pass arg

      密码源

    • -e

      加密输入的数据

    • -d

      解密输入的数据

    • -a

      Base64 对数据进行处理。这意味着如果正在进行加密,则数据在加密后将进行 Base64 编码。如果设置了解密,则输入数据在解密之前将进行 Base64 解码。

      当未指定 -A 选项时,编码时每 64 个字符后会插入一个换行符,解码时输入的前 1024 个字节中应有一个换行符。

    • -base64

      同-a

    • -A

      If the -a option is set then base64 encoding produces output without any newline character, and base64 decoding does not require any newlines. Therefore it can be helpful to use the -A option when decoding unknown input.
      如果设置了 -a 选项,则 base64 编码会产生不带任何换行符的输出,而 base64 解码也不需要任何换行符。在解码未知输入时使用 -A 选项。

    • -k password

      直接指定密码,为了兼容旧版本,新版用-pass

    • -kfile filename

      从文件中读取密码,新版用-pass

    • -md digest

      从passphrase创建密钥所用的摘要算法,默认是sha-256

    • -iter count

      在导出加密密钥时对密码使用给定的迭代次数。较高的值会增加暴力破解所需的时间。此选项允许使用 PBKDF2 算法来导出密钥。

    • -pbkdf2

      使用 PBKDF2 算法,默认迭代次数为 10000,除非 -iter 命令行选项另有规定。

    • -saltlen

      设置使用 -pbkdf2 选项时要使用的盐长度。出于兼容性原因,默认值为 8 字节。最大值目前为 16 字节。如果不使用 -pbkdf2 选项,则忽略此选项并使用固定盐长度 8。解密时也必须使用加密时使用的盐长度。

    • -nosalt

      不要在密钥派生例程中使用盐。除了测试目的或与旧版本的 OpenSSL 兼容外,不应使用此选项。

    • -salt

      Use salt (randomly generated or provide with -S option) when encrypting, this is the default.
      加密的时候使用salt(随机生成或通过-S选项指定),这是默认选项

    • -S salt

      实际使用的盐:必须以十六进制数字字符串表示。如果在加密时使用此选项,则解密时将再次需要相同的精确值。

    • -K key

      实际使用的加密密钥:必须用仅包含十六进制数字的字符串表示。如果仅指定key,则必须使用 -iv 选项指定 IV。当同时指定key和password时,将使用 -K 选项给出的key,并采用从password生成的 IV。同时指定密钥和密码没有多大意义。

    • -iv IV

      实际使用的 IV:必须将其表示为仅由十六进制数字组成的字符串。当仅使用 -K 选项指定密钥时,必须明确定义 IV。当使用其他选项之一指定密码时,IV 将从此密码生成。

    • -p

      打印key和IV

    • -P

      打印出使用的 key 和 IV,然后立即退出:不进行任何加密或解密。

    • -bufsize number

      设置I/O缓存区大小

    • -nopad

      禁用块填充

    • -v

      Verbose打印;显示一些有关 I/O 和缓冲区大小的统计信息。

    • -debug

      Debug the BIOs used for I/O.

    • -z

      在加密后或解密前使用 zlib 压缩或解压缩加密数据。仅当使用 zlib 或 zlib-dynamic 选项编译 OpenSSL 时才存在此选项。

    • -none

      使用NULL算法(不执行加密或解密)

    • -rand files, -writerand file

      See “Random State Options” in openssl(1) for details.

    • -provider name

    • -provider-path path

    • -propquery propq

      See “Provider Options” in openssl(1), provider(7), and property(7).

    • -engine id

      See “Engine Options” in openssl(1). This option is deprecated.

    注意

    该程序可以通 openssl cipher or openssl enc –cipher 命令来调用(cipher是算法名称)。第一种形式不适用于引擎提供的密码,因为此形式在读取配置文件和加载任何 ENGINE 之前进行处理。使用 openssl-list(1) 命令获取受支持的密码列表。

    应在配置文件中配置提供全新加密算法的引擎(例如提供 gost89 算法的 ccgost 引擎)。使用 -engine 选项在命令行上指定的引擎只能用于硬件辅助实现的密码,这些密码由 OpenSSL 核心或配置文件中指定的其他引擎支持。

    当使用openssl enc -list列出受支持的密码时,配置文件中指定的引擎提供的密码也会列出。
    如果需要,将提示输入密码以派生Key和 IV。

    如果密钥是从密码派生的,则应始终使用 -salt 选项,除非您希望与以前版本的 OpenSSL 兼容。

    如果没有 -salt 选项,则有可能对密码执行有效的字典攻击,并攻击流密码加密数据。原因是如果没有盐,相同的密码总是会生成相同的加密密钥。

    当salt是随机生成时(没有使用 -S 选项给出明确盐),加密数据的第一个字节被保留以存储盐以供以后解密。
    有些密码没有大密钥,而其他密码如果使用不当则会产生安全隐患。建议初学者在 CBC 模式下仅使用strong block cipher,例如 AES。
    所有block ciphers通常都使用 PKCS#5 填充,也称为standard block填充。这允许执行基本的完整性或密码检查。但是,由于随机数据通过测试的概率大于 256 分之一,因此这不是一个很好的测试。

    如果禁用填充,则输入数据必须是密码块长度的倍数。

    所有 RC2 密码都具有相同的密钥和有效密钥长度。
    Blowfish 和 RC5 算法使用 128 位密钥。

    请注意,OpenSSL 3.0 改变了 -S 选项的效果。通过此选项指定的任何显式盐值在加密时不再添加到密文前面,并且在解密时必须再次显式提供。相反,当在解密期间使用 -S 选项时,密文预计不会有前面插入的盐值。
    使用 OpenSSL 3.0 或更高版本解密在 OpenSSL 1.1.1 下使用显式盐加密的数据时,请勿使用 -S 选项,然后将从密文中读取盐。要生成可以使用 OpenSSL 1.1.1 解密的密文,请勿使用 -S 选项,然后会随机生成盐并将其添加到输出前面。

    SUPPORTED CIPHERS

    请注意,有些密码可以在编译时禁用,有些密码只有在配置文件中配置了适当的引擎后才可用。使用 -list 选项调用此命令(即 openssl enc -list)时的输出是您的 OpenSSL 版本支持的密码列表,包括通过配置的引擎提供的算法。

    此命令不支持 CCM 和 GCM 等经过身份验证的加密模式,将来也不会支持此类模式。这是因为在验证身份验证标签之前必须开始流式输出(例如,当未使用 -out 时输出到标准输出)。当在管道中使用此命令时,接收端将无法在身份验证失败时回滚。当前常用的 AEAD 模式在重用 key/iv/nonce 时也会遭受机密性和/或完整性的灾难性故障,并且由于 openssl enc 将 key/iv/nonce 管理的全部负担都放在用户身上,因此暴露 AEAD 模式的风险太大而无法允许。这些 key/iv/nonce 管理问题也会影响此命令中当前暴露的其他模式,但在这些情况下故障模式不那么严重,并且无法通过稳定的发布分支删除该功能。对于批量数据加密,无论是使用经过身份验证的加密模式还是其他模式,都建议使用 openssl-cms(1),因为它提供了标准数据格式并执行所需的 key/iv/nonce 管理。

    When enc is used with key wrapping modes the input data cannot be streamed, meaning it must be processed in a single pass. Consequently, the input data size must be less than the buffer size (-bufsize arg, default to 81024 bytes). The ‘-wrap’ ciphers require the input to be a multiple of 8 bytes long, because no padding is involved. The ‘*-wrap-pad’ ciphers allow any input length. In both cases, no IV is needed. See example below.

    当 enc 与 key wrapping 模式一起使用时,输入数据无法流式传输,这意味着必须一次性处理。因此,输入数据大小必须小于缓冲区大小(-bufsize 参数,默认为 81024 字节)。’-wrap’ 密码要求输入长度为 8 字节的倍数,因为不涉及填充。’*-wrap-pad’ 密码允许任意长度的输入。在这两种情况下,都不需要 IV。请参见下面的示例。

    base64             Base 64
    
    bf-cbc             Blowfish in CBC mode
    bf                 Alias for bf-cbc
    blowfish           Alias for bf-cbc
    bf-cfb             Blowfish in CFB mode
    bf-ecb             Blowfish in ECB mode
    bf-ofb             Blowfish in OFB mode
    
    cast-cbc           CAST in CBC mode
    cast               Alias for cast-cbc
    cast5-cbc          CAST5 in CBC mode
    cast5-cfb          CAST5 in CFB mode
    cast5-ecb          CAST5 in ECB mode
    cast5-ofb          CAST5 in OFB mode
    
    chacha20           ChaCha20 algorithm
    
    des-cbc            DES in CBC mode
    des                Alias for des-cbc
    des-cfb            DES in CFB mode
    des-ofb            DES in OFB mode
    des-ecb            DES in ECB mode
    
    des-ede-cbc        Two key triple DES EDE in CBC mode
    des-ede            Two key triple DES EDE in ECB mode
    des-ede-cfb        Two key triple DES EDE in CFB mode
    des-ede-ofb        Two key triple DES EDE in OFB mode
    
    des-ede3-cbc       Three key triple DES EDE in CBC mode
    des-ede3           Three key triple DES EDE in ECB mode
    des3               Alias for des-ede3-cbc
    des-ede3-cfb       Three key triple DES EDE CFB mode
    des-ede3-ofb       Three key triple DES EDE in OFB mode
    
    desx               DESX algorithm.
    
    gost89             GOST 28147-89 in CFB mode (provided by ccgost engine)
    gost89-cnt         GOST 28147-89 in CNT mode (provided by ccgost engine)
    
    idea-cbc           IDEA algorithm in CBC mode
    idea               same as idea-cbc
    idea-cfb           IDEA in CFB mode
    idea-ecb           IDEA in ECB mode
    idea-ofb           IDEA in OFB mode
    
    rc2-cbc            128 bit RC2 in CBC mode
    rc2                Alias for rc2-cbc
    rc2-cfb            128 bit RC2 in CFB mode
    rc2-ecb            128 bit RC2 in ECB mode
    rc2-ofb            128 bit RC2 in OFB mode
    rc2-64-cbc         64 bit RC2 in CBC mode
    rc2-40-cbc         40 bit RC2 in CBC mode
    
    rc4                128 bit RC4
    rc4-64             64 bit RC4
    rc4-40             40 bit RC4
    
    rc5-cbc            RC5 cipher in CBC mode
    rc5                Alias for rc5-cbc
    rc5-cfb            RC5 cipher in CFB mode
    rc5-ecb            RC5 cipher in ECB mode
    rc5-ofb            RC5 cipher in OFB mode
    
    seed-cbc           SEED cipher in CBC mode
    seed               Alias for seed-cbc
    seed-cfb           SEED cipher in CFB mode
    seed-ecb           SEED cipher in ECB mode
    seed-ofb           SEED cipher in OFB mode
    
    sm4-cbc            SM4 cipher in CBC mode
    sm4                Alias for sm4-cbc
    sm4-cfb            SM4 cipher in CFB mode
    sm4-ctr            SM4 cipher in CTR mode
    sm4-ecb            SM4 cipher in ECB mode
    sm4-ofb            SM4 cipher in OFB mode
    
    aes-[128|192|256]-cbc  128/192/256 bit AES in CBC mode
    aes[128|192|256]       Alias for aes-[128|192|256]-cbc
    aes-[128|192|256]-cfb  128/192/256 bit AES in 128 bit CFB mode
    aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode
    aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode
    aes-[128|192|256]-ctr  128/192/256 bit AES in CTR mode
    aes-[128|192|256]-ecb  128/192/256 bit AES in ECB mode
    aes-[128|192|256]-ofb  128/192/256 bit AES in OFB mode
    
    aes-[128|192|256]-wrap     key wrapping using 128/192/256 bit AES
    aes-[128|192|256]-wrap-pad key wrapping with padding using 128/192/256 bit AES
    
    aria-[128|192|256]-cbc  128/192/256 bit ARIA in CBC mode
    aria[128|192|256]       Alias for aria-[128|192|256]-cbc
    aria-[128|192|256]-cfb  128/192/256 bit ARIA in 128 bit CFB mode
    aria-[128|192|256]-cfb1 128/192/256 bit ARIA in 1 bit CFB mode
    aria-[128|192|256]-cfb8 128/192/256 bit ARIA in 8 bit CFB mode
    aria-[128|192|256]-ctr  128/192/256 bit ARIA in CTR mode
    aria-[128|192|256]-ecb  128/192/256 bit ARIA in ECB mode
    aria-[128|192|256]-ofb  128/192/256 bit ARIA in OFB mode
    
    camellia-[128|192|256]-cbc  128/192/256 bit Camellia in CBC mode
    camellia[128|192|256]       Alias for camellia-[128|192|256]-cbc
    camellia-[128|192|256]-cfb  128/192/256 bit Camellia in 128 bit CFB mode
    camellia-[128|192|256]-cfb1 128/192/256 bit Camellia in 1 bit CFB mode
    camellia-[128|192|256]-cfb8 128/192/256 bit Camellia in 8 bit CFB mode
    camellia-[128|192|256]-ctr  128/192/256 bit Camellia in CTR mode
    camellia-[128|192|256]-ecb  128/192/256 bit Camellia in ECB mode
    camellia-[128|192|256]-ofb  128/192/256 bit Camellia in OFB mode
    

    示例

    Just base64 encode a binary file:

    openssl base64 -in file.bin -out file.b64

    Decode the same file

    openssl base64 -d -in file.b64 -out file.bin

    Encrypt a file using AES-128 using a prompted password and PBKDF2 key derivation:

    openssl enc -aes128 -pbkdf2 -in file.txt -out file.aes128

    Decrypt a file using a supplied password:

    openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt -pass pass:<password>

    Encrypt a file then base64 encode it (so it can be sent via mail for example) using AES-256 in CTR mode and PBKDF2 key derivation:

    openssl enc -aes-256-ctr -pbkdf2 -a -in file.txt -out file.aes256

    Base64 decode a file then decrypt it using a password supplied in a file:

    openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 -out file.txt -pass file:<passfile>

    AES key wrapping:

    openssl enc -e -a -id-aes128-wrap-pad -K 000102030405060708090A0B0C0D0E0F -in file.bin

    or

    openssl aes128-wrap-pad -e -a -K 000102030405060708090A0B0C0D0E0F -in file.bin

    Bugs

    -A 选项在处理大文件时无法正常工作。另一方面,在不使用 -A 选项的情况下进行 base64 解码时,如果输入的前 1024 个字节不包含换行符,则前两行输入将被忽略。

    openssl enc 命令仅支持具有特定参数的固定数量的算法。因此,例如,如果您想使用带有 76 位密钥的 RC2 或带有 84 位密钥的 RC4,则无法使用此程序。

    历史

    The default digest was changed from MD5 to SHA256 in OpenSSL 1.1.0.

    The -list option was added in OpenSSL 1.1.1e.

    The -ciphers and -engine options were deprecated in OpenSSL 3.0.

    The -saltlen option was added in OpenSSL 3.2.

    Views: 0

  • openssl-prime

    openssl-prime

    名称

    openssl-prime – compute prime numbers

    概述

    openssl prime [-help] [-hex] [-generate] [-bits num] [-safe] [-provider name] [-provider-path path] [-propquery propq] [-checks num] [number ...]

    number可以指定多个

    描述

    这个命令检查指定的数字是否为素数
    如果没有指定number参数,则应使用-generate开关生成一个符合其它开关的素数

    选项

    • -help

      Display an option summary.

    • -hex

      16进制输出

    • -generate

      生成而不是测试素数

    • -bits num

      生成素数时的位数

    • -safe

      当生成素数时生成一个 “safe” 素数(非Miller-Rabin测试). 如果生成的素数是 n, 则检查 (n-1)/2 也是素数.

    • -provider name

      -provider-path path

    • -propquery propq

      See “Provider Options” in openssl(1), provider(7), and property(7).

    • -checks num

      指定检查的轮数,此参数不生效

    Views: 1

  • openssl-genpkey

    openssl-genpkey

    名字

    openssl-genpkey – generate a private key or key pair

    概述

    openssl genpkey [-help] [-out filename] [-outpubkey filename] [-outform DER|PEM] [-verbose] [-quiet] [-pass arg] [-cipher] [-paramfile file] [-algorithm alg] [-pkeyopt opt:value] [-genparam] [-text] [-rand files] [-writerand file] [-engine id]

    [-provider name] [-provider-path path] [-propquery propq] [-config configfile]

    描述

    这个命令可以生成私钥或密钥对

    命令语法

    • -help

      帮助

    • -out

      指定要写入密钥的输出文件名,如果未指定此选项,则使用标准输出。如果设置了任何加密选项,则会提示输入密码。输出文件名不应与输入文件名相同。

    • -outpubkey filename

      把公钥写入到指定的文件,不指定时不生成公钥

    • -outform DER|PEM

      输出格式,除非指定-genparam,否者默认是PEM格式
      当指定-genparam时-outform选项忽略

    • -verbose

      显示寻找素数的状态点

    • -quiet

      不显示寻找素数的状态点

    • -pass arg

      输出文件的密码来源,参考:https://docs.openssl.org/3.4/man1/openssl-passphrase-options/#pass-phrase-option-arguments

    • -cipher

      加密私钥的算法

    • -algorithm alg

      公私钥算法,可以是RSA, DSA, DH, DHX,如果使用此选项,必须首先存在-pkeyopt 选项选项 -paramfile 和 -algorithm 是互斥的。Engines or providers可能会添加除标准内置算法之外的算法。

      生成私钥时可用的算法包括 RSA, RSA-PSS, EC, X25519, X448, ED25519 and ED448.
      生成参数(-genparam option)时可用的算法包括 DH, DSA and EC.
      请注意,算法名称 X9.42 DH 可用作 DHX 密钥的同义词,PKCS#3 指的是 DH 密钥。DH 和 DHX 密钥之间不共享某些选项。

    • -pkeyopt opt:value

      公钥算法的opt选项值。支持的选项的精确集合取决于所使用的公钥算法及其实现。有关更多详细信息,请参阅下面的“密钥生成选项”和“参数生成选项”。

      要列出算法的可能 opt 值,请使用:openssl genpkey -algorithm XXX -help

    • -genparam

      生成一组私钥参数而不是最终的私钥。如果使用此选项,则必须存在任何 -algorithm、-paramfile 或 -pkeyopt 选项。

    • -paramfile filename

      一些公钥算法根据一组参数生成私钥。可以使用此选项提供这些算法。如果使用此选项,则所使用的公钥算法由此处指定的参数决定。如果使用此选项,则必须存在 -pkeyopt 选项。选项 -paramfile 和 -algorithm 是互斥的。

    • -text

      打印私钥、公钥和参数的(未加密)文本表示以及 PEM 或 DER 结构。

    • -rand files, -writerand file

      指定随机数状态保存的文件,读取之前的随机数生成器状态并写入当前状态用于下次执行的时候继续使用。现在OpenSSL已经从操作系统中读取熵源,这个选项不再需要,只是在特殊情况下才有用。

    • -engine id

      指定engine id,这个选项已经废弃

    • -provider name

      指定provider name

    • -provider-path path

      provider的路径

    • -propquery propq

      provider中的属性

    • -config

      指定备用的配置文件,用于替代默认的openssl.cnf

    key生成选项

    每种算法支持的选项以及算法的每种实现都可能有所不同。OpenSSL 实现的选项详述如下。没有为 X25519、X448、ED25519 或 ED448 算法定义密钥生成选项。

    RSA选项

    -rsa_keygen_bits:numbits

    rsa密钥长度,默认2048位
    
    • rsa_keygen_primes:numprimes

      素数个数,默认是2

    • rsa_keygen_pubexp:value

      The RSA public exponent value. This can be a large decimal or hexadecimal value if preceded by 0x. Default value is 65537.
      RSA 公共指数值。可以是一个较大的10进制或16进制数(如果前面有 0x),默认是 65537。

    RSA-PSS选项

    RSA-PSS应该指的是PSS填充的RSA签名,由PKCS#1 v2.1定义。
    默认没有任何限制

    • rsa_keygen_bits:numbits, rsa_keygen_primes:numprimes, rsa_keygen_pubexp:value

      同RSA

    • rsa_pss_keygen_md:digest

      如果设置只能使用digest签名

    • rsa_pss_keygen_mgf1_md:digest

      如果设置只能使用digest作为 MGF1 parameter.

    • rsa_pss_keygen_saltlen:len

      限制salt的最小长度

    EC选项

    • ec_paramgen_curve:curve

      指定使用的EC曲线. OpenSSL支持NIST曲线,如 “P-256″,也支持国密,如 “SM2”.

    • ec_param_enc:encoding

      The encoding to use for parameters. The encoding parameter must be either named_curve or explicit. The default value is named_curve.
      用于参数的编码。编码参数必须是 named_curve 或 explicit 。默认值为 named_curve。
      使用named_curve时参数文件中只包含代表曲线的OID,使用explicit则包含定义曲线的参数的具体值(这些参数决定了不同的曲线,比如P-256和SM2的曲线参数是不同的)。可以用以下命令观察这两者的区别。

      openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:explicit -text
      openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -pkeyopt ec_param_enc:named_curve -text
      

    DH选项

    • -group:name

      The paramfile option is not required if a named group is used here. See the “(DH Parameter Generation Options)(https://docs.openssl.org/3.4/man1/openssl-genpkey/#dh-parameter-generation-options)” section below.
      如果在这指定命名的group,则paramfile option不再是必须的,参考 “(DH Parameter Generation Options)(https://docs.openssl.org/3.4/man1/openssl-genpkey/#dh-parameter-generation-options)”

    参数生成选项

    每种算法支持的选项以及算法的每种实现都可能有所不同

    DSA选项

    DSA算法已被认为不安全,这里不再翻译

    • dsa_paramgen_bits:numbits

      The number of bits in the generated prime. If not specified 2048 is used.

    • dsa_paramgen_q_bits:numbits

    • qbits:numbits

      The number of bits in the q parameter. Must be one of 160, 224 or 256. If not specified 224 is used.

    • dsa_paramgen_md:digest

    • digest:digest

      The digest to use during parameter generation. Must be one of sha1, sha224 or sha256. If set, then the number of bits in q will match the output size of the specified digest and the dsa_paramgen_q_bits parameter will be ignored. If not set, then a digest will be used that gives an output matching the number of bits in q, i.e. sha1 if q length is 160, sha224 if it 224 or sha256 if it is 256.

    • properties:query

      The digest property query string to use when fetching a digest from a provider.

    • type:type

      The type of generation to use. Set this to 1 to use legacy FIPS186-2 parameter generation. The default of 0 uses FIPS186-4 parameter generation.

    • gindex:index

      The index to use for canonical generation and verification of the generator g. Set this to a positive value ranging from 0..255 to use this mode. Larger values will only use the bottom byte. This index must then be reused during key validation to verify the value of g. If this value is not set then g is not verifiable. The default value is -1.

    • hexseed:seed

      The seed seed data to use instead of generating a random seed internally. This should be used for testing purposes only. This will either produced fixed values for the generated parameters OR it will fail if the seed did not generate valid primes.

    DH选项

    对于大多数用例,建议使用 group 选项而不是 type 选项。请注意,如果未指定参数生成选项,则默认不使用 group 选项。

    • group:name

    • dh_param:name

      通过命名的的DH group选择DH参数,如果这里指定值所有其它选项会被忽略
      DH算法的有效的值是:”ffdhe2048″, “ffdhe3072”, “ffdhe4096”, “ffdhe6144”, “ffdhe8192”, “modp_1536”, “modp_2048”, “modp_3072”, “modp_4096”, “modp_6144”, “modp_8192”.
      DHX算法的有效值使用是RFC5114命名,包括: “dh_1024_160”, “dh_2048_224”, “dh_2048_256”.
      group:name和dh_param:name是等效的

    • dh_rfc5114:num

      如果设置这个选项则使用RFC5144参数值生成DHX参数,num可以是1,2,3,分别代表 “dh_1024_160”, “dh_2048_224” or “dh_2048_256″(与使用group:name相同的效果)。使用这个选项时所有其它选项会被忽略。

    • pbits:numbits

    • dh_paramgen_prime_len:numbits

      The number of bits in the prime parameter p. The default is 2048.

    • qbits:numbits

    • dh_paramgen_subprime_len:numbits

      The number of bits in the sub prime parameter q. The default is 224. Only relevant if used in conjunction with the dh_paramgen_type option to generate DHX parameters.

    • safeprime-generator:value

    • dh_paramgen_generator:value

      The value to use for the generator g. The default is 2. The algorithm option must be “DH” for this parameter to be used.

    • type:string

      The type name of DH parameters to generate. Valid values are:

      • “generator”

        Use a safe prime generator with the option safeprime_generator The algorithm option must be “DH”.

      • “fips186_4”

        FIPS186-4 parameter generation. The algorithm option must be “DHX”.

      • “fips186_2”

        FIPS186-4 parameter generation. The algorithm option must be “DHX”.

      • “group”

        Can be used with the option pbits to select one of “ffdhe2048”, “ffdhe3072”, “ffdhe4096”, “ffdhe6144” or “ffdhe8192”. The algorithm option must be “DH”.

      • “default”

        Selects a default type based on the algorithm. This is used by the OpenSSL default provider to set the type for backwards compatibility. If algorithm is “DH” then “generator” is used. If algorithm is “DHX” then “fips186_2” is used.

    • dh_paramgen_type:value

      The type of DH parameters to generate. Valid values are 0, 1, 2 or 3 which correspond to setting the option type to “generator”, “fips186_2”, “fips186_4” or “group”.

    • digest:digest

      The digest to use during parameter generation. Must be one of sha1, sha224 or sha256. If set, then the number of bits in qbits will match the output size of the specified digest and the qbits parameter will be ignored. If not set, then a digest will be used that gives an output matching the number of bits in q, i.e. sha1 if q length is 160, sha224 if it is 224 or sha256 if it is 256. This is only used by “fips186_4” and “fips186_2” key generation.

    • properties:query

      The digest property query string to use when fetching a digest from a provider. This is only used by “fips186_4” and “fips186_2” key generation.

    • gindex:index

      The index to use for canonical generation and verification of the generator g. Set this to a positive value ranging from 0..255 to use this mode. Larger values will only use the bottom byte. This index must then be reused during key validation to verify the value of g. If this value is not set then g is not verifiable. The default value is -1. This is only used by “fips186_4” and “fips186_2” key generation.

    • hexseed:seed

      The seed seed data to use instead of generating a random seed internally. This should be used for testing purposes only. This will either produced fixed values for the generated parameters OR it will fail if the seed did not generate valid primes. This is only used by “fips186_4” and “fips186_2” key generation.

    EC选项

    与生成密钥时相同

    注意:

    与算法特定的实用程序相比,鼓励使用 genpkey 程序,因为可以使用附加算法选项和 ENGINE 提供的算法。

    Views: 1

  • openssl-genrsa

    openssl-genrsa

    名称

    openssl-genrsa – generate an RSA private key

    概述

    openssl genrsa [-help] [-out filename] [-passout arg] [-aes128] [-aes192] [-aes256] [-aria128] [-aria192] [-aria256] [-camellia128] [-camellia192] [-camellia256] [-des] [-des3] [-idea] [-F4] [-f4] [-3] [-primes num] [-verbose] [-quiet] [-traditional] [-rand files] [-writerand file] [-engine id] [-provider name] [-provider-path path] [-propquery propq] [numbits]

    描述

    这个命令可以生成RSA私钥

    命令语法

    • -help

      帮助

    • -passout arg

      写入密钥文件时的密码

    • -out

      指定要写入密钥的输出文件名,如果未指定此选项,则使用标准输出。如果设置了任何加密选项,则会提示输入密码。输出文件名不应与输入文件名相同。

    • -aes128, -aes192, -aes256, -aria128, -aria192, -aria256, -camellia128, -camellia192, -camellia256, -des, -des3, -idea

      指定加密密钥的算法
      输出私钥之前,会使用指定的加密算法对其进行加密。系统会提示输入密码。如果未指定任何加密算法,则密钥将以纯文本形式写入。如果使用加密,则如果未通过 -passout 参数提供密码,则会提示输入密码。

    • -F4, -f4, -3

      要使用的公共指数,65537 或 3。默认值为 65537。-3 选项已被弃用。

    • -primes num

      指定生成 RSA 密钥时要使用的素数数量。num 参数必须是大于 1 且小于 16 的正整数。如果 num 大于 2,则生成的密钥称为“多素数”RSA 密钥,该用法在 RFC 8017 中定义。多素数会减少计算量,但也会降低复杂度,素数越多素数的长度越短。
      默认情况下是2个素数,经过我的测试可以指定以下值

      素数数量 最短私钥长度
      5 8192
      4 4096
      3 1024
      2 512
    • -verbose

      执行时输出更多的信息

    • -quiet

      输出更少的信息,这在批处理和使用管道时很方便,尤其是密钥生成期间抑制进度.的输出。

    • -traditional

      写入密钥时使用PKCS#1格式,默认是PKCS#8格式。PKCS#1仅能存储RSA密钥,PKCS#8是对PKCS#1的升级可以支持多种算法密钥存储。

    • -rand files, -writerand file

      指定随机数状态保存的文件,读取之前的随机数生成器状态并写入当前状态用于下次执行的时候继续使用。现在OpenSSL已经从操作系统中读取熵源,这个选项不再需要,只是在特殊情况下才有用。

    • -engine id

      指定engine id,这个选项已经废弃

    • -provider name

      指定provider name

    • -provider-path path

      provider的路径

    • -propquery propq

      provider中的属性

    • numbits

      要生成的私钥的大小(以bit为单位)。这必须是指定的最后一个选项。默认值为 2048,不允许小于 512 的值。注意这个是参数而不是选项。

    NOTES

    RSA 私钥生成本质上涉及两个或多个素数的生成。生成私钥时,将输出各种符号以指示生成的进度。 . 表示每个数字都已通过初始筛选测试,+ 表示数字已通过一轮 Miller-Rabin 素数测试,* 表示当前素数由于一些测试失败而开始重新生成。换行符表示数字已通过所有素数测试(实际数量取决于密钥大小)。

    由于 Miller-Rabin 素数测试是概率性测试,测试素数时根据待测试数的位长度自动选择合适的轮数来增加准确性。以下是一些常见位长度下的默认轮数:

    • 对于512位以下的数,默认轮数为 8。
    • 对于512位到1024位的数,默认轮数为 5。
    • 对于1024位到2048位的数,默认轮数为 4。
    • 对于2048位到4096位的数,默认轮数为 3。
    • 对于4096位以上的数,默认轮数为 2。

    由于密钥生成是一个随机过程,因此生成密钥所需的时间可能会有所不同。但一般来说,素数越多,密钥的生成时间越短。

    Views: 0

  • openssl-pkeyutl

    公钥算法命令

    概要

    openssl pkeyutl [-help] [-in file] [-rawin] [-digest algorithm] [-out file] [-sigfile file] [-inkey filename|uri] [-keyform DER|PEM|P12|ENGINE] [-passin arg] [-peerkey file] [-peerform DER|PEM|P12|ENGINE] [-pubin] [-certin] [-rev] [-sign] [-verify] [-verifyrecover] [-encrypt] [-decrypt] [-derive] [-kdf algorithm] [-kdflen length] [-pkeyopt opt:value] [-pkeyopt_passin opt[:passarg]] [-hexdump] [-asn1parse] [-engine id] [-engine_impl] [-rand files] [-writerand file] [-provider name] [-provider-path path] [-propquery propq] [-config configfile]

    描述

    这个命令用于执行low-level的公钥操作,支持任何openssl支持的算法
    默认情况下假定使用-sign操作

    选项

    • -help

      Print out a usage message.

    • -in filename

      指定输入数据的文件名,如果不指定则从标准输入读取

    • -rawin

      这个选项指示要签名和验证的输入数据是raw数据,即没有使用摘要算法处理过,除EdDSA外还可以指定-digest选项。对于签名算法,像RSA,DSA,ECDSA,默认的摘要算法是SHA-256,对于SM2则是SM3摘要算法。
      这个选项只能与-sign和-verify一起使用,对于EdDSA(Ed25519和Ed448算法)这个选项是必须的。

    • -digest algorithm

      此选项只能与 -sign 和 -verify 一起使用。它指定在使用输入密钥对输入数据进行签名或验证之前用于对输入数据进行哈希处理的摘要算法。如果签名算法在签名之前不需要通过pluggable哈希函数对输入进行预处理(例如,EdDSA),则可以省略此选项。如果省略此选项但签名算法需要该选项并且给出了 -rawin 选项,则将使用默认值(有关详细信息,请参阅 -rawin)。如果存在-digest选项,则需要与 -rawin 选项一起使用。
      目前,不支持 HashEdDSA(EdDSA 的 ph 或“prehash”变体),因此 -digest 选项不能与 EdDSA 一起使用。

    • -out filename

      指定输出文件名,默认写入到标准输出

    • -sigfile file

      签名的数据文件,只与-verify选项一起使用。

    • -inkey filename|uri

      输入的密钥,默认是一个私钥。

    • -keyform DER|PEM|P12|ENGINE

      密钥格式; unspecified by default

    • -passin arg

      The input key password source. For more information about the format of arg see openssl-passphrase-options(1).

    • -peerkey file

      指定的文件包含对方的公钥,用于密钥交换(派生)操作

    • -peerform DER|PEM|P12|ENGINE

      The peer key format; unspecified by default. See openssl-format-options(1) for details.

    • -pubin

      当存在这个选项时从-inkey读取的是公钥而不是私钥,如果输入是一个私钥,则使用其公钥部分。

    • -certin

      从证书中读取公钥

    • -rev

      反转输入缓冲区的字节序。这对于某些以小端格式表示缓冲区的库(如 CryptoAPI)很有用。这不能与 -rawin 一起使用。

    • -sign

      对输入数据进行签名并输出签名结果。这需要私钥。建议同时使用消息摘要操作,如适用,请参阅 -rawin 和 -digest 选项了解详情。否则,使用 -in 选项给出的输入数据将被视为已经是摘要,但在某些情况下可能需要额外的 -pkeyopt digest:md(例如,使用默认 PKCS#1 填充模式的 RSA)。即使对于其他算法(如 ECDSA),额外的 -pkeyopt 选项不会影响签名输出,也建议使用,因为它可以检查输入长度是否与预期摘要一致。

    • -verify

      根据 -sigfile 选项给出的签名验证输入数据,并指示验证是成功还是失败。除非指定或暗示了 -rawin 选项,否则 -in 选项给出的输入数据将被视为哈希值。对于原始数据,当摘要算法适用时,尽管可以从签名推断出所用的摘要算法或采用默认值,但也应指定摘要算法。

    • -verifyrecover

      验证给定的签名并输出恢复的recovered data(signature payload,即原始数据,如果有的话)。例如,对于 RSA PKCS#1,恢复的数据是摘要算法 OID 和值的 EMSA-PKCS-v1_5 DER 编码,如 RFC8017(PKCS#1 2.2) 第 9.2 节中所述。
      请注意,此处使用 -in 选项给出的输入不是签名输入(待签名数据)(与 -sign 和 -verify 选项一样),而是签名输出值(签名结果),通常使用 -sign 选项生成。
      此选项仅适用于 RSA 密钥。

    • -encrypt

      使用一个公钥加密数据

    • -decrypt

      使用一个私钥解密数据

    • -derive

      使用peer key派生(Derive)一个共享秘密值

    • -kdf algorithm

      使用的密钥派生函数算法。目前支持的算法有 TLS1-PRF 和 HKDF。注意:通常必须设置附加参数和 KDF 输出长度才能使其正常工作。请参阅 EVP_PKEY_CTX_set_hkdf_md(3) 和 EVP_PKEY_CTX_set_tls1_prf_md(3) 了解每种算法支持的字符串参数。

    • -kdflen length

      指定KDF函数的输出长度

    • -pkeyopt opt:value

      用opt:value格式指定的公钥选项。详情看下面NOTES部分

    • -pkeyopt_passin opt[:passarg]

      允许从 stdin 或密码源读取公钥选项 opt。如果仅指定 opt,系统将提示用户在 stdin 上输入密码。或者,可以指定 passarg,它可以是 openssl-passphrase-options(1) 支持的任何值。

    • -hexdump

      输出数据的16进制

    • -asn1parse

      解析 ASN.1 输出数据以检查其 DER 编码并打印任何错误。与 -verifyrecover 选项结合使用时,这可能仅在 ASN.1 DER 编码结构已直接签名(未对其进行哈希处理)的情况下才有用。

    • -engine id

      See “Engine Options” in openssl(1). This option is deprecated.

    • -engine_impl

      When used with the -engine option, it specifies to also use engine id for crypto operations.

    • -rand files, -writerand file

      See “Random State Options” in openssl(1) for details.

    • -provider name

    • -provider-path path

    • -propquery propq

      See “Provider Options” in openssl(1), provider(7), and property(7).

    • -config configfile

      See “Configuration Option” in openssl(1).

    NOTES

    支持的操作和选项因密钥算法及其实现而异。OpenSSL 操作和选项如下所示。

    除非另有说明,所有算法都支持 digest:alg 选项,该选项指定用于签名和验证操作的摘要。值 alg 应表示 EVP_get_digestbyname() 函数中使用的摘要算法名称,例如 sha1。此值不用于对输入数据进行哈希处理。它(由某些算法)用于对传入的数据长度进行健全性检查,并用于创建组成签名的结构(例如 RSASSA PKCS#1 v1.5 签名中的 DigestInfo)。

    此命令不对输入数据进行哈希处理(使用 -rawin 的情况除外),而是将数据直接用作签名算法的输入。根据密钥类型、签名类型和填充模式,输入数据的最大可接受长度会有所不同。签名数据不能长于 RSA 的密钥模数。对于 ECDSA 和 DSA,数据的长度不应超过字段大小,否则将被默默截断为字段大小。无论如何,输入大小不得大于支持的最大摘要大小。

    换句话说,如果摘要的值是 sha1,则输入应该是 SHA-1 哈希函数输出的 20 字节长的二进制编码。(所以输入数据应该事先用Hash处理,避免数据超过长度,使用 -rawin 的情况除外)

    RSA算法

    RSA-PSS 算法是 RSA 算法的受限版本,仅支持使用 PSS 填充的签名和验证操作。支持以下附加 -pkeyopt 值:

    • rsa_padding_mode:mode, rsa_pss_saltlen:len, rsa_mgf1_md:digest

      这些与 RSA 算法含义相同,但有一些额外的限制。填充模式只能设置为 pss,这是默认值。
      如果密钥有参数限制,则摘要、MGF1 摘要和盐长度将设置为参数中指定的值。摘要(-digest指定,且本命令不做Hash处理)和 MG(mgf1) 不能更改,盐长度不能设置为小于最小限制的值。

    DSA算法

    DSA 算法仅支持签名和验证操作。目前除了 digest 之外没有其他 -pkeyopt 选项。默认采用 SHA1 摘要。

    DH算法

    DH算法只支持密钥派生操作,没有-pkeyopt选项

    EC ALGORITHM

    EC 算法支持签名、验证和派生操作。签名和验证操作使用 ECDSA,派生使用 ECDH。-pkeyopt digest选项默认采用 SHA1。

    X25519 AND X448 算法

    X25519 and X448算法只支持密钥派生操作,没有-pkeyopt选项

    SM2

    SM2 算法支持签名、验证、加密和解密操作。对于签名和验证操作,SM2 需要传入 Distinguishing ID 字符串。支持以下 -pkeyopt 值:

    • distid:string

      设置SM2签名或验证操作中使用的ID字符串。验证SM2签名时,ID字符串必须与签名数据时使用的相同。否则验证将失败。

    • hexdistid:hex_string

      此项设置 SM2 签名或验证操作中使用的 ID 字符串。验证 SM2 签名时,ID 字符串必须与签名数据时使用的字符串相同。否则验证将失败。此选项提供的 ID 字符串应为有效的十六进制值。

    示例

    • DH

      生成公共参数p和g(DH参数,p是个素数)

      openssl dhparam -out dhparam.pem 2048

      生成本地的随机秘密值及对应的公开参数(本地密钥对,a是私钥,A = ga mod p是公钥)

      openssl genpkey -paramfile dhparam.pem -out local_private_key.pem
      openssl pkey -in local_private_key.pem -pubout -out local_public_key.pem

      生成方对的随机秘密值及对应的公开参数(对方密钥对,b,B = gb mod p)

      openssl genpkey -paramfile dhparam.pem -out peer_private_key.pem
      openssl pkey -in peer_private_key.pem -pubout -out peer_public_key.pem

      计算共享秘密值

      openssl pkeyutl -derive -inkey local_private_key.pem -peerkey peer_public_key.pem -out shared_key.bin

    • ECDH

      生成本地ECC密钥对(ECDH的域参数对于一个特定的曲线来说是固定的,所以已经包含在密钥对中了,域参数包含了G值,G值双方共享的公共参数,对应DH算法中的p和g)

      openssl ecparam -name prime256v1 -genkey -noout -out local_private_key.pem
      openssl ec -in local_private_key.pem -pubout -out local_public_key.pem

      生成对方ECC密钥对

      openssl ecparam -name prime256v1 -genkey -noout -out peer_private_key.pem
      openssl ec -in peer_private_key.pem -pubout -out peer_public_key.pem

      派生共享秘密值

      openssl pkeyutl -derive -inkey local_private_key.pem -peerkey peer_public_key.pem -out shared_key.bin

    • RSA加解密

      生成私钥

      openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048

      生成公钥

      openssl pkey -in private_key.pem -pubout -out public_key.pem

      公钥加密

      openssl pkeyutl -in .\msg.txt -inkey .\public_key.pem -pubin -encrypt -out encrypted.bin

      私钥解密

      openssl pkeyutl -in .\encrypted.bin -inkey private_key.pem -decrypt

      openssl虽然支持私钥加密,但没有提供私解解密的功能

    • SM2加解密

      生成sm2密钥对

      openssl genpkey -algorithm sm2 -out sm2.key -outpubkey sm2_pub.pem

      公钥加密

      openssl pkeyutl -in .\msg.txt -inkey .\sm2.key -encrypt -out enc_pub.txt

      私钥解密

      openssl pkeyutl -decrypt -inkey .\sm2.key -in .\enc_pub.txt

    • RSA签名和验签

      签名

      openssl pkeyutl -sign -in msg.txt -rawin -inkey rsa.key -out msg.txt.sig

      验签

      openssl pkeyutl -verify -in msg.txt -sigfile msg.txt.sig -inkey .\rsapub.pem -pubin -rawin

    • RSA带数据恢复签名

      pkeyutl命令签名(不要使用-rawin选项,否者恢复出来的就是hash值了,而且仅支持pkcs1.5填充)

      openssl pkeyutl -sign -in msg.txt -inkey rsa.key -out msg.txt.sig -pkeyopt rsa_padding_mode:pkcs1

      rsautl命令

      openssl rsautl -sign -in msg.txt -inkey rsa.key -out sig -pkcs

      pkeyutl命令恢复数据

      openssl pkeyutl -verifyrecover -in sig -inkey .\rsapub.pem -pubin

      rsautl命令恢复数据

      openssl rsautl -verify -in sig -inkey rsapub.pem -pubin

    Views: 1