admin管理员组

文章数量:1122850

目录

  • OpenSSL
    • 1、version(查看版本信息)
    • 2、rand(生成随机字符串)
    • 3、speed(测试库的性能)
    • 4、enc(对称加密算法工具 )
    • 5、dgst(摘要和数字签名算法工具)
    • 6、dh/dhparam(Diffie-Hellman参数管理)
    • 7、 asn1parse(诊断ASN.1结构)
    • 8、gendh(生成DH参数)
    • 9、passwd(生成口令密文)
    • 10、genrsa(生成RSA私钥)
    • 11、rsa(处理RSA密钥工具)
    • 12、dsaparam(生成和操作DSA参数)
    • 13、gendsa(生成DSA密钥)
    • 14、dsa(处理DSA密钥工具)
    • 16、prime(素数检测/生成)
    • 17、ecparam(椭圆曲线密钥参数工具)
    • 18、ec(椭圆曲线密钥工具)
    • 19、ciphers(显示支持的加密套件)
    • 20、errstr(查询错误代码)
    • 21、pkeyparam(公共密钥算法参数处理工具)
    • 22、genpkey(公共密钥算法私钥生成工具)
    • 23、pkey(公共密钥算法密钥处理工具)
    • 24、pkeyutl(公共密钥算法通用工具)
    • 25、rsautl(RSA算法通用工具)
    • 26、req(PKCS#10证书请求工具)
    • 27、x509(证书处理工具)
    • 28、pkcs8(PKCS#8格式私钥工具)
    • 29、ca(签发证书请求和生成CRL)
    • 30、crl(证书吊销列表处理工具)
    • 31、crl2pkcs7(生成PKCS#7消息工具)
    • 32、pkcs7(PKCS#7处理工具)
    • 33、certhash(为证书或CRL生成链接)
    • 34、pkcs12(PKCS#12文件工具)
    • 35、nseq(证书与netscape证书序列间相互转化)
    • 36、ocsp(在线证书状态工具)
    • 37、verify(证书验证工具)
    • 38、smime(处理S/MIME邮件工具)

OpenSSL

openssl是一个功能极其强大的命令行工具,可以用来完成公钥体系(Public Key Infrastructure)及HTTPS相关的很多任务。openssl是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

openssl有两种运行模式:交互模式和批处理模式。直接输入openssl回车进入交互模式,输入带命令选项的openssl进入批处理模式。

openssl整个软件包大概可以分成三个主要的功能部分:

  • 密码算法库
  • SSL协议库
  • 应用程序。

openssl的目录结构自然也是围绕这三个功能部分进行规划的。

可用的命令选项(mac系统自带):

  • asn1parse:诊断ASN.1结构
  • ca:签发证书请求和生成CRL
  • certhash:为证书或CRL生成链接
  • ciphers:显示支持的加密套件
  • crl:证书吊销列表处理工具
  • crl2pkcs7:生成PKCS#7消息工具
  • dgst:摘要和数字签名算法工具
  • dh:Diffie-Hellman参数管理
  • dhparam:Diffie-Hellman参数管理
  • dsa:处理DSA密钥工具
  • dsaparam:生成和操作DSA参数
  • ec:椭圆曲线密钥工具
  • ecparam:椭圆曲线密钥参数工具
  • enc:对称加密算法工具
  • errstr:查询错误代码
  • gendh:生成DH参数
  • gendsa:生成DSA密钥
  • genpkey:公共密钥算法私钥生成工具
  • genrsa:生成RSA私钥
  • nseq:证书与netscape证书序列间相互转化
  • ocsp:在线证书状态工具
  • passwd:生成口令密文
  • pkcs12:PKCS#12文件工具
  • pkcs7:PKCS#7处理工具
  • pkcs8:PKCS#8私钥工具
  • pkey:公共密钥算法密钥处理工具
  • pkeyparam:公共密钥算法参数处理工具
  • pkeyutl:公共密钥算法通用工具
  • prime:素数检测/生成
  • rand:生成随机字符串
  • req:PKCS#10证书请求工具
  • rsa:处理RSA密钥工具
  • rsautl:RSA算法通用工具
  • s_client
  • s_server
  • s_time
  • sess_id
  • smime:处理S/MIME邮件工具
  • speed:用于测试库的性能
  • spkac
  • ts
  • verify:证书验证工具
  • version:查看版本信息
  • x509:证书处理工具

1、version(查看版本信息)

语法:

version [-abdfopv]

可用选项:

-a                 所有信息
-b                 OpenSSL当前版本的生成日期
-d                 查看openssl目录
-f                 Compilation flag
-o                 选项信息
-p                 平台设置
-v                 当前OpenSSL版本

示例:查看详细信息

openssl version -a
LibreSSL 2.8.3
built on: date not available
platform: information not available
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) blowfish(idx)
compiler: information not available
OPENSSLDIR: "/private/etc/ssl"

2、rand(生成随机字符串)

语法:

rand [-base64 | -hex] [-out file] num

可用选项:

-base64            对输出执行base64编码
-hex               十六进制输出
-out file          写入给定的文件而不是标准输出

示例:生成长度为10的base64编码字符串

openssl rand -base64 10
gKDNnrJtXYf/eA==

示例:生成长度为20的十六进制字符串,并写入a.txt文件

openssl rand -hex -out a.txt 20
9525b8d397c97e43c8e95a71805663b0918efd20

3、speed(测试库的性能)

语法:

openssl speed [md2] [mdc2] [md5] [hmac] [sha1] [sha256] [sha512] [whirlpool] [rmd160] 
[idea-cbc] [seed-cbc] [rc2-cbc] [rc5-cbc] [bf-cbc] [des-cbc] [des-ede3] [aes-128-cbc] [aes-192-cbc] 
[aes-256-cbc] [aes-128-ige] [aes-192-ige] [aes-256-ige] [camellia-128-cbc] [camellia-192-cbc] 
[camellia-256-cbc] [rc4] [rsa512] [rsa1024] [rsa2048] [rsa4096] [dsa512] [dsa1024] [dsa2048] [ecdsap160] 
[ecdsap192] [ecdsap224] [ecdsap256] [ecdsap384] [ecdsap512] [ecdsak163] [ecdsak233] [ecdsak283]
[ecdsak409] [ecdsak571] [ecdsab163] [ecdsab233] [ecdsab283] [ecdsab409] [ecdsab571] [ecdsa]
[ecdhp192] [ecdhp224] [ecdhp256] [ecdhp384] [ecdhp512] [ecdhk163] [ecdhk233] [ecdhk283] [ecdhk409] 
[ecdhk571] [ecdhb163] [ecdhb233] [ecdhb283] [ecdhb409] [ecdhb571][ecdh] [idea] [seed] [rc2] [des] [aes] 
[camellia] [rsa] [blowfish] [-elapsed] [-engine e] [-evp e] [-decrypt] [-mr] [-multi n]

可用选项:

Available values:
md2      md4      md5      hmac     sha1     sha256   sha512   whirlpoolrmd160
idea-cbc seed-cbc rc2-cbc  bf-cbc
des-cbc  des-ede3 aes-128-cbc aes-192-cbc aes-256-cbc aes-128-ige aes-192-ige aes-256-ige 
camellia-128-cbc camellia-192-cbc camellia-256-cbc rc4
rsa512   rsa1024  rsa2048  rsa4096
dsa512   dsa1024  dsa2048
ecdsap256 ecdsap384
ecdsa
ecdhp256  ecdhp384
ecdh
idea     seed     rc2      des      aes      camellia rsa      blowfish

Available options:
-engine e       使用引擎e,可能是硬件设备
-evp e          使用EVP e
-decrypt        时间解密而不是加密(仅EVP)
-mr             产生机器可读的输出
-multi n        并行运行n个基准测试

示例:测试AES算法

openssl speed aes
Doing aes-128 cbc for 3s on 16 size blocks: 32372989 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 9059835 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 256 size blocks: 2326815 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 1024 size blocks: 588425 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 8192 size blocks: 73371 aes-128 cbc's in 3.00s
Doing aes-192 cbc for 3s on 16 size blocks: 27789863 aes-192 cbc's in 3.00s
Doing aes-192 cbc for 3s on 64 size blocks: 7615738 aes-192 cbc's in 3.00s
Doing aes-192 cbc for 3s on 256 size blocks: 1955594 aes-192 cbc's in 3.00s
Doing aes-192 cbc for 3s on 1024 size blocks: 482816 aes-192 cbc's in 3.00s
Doing aes-192 cbc for 3s on 8192 size blocks: ^C

示例:测试RSA512(多线程)

openssl speed rsa512 -multi 5
Forked child 0
Forked child 1
Forked child 2
Forked child 3
Forked child 4
+DTP:512:private:rsa:10
+DTP:512:private:rsa:10
+DTP:512:private:rsa:10
+DTP:512:private:rsa:10
+DTP:512:private:rsa:10
^C

4、enc(对称加密算法工具 )

它能够运用分组或流算法对数据进行加解密。还能够将加解密的结果进行base64编码。

语法:

openssl enc -ciphername [-AadePp] [-base64] [-bufsize number] [-debug] [-in file] [-iv IV] [-K key] [-k password] [-kfile file] [-md digest] [-none] [-nopad] [-nosalt] [-out file] [-pass arg] [-S salt] [-salt]

可用选项:

-A                默认情况下,base64编码为一个多行的文件。使用此选项,可以让生成的结果为一行。解密时,必须使用同样的选项,否则读取数据时会出错。
-a                使用base64编码对加密结果进行处理。加密后进行base64编码,解密前进行base64解密。(别名-base64)
-bufsize size      指定用于I/O的缓冲区大小
-d                 进行解密操作。
-debug             打印调试信息
-e                 进行加密操作,默认操作。可以省略
-in file           要从中读取的输入文件(默认stdin)
-iv IV             手工指定初始化向量(IV)的值。IV值是16进制格式的。如果仅使用-K指定了key而没有使用-k指定password,那么就需要使用-iv手工指定IV值。如果使用-k指定了password,那么IV值会由这个password的值来产生。
-K key             指定加密口令,不设置此项时,程序会提示用户输入口令,指定为十六进制字符串
-md digest         用于根据密码短语创建密钥的摘要
-none              使用NULL密码(无加密或解密)
-nopad             禁用标准块填充
-out file          要写入的输出文件(默认stdout)
-P                 打印出所用的盐、密钥和IV,然后退出(不执行加密或解密)
-p                 打印出所用的盐、密钥和IV
-pass source       密码来源
-S salt            要使用的盐,指定为十六进制字符串
-salt              产生一个随机数,并与-k指定的password串联,然后计算其Hash值来防御字典攻击和rainbow table攻击。(默认)
-v                 Verbose

可用算法:

 -aes-128-cbc              -aes-128-cbc-hmac-sha1    -aes-128-cfb
 -aes-128-cfb1             -aes-128-cfb8             -aes-128-ctr
 -aes-128-ecb              -aes-128-gcm              -aes-128-ofb
 -aes-128-xts              -aes-192-cbc              -aes-192-cfb
 -aes-192-cfb1             -aes-192-cfb8             -aes-192-ctr
 -aes-192-ecb              -aes-192-gcm              -aes-192-ofb
 -aes-256-cbc              -aes-256-cbc-hmac-sha1    -aes-256-cfb
 -aes-256-cfb1             -aes-256-cfb8             -aes-256-ctr
 -aes-256-ecb              -aes-256-gcm              -aes-256-ofb
 -aes-256-xts              -aes128                   -aes192
 -aes256                   -bf                       -bf-cbc
 -bf-cfb                   -bf-ecb                   -bf-ofb
 -blowfish                 -camellia-128-cbc         -camellia-128-cfb
 -camellia-128-cfb1        -camellia-128-cfb8        -camellia-128-ecb
 -camellia-128-ofb         -camellia-192-cbc         -camellia-192-cfb
 -camellia-192-cfb1        -camellia-192-cfb8        -camellia-192-ecb
 -camellia-192-ofb         -camellia-256-cbc         -camellia-256-cfb
 -camellia-256-cfb1        -camellia-256-cfb8        -camellia-256-ecb
 -camellia-256-ofb         -camellia128              -camellia192
 -camellia256              -cast                     -cast-cbc
 -cast5-cbc                -cast5-cfb                -cast5-ecb
 -cast5-ofb                -chacha                   -des
 -des-cbc                  -des-cfb                  -des-cfb1
 -des-cfb8                 -des-ecb                  -des-ede
 -des-ede-cbc              -des-ede-cfb              -des-ede-ofb
 -des-ede3                 -des-ede3-cbc             -des-ede3-cfb
 -des-ede3-cfb1            -des-ede3-cfb8            -des-ede3-ofb
 -des-ofb                  -des3                     -desx
 -desx-cbc                 -gost89                   -gost89-cnt
 -gost89-ecb               -id-aes128-GCM            -id-aes192-GCM
 -id-aes256-GCM            -rc2                      -rc2-40-cbc
 -rc2-64-cbc               -rc2-cbc                  -rc2-cfb
 -rc2-ecb                  -rc2-ofb                  -rc4
 -rc4-40                   -rc4-hmac-md5

1)、示例:使用enc命令进行对称加密(默认使用 PKCS7Padding 的填充方式)

openssl enc -aes-128-cbc -in a.txt -out b.txt -k 123456 -p -a
salt=B635730477446B43
key=221B15748FC08B4B02195C43200A1776
iv =3BCA529430619DC9A80FB82C4994414C

加密结果:

U2FsdGVkX1+2NXMEd0RrQwc6aDuLKxNPOYKzmzT/HBk=

注意:OpenSSL 通过用户输入的密码及一个随机的 salt 来生成 key 和 iv,命令执行的生成的结果会包含 salt 值,所以会跟其他加密工具得到的结果不一致;

//结果
U2FsdGVkX1+2NXMEd0RrQwc6aDuLKxNPOYKzmzT/HBk=
//转换为16进制字符串
53616c7465645f5fb635730477446b43073a683b8b2b134f3982b39b34ff1c19
//可以拆解为三部分
53616C7465645F5F //第一部分:固定字符串 Salted__
B635730477446B43 //第二部分:Salt值
073A683B8B2B134F3982B39B34FF1C19 //第三部分:实际的加密结果

2)、示例:使用enc命令进行对称解密

openssl enc -aes-128-cbc -d -in b.txt -out c.txt -k 123456 -p -a
salt=B635730477446B43
key=221B15748FC08B4B02195C43200A1776
iv =3BCA529430619DC9A80FB82C4994414C

解密结果:

hello world

3)、示例:通过参数指定加解密的初始向量
加密:

openssl enc -<加密算法> -e -in <明文文件> -out <密文文件> -k <密钥> -iv <初始向量>

例如,在加密之前,我们可以生成一对16字节的随机数作为AES-128-CBC的IV,并将其保存到名为iv.txt的文件中。然后使用以下命令进行加密:

openssl enc -aes-128-cbc -e -in a.txt -out b.txt -k 123456 -iv $(cat iv.txt)

解密:

openssl enc -<加密算法> -d -in <密文文件> -out <明文文件> -k <密钥> -iv <初始向量>

在解密时,使用相同的密钥和初始向量:

openssl enc -aes-128-cbc -d -in b.txt -out c.txt -k 123456 -iv $(cat iv.txt)

5、dgst(摘要和数字签名算法工具)

语法:

openssl dgst [-digest] [-help] [-c] [-d] [-list] [-hex] [-binary] [-r] [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify filename] [-signature filename] [-sigopt nm:v] [-hmac key] [-fips-fingerprint] [-rand file...] [-engine id] [-engine_impl] [file...]

可用选项:

-c              使用:号分隔输出
-r              以coreutils的格式输出
-d              输出调试信息
-hex            以16进制的格式输出中,默认
-binary         以二进制的格式输出
-sign   file    使用文件中的私钥签名摘要
-verify file    使用文件中的公钥验证签名
-prverify file  使用文件中的私钥验证签名
-keyform arg    密钥文件格式,默认PEM
-out filename   输出到文件名而不是stdout
-signature file 要验证的签名文件
-sigopt nm:v    签名参数
-hmac key       使用密钥创建散列MAC
-mac algorithm  创建MAC(不一定是HMAC)
-macopt nm:v    MAC算法参数或密钥
-gost-mac       算法
-streebog512    
-streebog256    
-md_gost94      
-md4            
-md5            
-md5-sha1       
-ripemd160      
-sha1           
-sha224         
-sha256         
-sha384         
-sha512         
-whirlpool 

1)、示例:输出指定文件的md5

openssl dgst -md5 a.txt
MD5(a.txt)= 6f5902ac237024bdd0c176cb93063dc4

2)、示例:计算标准输入的md5

echo hello world | openssl dgst -md5
6f5902ac237024bdd0c176cb93063dc4

3)、示例:计算指定文件的hmac(密钥为文本格式)

openssl dgst -md5 -hmac 123456 a.txt
HMAC-MD5(a.txt)= eabbcf1faf82f2bf6e20691f314f2451

4)、示例:对指定的文件使用私钥签名,然后用公钥验证

# 生成RSA密钥对
openssl genrsa -out test.key 1024

#获取公钥
openssl rsa -in test.key -out test.pub -pubout

#私钥对a.txt文件的md5摘要签名
openssl dgst -md5 -sign test.key -out a.txt.sign a.txt

#公钥验证
openssl dgst -md5 -verify test.pub -signature a.txt.sign a.txt
Verified OK

6、dh/dhparam(Diffie-Hellman参数管理)

dh是Diffie-Hellman参数管理命令,现已被dhparam替代。dhparam命令用于生成和管理Diffie-Hellman参数。

语法:

openssl dhparam [-help] [-inform DER|PEM] [-outform DER|PEM] [-in filename] [-out filename] [-dsaparam] [-check] [-noout] [-text] [-C] [-2] [-5] [-rand file...] [-writerand file] [-engine id] [numbits]

可用选项:

-2                 指定2为发生器,默认为2,如果指定这些项,输入DH参数文件将被忽略,自动生成DH参数。
-5                 指定5为发生器,默认为2,如果指定这些项,输入DH参数文件将被忽略,自动生成DH参数。
-C                 以C语言风格打印信息
-check             检查DH密钥参数
-dsaparam          如果本选项被设置,那么无论输入还是输入都会当做DSA的参数。它们再被转化成DH的参数格式。这样子产生DH参数和DH key都会快很多。会使SSL握手的时间缩短。当然时间是以安全性做牺牲的,所以如果这样子最好每次使用不同的参数,以免给人破掉你的密钥值。如果没有被设置,大素数会被作为DH参数的产生器。
-in file           读取DH参数的文件,默认为标准输入
-inform format     输入文件格式,DER或者PEM(默认)格式。DER格式采用ASN1的DER标准格式。一般用的多的都是PEM格式,就是base64编码格式。
-noout             不打印参数编码的版本信息
-out file          dh参数输出文件,默认为标准输出
-outform format    输出文件格式(DER or PEM (default))
-text              打印DH参数信息值

示例:生成DH参数

openssl dhparam -2 -out dhparam.pem -text 1024
    PKCS#3 DH Parameters: (1024 bit)
        prime:
            00:d2:1d:b9:1a:fa:2c:ae:da:51:a7:5f:f1:4b:c6:
            70:e0:ca:cc:a6:c0:b7:39:ab:f3:cf:08:7a:d4:fd:
            9b:2a:87:4f:9b:ed:73:54:89:0d:56:44:4b:1c:1d:
            9c:8e:71:7c:aa:79:b1:94:4b:8e:3c:50:7e:e4:dd:
            94:01:4c:73:c2:0d:ad:a9:ce:2c:1c:53:8b:5d:96:
            7b:f8:69:42:9d:58:f9:c5:f6:ef:e3:f9:9d:74:2d:
            50:90:e2:38:e4:59:d4:e9:98:ec:80:19:53:3d:3c:
            89:18:61:66:39:77:8e:9b:1d:93:5a:df:17:74:ab:
            fb:ae:1c:c7:fd:cc:cf:2d:b3
        generator: 2 (0x2)
-----BEGIN DH PARAMETERS-----
MIGHAoGBANIduRr6LK7aUadf8UvGcODKzKbAtzmr888IetT9myqHT5vtc1SJDVZE
SxwdnI5xfKp5sZRLjjxQfuTdlAFMc8INranOLBxTi12We/hpQp1Y+cX27+P5nXQt
UJDiOORZ1OmY7IAZUz08iRhhZjl3jpsdk1rfF3Sr+64cx/3Mzy2zAgEC
-----END DH PARAMETERS-----

注意:OpenSSL目前仅仅支持老版本的PKCS#3格式的DH,不是最新的X9.42DH。

7、 asn1parse(诊断ASN.1结构)

asn1parse命令是一种用来诊断ASN.1结构的工具,也能用于从ASN1.1数据中提取数据。

语法:

openssl asn1parse [-i] [-dlimit num] [-dump] [-genconf file] [-genstr string] [-in file] [-inform fmt] [-length num] [-noout] [-offset num] [-oid file] [-out file] [-strparse offset]

可用选项:

-dump              以十六进制形式转储未知数据
-dlimit num        以十六进制形式转储未知数据的前num个字节
-genconf file      从中生成ASN.1结构的文件
-genstr string     String to generate ASN.1 structure from
-i                 从中生成ASN.1结构的字符串
-in file           输入文件名,默认为标准输入
-inform fmt        输入格式(DER, TXT or PEM (default))
-length num        分析数据的长度,默认的长度为整个数据的长度,单位byte
-noout             不产生任何输出
-offset num        开始分析的偏移量
-oid file          指定外部的oid文件
-out file          输出文件名,默认为标准输出,给定一个PEM文件,采用此选项可用生成一个DER编码的文件
-strparse offset   此选项也用于从一个偏移量开始来分析数据,不过,与-offset不一样。-offset分析偏移量之后的所有数据,而-strparse只用于分析一段数据,并且这种数据必须是SET或者SEQUENCE,它只分析本SET或者SEQUENCE范围的数据。

示例:解析私钥

首先生成一个私钥:

openssl genrsa -out test.key 1024

然后,我们用asn1parse子命令来解析它,执行命令:

openssl asn1parse -in test.key

输出:

    0:d=0  hl=4 l= 604 cons: SEQUENCE
    4:d=1  hl=2 l=   1 prim: INTEGER           :00
    7:d=1  hl=3 l= 129 prim: INTEGER           :B990D55977C3163AB18D033E22425AB60B353423269582D3A3FB932B30C0E6560946311466A5EB9A7B3395A8D415062E968FBEDBDC0A11EC69F98A9DDFD318625785B04BAE1E8E1ACAD7ACED85382FBAF6F192E518627925234896F18DF6FFF34130F624E575B5D73ABA55E7DB728F21E65C97F57699BA82AE72AB163767DFAF
  139:d=1  hl=2 l=   3 prim: INTEGER           :010001
  144:d=1  hl=3 l= 128 prim: INTEGER           :5997247A5A88F4BD87A556307467E6D5C7597B7F910C542A8C1C54F4604871AC8E33B6546C2EA52E6357076588675221C20D4A8F698FEF115E24DD98D54C5C93A3806ED4031C557A3EC419C05D7146F9E2F2847C4DF728D81F3641C638E6B491A2E7432ECEB8AABFCD90CB709B691E352C939B5763DF4D0AB284E5CBC65B5679
  275:d=1  hl=2 l=  65 prim: INTEGER           :E5A9C3B3B5A19B8C98D3F79C5F7B3D1D1B6FE4FCA7C5DFC7307AE50C786FB709CFA692D9B2D58D6D9D99ED84ABBA1A5785E8A301E80888E50D9786F4514C9E8B
  342:d=1  hl=2 l=  65 prim: INTEGER           :CED87FC6FC92348C12D8969FFB777A1C84E01C7C66743C5C7FEF901EBFE78970EB6BB4FC5468A8D34F1C4E4254BCEEF99690D76FB11BF16E82E20C50DB3F6BED
  409:d=1  hl=2 l=  64 prim: INTEGER           :273A39FD2616F674AB5DF93B326BE0626A5F50637F5CA2FE68DF74E40E6636836C7E6D32D602F7E733362985B1B755EC8128DD3EE41D2114CE9F852392075E45
  475:d=1  hl=2 l=  64 prim: INTEGER           :6D798C7746AA230197DFE6289A312C01F8199D3A0207B702C5FB86ED9F67EE0843B167C2BCF1FF988720561329422DC10F7D6D6881F6661BB54DEA72C8F79229
  541:d=1  hl=2 l=  65 prim: INTEGER           :E097593A83C6B0BBCBC561813BA2BD6EB24A7F03F1260C0F1D63A6EC9FA0CBA275D87DE8EA89771AE633CDD845A4524F8CB889837F81D5C27309C1C96AE08F8E
ASN.1是以TLV数据块进行存储的,并且还支持多层嵌套。
取第一行进行分析,如:
0:d=0  hl=4 l= 604 cons: SEQUENCE
0:d=0 行首的0表示该数据块在文件中的偏移为0,d=0表示嵌套的深度为0。
hl=4 表示头部长度为4。
l= 604 表示数据长度为604,当然这是包括嵌套的所有数据的。
cons: SEQUENCE 表示数据类型,这是一个序列数据。

同样的取第4行,如:
139:d=1  hl=2 l=   3 prim: INTEGER           :010001
表示在文件的139偏移处,在深度1层中,有一个头长度为2,数据长度为3的整数数据,值为010001。其实这是RSA的常数E。

8、gendh(生成DH参数)

OpenSSL的gendh命令可以生成DH参数。

语法:

openssl gendh [-2 | -5] [-out file] [numbits]

可用选项:

-2                 生成生成器值为2的DH参数(默认值)
-5                 生成生成器值为5的DH参数
-out file          输出文件,默认标准输出

示例:生成dh参数

openssl gendh  -5  -out dh.pem 1024

dh.pem内容如下:

-----BEGIN DH PARAMETERS-----
MIGHAoGBAK4WhKLPsaqKGm/1N1gfme7yXHI1oQaxn1/eQgUzDL9USaiZkqCz1f3b
A26PwOQ5v6UUdBt6g9iTpPODSfqB691OQOruzKMtk/JsDYnOBr5xn7m6KxLOg1xv
wDCdSPv/4IpKlpBWC7IMzkn0CWGGvJffYsnJjyuwz3OyPRQxvzx/AgEF
-----END DH PARAMETERS-----

9、passwd(生成口令密文)

openssl passwd是OpenSSL提供的一个命令行工具,用于生成加密的密码哈希值。这个哈希值可以在系统中存储,并且当用户登录时进行验证。该命令可用于生成各种类型的密码哈希,如MD5、SHA256等。

语法:

openssl passwd [-1 | -apr1 | -crypt] [-in file] [-noverify] [-quiet] [-reverse] [-salt string] [-stdin] [-table] [password]

可用选项:

-1                 使用基于MD5的BSD密码算法1
-apr1              使用apr1算法(BSD算法的Apache变体),即Apache MD5
-crypt             默认选项,生成标准的unix口令密文
-in file           从指定文件读取密码
-noverify          不验证密码
-quiet             不输出警告
-reverse           反转表列(需要-table),用户输入的口令和结果用缩进隔开,输出内容颠倒顺序
-salt string       使用指定的盐
-stdin             从stdin读取密码
-table             输出明文和散列密码(制表符分隔)

示例:使用MD5算法将”mypassword”转换为哈希

openssl passwd -1 mypassword 
$1$hXRCxyV2$ue5M6BkPEd/OC46k7.Epk1

示例:使用crypt()函数将”mypassword”转换为哈希

openssl passwd -crypt mypassword
Warning: truncating password to 8 characters
YrxcnFm0x76y6

10、genrsa(生成RSA私钥)

openssl genrsa 命令是会用来生成 RSA 私有秘钥,不会生成公钥,因为公钥提取自私钥。生成时是可以指定私钥长度和密码保护。

如果需要查看公钥或生成公钥,可以使用 openssl rsa 命令。

语法:

openssl genrsa [args] [numbits]

可用选项:

-des                                        以des cbc模式加密密钥
-des3                                       以3des cbc模式加密密钥,密钥长度为168
-aes128, -aes192, -aes256                   以aes cbc模式加密,PEM输出
-camellia128, -camellia192, -camellia256    以camelilia cbc模式加密,PEM输出
-out file       							输出文件
-passout arg    							对生成的RSA秘钥文件施加密码保护
-f4             							E值使用F4(0x10001)
-3              							E值用3

示例:使用3des算法加密rsa密钥

openssl genrsa -des3 -out prikey.pem -f4 1024

会提示输入密码:

Generating RSA private key, 1024 bit long modulus
...............................++++++
......++++++
e is 65537 (0x10001)
Enter pass phrase for prikey.pem:
Verifying - Enter pass phrase for prikey.pem:

生成的prikey.pem:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,935AF2A187D312B3

v6e2hK3ObUzPdqH3jDSFDrK01qo2TtsKpSmocbMutCFyC3r/nSBzvBNFg4k6sCql
Q5khaXeIJBqpzTxPNsE2MROJmRkSIQazuVwffRFe2bHgxK4Avi1zEe3zTRJphQZs
0wnANXzpJk/xcrcaJBQ5QTNDwP+75RXZ3qGyoN03I0iIFusDcLKIGP26pEiT5y7T
44kR0N7DKF48u9N2k6JpGWIkU8qk5Zn7Da0A5nudNJWfkK6YEDBXf+4pKc4Efpcy
3vKusOWfYJOo2mrTldYWiqYPWuE/04B3uEoKR4cx1YwU9AFYqTFKqxQksX/3JeGt
KD4FP4BcohkFcft6OPkZusZ0Sc93PYOFr2D/2vQWozemGpoBumCNXvh3klElEtCX
iMQSus25yK095eOlp43xD7oSWolO8arqcyx2OXevY7RN1aCwh7utG/rRAj8+7e0Z
EER8v2dF424orLTkU6FMvsSNeDrFrhm+zzwfR9/qEfVDr8LLPG5ITsRwdehdxMKr
eAzFP1wtXp3BWc6aeNJsPuiXsTnSr2Bx2PD23r5n5PC6Z5cQnnFVx4BILynNeHl5
WPel9cVlYW0D1HaBlt+8te1/rmXsIiWn4NA8UQKNr9IRLERFyC15BQhVW7g8fjHR
L14MlDs3L2+ZXCQxWCcZBiug8PVrQnThan/X8mWTrgSrxtdCnGuazG0hjDGNfLoL
QvxoPZVFvZokaF220C/GTws+yqjn01h/j+uI4Gowl2kjaUXVj1fjOsoM03t/HK/n
auH1ZRNDTFjw37ex3wDgdpz440oT/SJEhv9FizoEi7iOxUW/CXTtog==
-----END RSA PRIVATE KEY-----

示例:生成 1024 位 RSA 秘钥,采用 des 算法加密,加密密码为 123456

openssl genrsa -des -passout pass:"123456" -out prikey.pem 1024

11、rsa(处理RSA密钥工具)

Rsa命令用于处理RSA密钥、格式转换和打印信息。

语法:

openssl rsa [-ciphername] [-check] [-in file] [-inform fmt] [-modulus] [-noout] [-out file] [-outform fmt] [-passin src] [-passout src] [-pubin] [-pubout] [-sgckey] [-text]

可选参数:

-check             C检查RSA私钥的一致性
-in file           输入文件,默认标准输入
-inform format     输入格式(DER, NET or PEM (default))
-modulus           打印RSA密钥模数
-noout             不打印任何信息
-out file          输出文件,默认标准输出
-outform format    输出格式(DER, NET or PEM (default PEM))
-passin src        输入保护密钥来源,比如:-passin file:pwd.txt
-passout src       输出保护密钥来源,比如:-passout file:pwd.txt
-pubin             表明输入文件为公钥,默认的输入文件是私钥
-pubout            表明输出文件为公钥,默认的输出文件是私钥
-sgckey            对IIS和SGC密钥使用修改后的NET算法
-text              除了编码外,还以纯文本打印密钥信息

支持的算法:

 -AES-128-CBC              -AES-128-CBC-HMAC-SHA1    -AES-128-CFB
 -AES-128-CFB1             -AES-128-CFB8             -AES-128-CTR
 -AES-128-ECB              -AES-128-OFB              -AES-128-XTS
 -AES-192-CBC              -AES-192-CFB              -AES-192-CFB1
 -AES-192-CFB8             -AES-192-CTR              -AES-192-ECB
 -AES-192-OFB              -AES-256-CBC              -AES-256-CBC-HMAC-SHA1
 -AES-256-CFB              -AES-256-CFB1             -AES-256-CFB8
 -AES-256-CTR              -AES-256-ECB              -AES-256-OFB
 -AES-256-XTS              -AES128                   -AES192
 -AES256                   -BF                       -BF-CBC
 -BF-CFB                   -BF-ECB                   -BF-OFB
 -CAMELLIA-128-CBC         -CAMELLIA-128-CFB         -CAMELLIA-128-CFB1
 -CAMELLIA-128-CFB8        -CAMELLIA-128-ECB         -CAMELLIA-128-OFB
 -CAMELLIA-192-CBC         -CAMELLIA-192-CFB         -CAMELLIA-192-CFB1
 -CAMELLIA-192-CFB8        -CAMELLIA-192-ECB         -CAMELLIA-192-OFB
 -CAMELLIA-256-CBC         -CAMELLIA-256-CFB         -CAMELLIA-256-CFB1
 -CAMELLIA-256-CFB8        -CAMELLIA-256-ECB         -CAMELLIA-256-OFB
 -CAMELLIA128              -CAMELLIA192              -CAMELLIA256
 -CAST                     -CAST-cbc                 -CAST5-CBC
 -CAST5-CFB                -CAST5-ECB                -CAST5-OFB
 -ChaCha                   -DES                      -DES-CBC
 -DES-CFB                  -DES-CFB1                 -DES-CFB8
 -DES-ECB                  -DES-EDE                  -DES-EDE-CBC
 -DES-EDE-CFB              -DES-EDE-OFB              -DES-EDE3
 -DES-EDE3-CBC             -DES-EDE3-CFB             -DES-EDE3-CFB1
 -DES-EDE3-CFB8            -DES-EDE3-OFB             -DES-OFB
 -DES3                     -DESX                     -DESX-CBC
 -GOST 28147-89            -RC2                      -RC2-40-CBC
 -RC2-64-CBC               -RC2-CBC                  -RC2-CFB
 -RC2-ECB                  -RC2-OFB                  -RC4
 -RC4-40                   -RC4-HMAC-MD5             -aes-128-cbc
 -aes-128-cbc-hmac-sha1    -aes-128-cfb              -aes-128-cfb1
 -aes-128-cfb8             -aes-128-ctr              -aes-128-ecb
 -aes-128-gcm              -aes-128-ofb              -aes-128-xts
 -aes-192-cbc              -aes-192-cfb              -aes-192-cfb1
 -aes-192-cfb8             -aes-192-ctr              -aes-192-ecb
 -aes-192-gcm              -aes-192-ofb              -aes-256-cbc
 -aes-256-cbc-hmac-sha1    -aes-256-cfb              -aes-256-cfb1
 -aes-256-cfb8             -aes-256-ctr              -aes-256-ecb
 -aes-256-gcm              -aes-256-ofb              -aes-256-xts
 -aes128                   -aes192                   -aes256
 -bf                       -bf-cbc                   -bf-cfb
 -bf-ecb                   -bf-ofb                   -blowfish
 -camellia-128-cbc         -camellia-128-cfb         -camellia-128-cfb1
 -camellia-128-cfb8        -camellia-128-ecb         -camellia-128-ofb
 -camellia-192-cbc         -camellia-192-cfb         -camellia-192-cfb1
 -camellia-192-cfb8        -camellia-192-ecb         -camellia-192-ofb
 -camellia-256-cbc         -camellia-256-cfb         -camellia-256-cfb1
 -camellia-256-cfb8        -camellia-256-ecb         -camellia-256-ofb
 -camellia128              -camellia192              -camellia256
 -cast                     -cast-cbc                 -cast5-cbc
 -cast5-cfb                -cast5-ecb                -cast5-ofb
 -chacha                   -des                      -des-cbc
 -des-cfb                  -des-cfb1                 -des-cfb8
 -des-ecb                  -des-ede                  -des-ede-cbc
 -des-ede-cfb              -des-ede-ofb              -des-ede3
 -des-ede3-cbc             -des-ede3-cfb             -des-ede3-cfb1
 -des-ede3-cfb8            -des-ede3-ofb             -des-ofb
 -des3                     -desx                     -desx-cbc
 -gost89                   -gost89-cnt               -gost89-ecb
 -id-aes128-GCM            -id-aes192-GCM            -id-aes256-GCM
 -rc2                      -rc2-40-cbc               -rc2-64-cbc
 -rc2-cbc                  -rc2-cfb                  -rc2-ecb
 -rc2-ofb                  -rc4                      -rc4-40
 -rc4-hmac-md5

示例:从私钥生成公钥:

openssl rsa -in privateKey.pem -out publicKey.pem -pubout

提示输入私钥的密码:

Enter pass phrase for privateKey.pem: 123456
writing RSA key

公钥文件publicKey.pem:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoYkhLaIz5Eixe4bi0cPS9GPCI
iwc59acJGdhq6M/iYjDiEDQYSgosOV3FVwMtyc1mY8EDqD4JCBPtDJEmR3vfrXoM
j/+Xf03QaKV8hSiCaP+pZXz6RaRazfiu+tUXH+eYGkUmVKDGdWGx10q63AgyFyEs
YugwuCkOBbc8vA8BAwIDAQAB
-----END PUBLIC KEY-----

示例:打印公钥信息

openssl rsa -pubin -in publicKey.pem -text -modulus
Public-Key: (1024 bit)
Modulus:
    00:a8:62:48:4b:68:8c:f9:12:2c:5e:e1:b8:b4:70:
    f4:bd:18:f0:88:8b:07:39:f5:a7:09:19:d8:6a:e8:
    cf:e2:62:30:e2:10:34:18:4a:0a:2c:39:5d:c5:57:
    03:2d:c9:cd:66:63:c1:03:a8:3e:09:08:13:ed:0c:
    91:26:47:7b:df:ad:7a:0c:8f:ff:97:7f:4d:d0:68:
    a5:7c:85:28:82:68:ff:a9:65:7c:fa:45:a4:5a:cd:
    f8:ae:fa:d5:17:1f:e7:98:1a:45:26:54:a0:c6:75:
    61:b1:d7:4a:ba:dc:08:32:17:21:2c:62:e8:30:b8:
    29:0e:05:b7:3c:bc:0f:01:03
Exponent: 65537 (0x10001)
Modulus=A862484B688CF9122C5EE1B8B470F4BD18F0888B0739F5A70919D86AE8CFE26230E21034184A0A2C395DC557032DC9CD6663C103A83E090813ED0C9126477BDFAD7A0C8FFF977F4DD068A57C85288268FFA9657CFA45A45ACDF8AEFAD5171FE7981A452654A0C67561B1D74ABADC083217212C62E830B8290E05B73CBC0F0103
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCoYkhLaIz5Eixe4bi0cPS9GPCI
iwc59acJGdhq6M/iYjDiEDQYSgosOV3FVwMtyc1mY8EDqD4JCBPtDJEmR3vfrXoM
j/+Xf03QaKV8hSiCaP+pZXz6RaRazfiu+tUXH+eYGkUmVKDGdWGx10q63AgyFyEs
YugwuCkOBbc8vA8BAwIDAQAB
-----END PUBLIC KEY-----

示例:将pem格式密钥文件转换为der格式

openssl rsa -in prikey.pem -outform der -out prikey.der
Enter pass phrase for prikey.pem:
writing RSA key

示例:显示私钥信息,保护密钥写在pwd.txt中

openssl rsa -in privateKey.pem -passin file:pwd.txt
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCoYkhLaIz5Eixe4bi0cPS9GPCIiwc59acJGdhq6M/iYjDiEDQY
SgosOV3FVwMtyc1mY8EDqD4JCBPtDJEmR3vfrXoMj/+Xf03QaKV8hSiCaP+pZXz6
RaRazfiu+tUXH+eYGkUmVKDGdWGx10q63AgyFyEsYugwuCkOBbc8vA8BAwIDAQAB
AoGBAJuxtNM1KxSqvyhEYntF7qZixxYaJ2ZqRDbgFQJVntLepACDpwfGfj2CFbiA
ykmuTSQdnLz69dF4DKSleBkDA//A+seSi9FCdDK2fP9OVNASN1SptGeP6gx0zX8S
518GP+YoTTmvWQbgTzDpg9uwebHRWoTbhBuv08mJv2F2I1iRAkEA0U5iCZvoksDv
QAilFHutdW72t45dCdOrV5+AVC2YuoVO5ULqQAABK5k1j1IUnH6WJr1+/gWAN1xo
wr70yNflRwJBAM3yzRoD2qn7YXSn76ZTmVR/AHUqltPvUgLqqOZRCL5blYbzcLmC
eJ1/LPuuTxXrdQsUJz0ern4UvHTXVTNIFGUCQQDHTbES30/d9jObsN+omoA4c3og
nUJAqjrcy/fBsE1fRrMyob43RQnYPyJ+H7Wasvs9VnIHZquJi8gBsR2b5eDfAkEA
ye6vAjoTNiZAWUSsqzY/GmVoinmW5/k5PZjewO1lmFhuVaLuvUZbg3oGHkS8UK7M
1W8ORlSGHSOx4RKd/KlJLQJAAxUMuOhtk7Rkkw4agOEy//XmJFndIXHCbzltbffh
9dANmwk9I96rQybO6F0o7+yv95K7FBPYcsIw3Jyuxl10FA==
-----END RSA PRIVATE KEY-----

12、dsaparam(生成和操作DSA参数)

dsaparam命令用于生成和操作dsa参数。

语法:

openssl dsaparam [-C] [-genkey] [-in file] [-inform format] [-noout] [-out file] [-outform format] [-text] [numbits]

可用选项:

-C                 将DSA参数转换为C语言格式打印
-genkey            生成DSA密钥
-in file           输入文件名,默认标准输入
-inform format     输入格式(DER or PEM (default))
-noout             不打印输出信息
-out file          输出文件,默认标准输出
-outform format    输出格式(DER or PEM (default))
-text              打印内容
-number			   密钥长度

示例:生成密钥参数:

openssl dsaparam -genkey 512 -out dsa.pem

示例:打印密钥信息:

openssl dsaparam -in dsa.pem -text
    P:
        00:df:20:1b:3b:e7:f8:22:e6:5c:82:f5:56:22:5b:
        95:e3:23:1c:40:a7:36:55:13:b6:e2:9f:0a:6b:0b:
        b7:79:67:fe:bf:bf:a8:15:10:6c:55:4b:bf:b2:42:
        ce:62:06:6d:87:ed:a7:5b:14:63:16:fc:55:4d:51:
        3a:88:fe:90:99
    Q:
        00:b3:da:0c:0b:ae:b4:dc:c1:ab:87:3b:61:46:91:
        bb:ff:a0:59:47:69
    G:
        2e:71:67:7b:47:0c:9e:f3:51:f2:8c:c4:66:9c:f7:
        f4:14:2f:ac:0a:d8:65:e7:26:6e:50:e7:d0:83:92:
        fa:0d:93:c5:27:45:d1:96:3f:66:49:33:2d:4f:d7:
        03:65:8e:77:7a:1f:90:42:66:c2:37:ca:36:e7:bb:
        59:38:6a:45
-----BEGIN DSA PARAMETERS-----
MIGcAkEA3yAbO+f4IuZcgvVWIluV4yMcQKc2VRO24p8Kawu3eWf+v7+oFRBsVUu/
skLOYgZth+2nWxRjFvxVTVE6iP6QmQIVALPaDAuutNzBq4c7YUaRu/+gWUdpAkAu
cWd7Rwye81HyjMRmnPf0FC+sCthl5yZuUOfQg5L6DZPFJ0XRlj9mSTMtT9cDZY53
eh+QQmbCN8o257tZOGpF
-----END DSA PARAMETERS-----

示例:打印C语言格式密钥参数信息

openssl dsaparam -in dsa.pem -C

13、gendsa(生成DSA密钥)

gendsa根据DSA密钥参数生成DSA密钥,dsa密钥参数可用dsaparam命令生成。

语法:

gendsa [args] dsaparam-file

可用选项:

-out file                                   将密钥输出到文件file
-des                                        在cbc模式下使用DES加密生成的密钥
-des3                                       在cbc模式下使用DES3加密生成的密钥(168 bit key)
-aes128, -aes192, -aes256                   在cbc模式下使用aes加密生成的密钥,输出PEM格式
-camellia128, -camellia192, -camellia256    在cbc模式下使用camellia加密生成的密钥,输出PEM格式
dsaparam-file                               dsa参数文件,通过dsaparam命令生成

示例:使用des算法生成DSA密钥:
生成DSA参数:

openssl dsaparam -genkey 512 -out dsa.pem

生成DSA密钥:

openssl gendsa -des -out encdsa.pem dsa.pem

会提示输入密码:

Generating DSA key, 512 bits
Enter PEM pass phrase: 123456
Verifying - Enter PEM pass phrase: 123456

14、dsa(处理DSA密钥工具)

dsa命令用于处理DSA密钥、格式转换和打印信息。

语法:

openssl dsa [-in file] [-inform format] [-noout] [-out file] [-outform format] [-passin src] [-passout src] [-pubin] [-pubout] [-pvk-none | -pvk-strong | -pvk-weak] [-text] [-ciphername]

可用选项:

-in file           输入文件,默认标准输入
-inform format     输入格式(PEM (default) or any other supported format)
-noout             不打印任何信息
-out file          输出文件,默认标准输出
-outform format    输出格式(DER, MSBLOB, PEM (default) or PVK)
-passin source     输入保护密钥来源,比如:-passin file:pwd.txt
-passout source    输出保护密钥来源,比如:-passout file:pwd.txt
-pubin             表明输入文件为公钥,默认的输入文件是私钥
-pubout            表明输出文件为公钥,默认的输出文件是私钥
-pvk-none          PVK加密级别none
-pvk-strong        PVK加密级别strong(default)
-pvk-weak          PVK加密级别weak
-text              除了编码外,还以纯文本打印密钥信息

支持的算法:

 -aes-128-cbc              -aes-128-cbc-hmac-sha1    -aes-128-cfb
 -aes-128-cfb1             -aes-128-cfb8             -aes-128-ctr
 -aes-128-ecb              -aes-128-gcm              -aes-128-ofb
 -aes-128-xts              -aes-192-cbc              -aes-192-cfb
 -aes-192-cfb1             -aes-192-cfb8             -aes-192-ctr
 -aes-192-ecb              -aes-192-gcm              -aes-192-ofb
 -aes-256-cbc              -aes-256-cbc-hmac-sha1    -aes-256-cfb
 -aes-256-cfb1             -aes-256-cfb8             -aes-256-ctr
 -aes-256-ecb              -aes-256-gcm              -aes-256-ofb
 -aes-256-xts              -aes128                   -aes192
 -aes256                   -bf                       -bf-cbc
 -bf-cfb                   -bf-ecb                   -bf-ofb
 -blowfish                 -camellia-128-cbc         -camellia-128-cfb
 -camellia-128-cfb1        -camellia-128-cfb8        -camellia-128-ecb
 -camellia-128-ofb         -camellia-192-cbc         -camellia-192-cfb
 -camellia-192-cfb1        -camellia-192-cfb8        -camellia-192-ecb
 -camellia-192-ofb         -camellia-256-cbc         -camellia-256-cfb
 -camellia-256-cfb1        -camellia-256-cfb8        -camellia-256-ecb
 -camellia-256-ofb         -camellia128              -camellia192
 -camellia256              -cast                     -cast-cbc
 -cast5-cbc                -cast5-cfb                -cast5-ecb
 -cast5-ofb                -chacha                   -des
 -des-cbc                  -des-cfb                  -des-cfb1
 -des-cfb8                 -des-ecb                  -des-ede
 -des-ede-cbc              -des-ede-cfb              -des-ede-ofb
 -des-ede3                 -des-ede3-cbc             -des-ede3-cfb
 -des-ede3-cfb1            -des-ede3-cfb8            -des-ede3-ofb
 -des-ofb                  -des3                     -desx
 -desx-cbc                 -gost89                   -gost89-cnt
 -gost89-ecb               -id-aes128-GCM            -id-aes192-GCM
 -id-aes256-GCM            -rc2                      -rc2-40-cbc
 -rc2-64-cbc               -rc2-cbc                  -rc2-cfb
 -rc2-ecb                  -rc2-ofb                  -rc4
 -rc4-40                   -rc4-hmac-md5

示例:从DSA私钥生成公钥:
生成dsa参数:

openssl dsaparam -out dsaparam.pem 1024

生成dsa私钥(未加密):

openssl gendsa -out dsaPriKey.pem dsaparam.pem

生成公钥:

openssl dsa -in dsaPriKey.pem -out dsaPubKey.pem -pubout

公钥文件dsaPubKey.pem:

-----BEGIN PUBLIC KEY-----
MIIBtjCCASsGByqGSM44BAEwggEeAoGBAN7x+873esYPa7kkgQzhvYGX+KJ0bImq
wIAyRF1DCfLwgCoQKU+mFYNA/TyC+9ZNvhAvrQywyg8BnRT5/j7UQ9mMhuASz3Rb
dtUcyMoMCbfVYqbBexOjvG228jauwD3B13QVDosqUlSoVlLA52cxmShBe4QEjlLZ
psvORheRpE5XAhUA8zpcWHI65G/D+1Ex6TVh6UE3lCUCgYAzjbiDfGQwPJFo+BS0
Ot7nQtxYVErj/Ynybg+A716a5D5RSP35m6i8lPD/YW+lp0Ppyv8aLDX746c59WW1
uj8oUdC8vlWlFwLx3ShMjdJEz6SN9rTsU5r0FN1oYFy4+aUbh/sjWhAYbjHwOUV+
gCpImB6ifFV+16Bm9GFfvT87jgOBhAACgYBEmjqVDvKkWZvV3bXRi2lmFLfx+VBy
dgdcposp3qEJYk1WDT0QkbUl5cOB/T8aewDBG2Cm5SoHG+q+ULJBjc8gKplEQZwD
Wnn2JLxH2r7YnM1c/EVRpNv0oVftLBce1uTnWse+lqlCJWdpdHYnSrm4wgylqEMz
3dsBWtRuM73mBQ==
-----END PUBLIC KEY-----

示例:打印公钥信息

openssl dsa -pubin -in dsaPubKey.pem -text
read DSA key
pub:
    44:9a:3a:95:0e:f2:a4:59:9b:d5:dd:b5:d1:8b:69:
    66:14:b7:f1:f9:50:72:76:07:5c:a6:8b:29:de:a1:
    09:62:4d:56:0d:3d:10:91:b5:25:e5:c3:81:fd:3f:
    1a:7b:00:c1:1b:60:a6:e5:2a:07:1b:ea:be:50:b2:
    41:8d:cf:20:2a:99:44:41:9c:03:5a:79:f6:24:bc:
    47:da:be:d8:9c:cd:5c:fc:45:51:a4:db:f4:a1:57:
    ed:2c:17:1e:d6:e4:e7:5a:c7:be:96:a9:42:25:67:
    69:74:76:27:4a:b9:b8:c2:0c:a5:a8:43:33:dd:db:
    01:5a:d4:6e:33:bd:e6:05
P:
    00:de:f1:fb:ce:f7:7a:c6:0f:6b:b9:24:81:0c:e1:
    bd:81:97:f8:a2:74:6c:89:aa:c0:80:32:44:5d:43:
    09:f2:f0:80:2a:10:29:4f:a6:15:83:40:fd:3c:82:
    fb:d6:4d:be:10:2f:ad:0c:b0:ca:0f:01:9d:14:f9:
    fe:3e:d4:43:d9:8c:86:e0:12:cf:74:5b:76:d5:1c:
    c8:ca:0c:09:b7:d5:62:a6:c1:7b:13:a3:bc:6d:b6:
    f2:36:ae:c0:3d:c1:d7:74:15:0e:8b:2a:52:54:a8:
    56:52:c0:e7:67:31:99:28:41:7b:84:04:8e:52:d9:
    a6:cb:ce:46:17:91:a4:4e:57
Q:
    00:f3:3a:5c:58:72:3a:e4:6f:c3:fb:51:31:e9:35:
    61:e9:41:37:94:25
G:
    33:8d:b8:83:7c:64:30:3c:91:68:f8:14:b4:3a:de:
    e7:42:dc:58:54:4a:e3:fd:89:f2:6e:0f:80:ef:5e:
    9a:e4:3e:51:48:fd:f9:9b:a8:bc:94:f0:ff:61:6f:
    a5:a7:43:e9:ca:ff:1a:2c:35:fb:e3:a7:39:f5:65:
    b5:ba:3f:28:51:d0:bc:be:55:a5:17:02:f1:dd:28:
    4c:8d:d2:44:cf:a4:8d:f6:b4:ec:53:9a:f4:14:dd:
    68:60:5c:b8:f9:a5:1b:87:fb:23:5a:10:18:6e:31:
    f0:39:45:7e:80:2a:48:98:1e:a2:7c:55:7e:d7:a0:
    66:f4:61:5f:bd:3f:3b:8e
writing DSA key
-----BEGIN PUBLIC KEY-----
MIIBtjCCASsGByqGSM44BAEwggEeAoGBAN7x+873esYPa7kkgQzhvYGX+KJ0bImq
wIAyRF1DCfLwgCoQKU+mFYNA/TyC+9ZNvhAvrQywyg8BnRT5/j7UQ9mMhuASz3Rb
dtUcyMoMCbfVYqbBexOjvG228jauwD3B13QVDosqUlSoVlLA52cxmShBe4QEjlLZ
psvORheRpE5XAhUA8zpcWHI65G/D+1Ex6TVh6UE3lCUCgYAzjbiDfGQwPJFo+BS0
Ot7nQtxYVErj/Ynybg+A716a5D5RSP35m6i8lPD/YW+lp0Ppyv8aLDX746c59WW1
uj8oUdC8vlWlFwLx3ShMjdJEz6SN9rTsU5r0FN1oYFy4+aUbh/sjWhAYbjHwOUV+
gCpImB6ifFV+16Bm9GFfvT87jgOBhAACgYBEmjqVDvKkWZvV3bXRi2lmFLfx+VBy
dgdcposp3qEJYk1WDT0QkbUl5cOB/T8aewDBG2Cm5SoHG+q+ULJBjc8gKplEQZwD
Wnn2JLxH2r7YnM1c/EVRpNv0oVftLBce1uTnWse+lqlCJWdpdHYnSrm4wgylqEMz
3dsBWtRuM73mBQ==
-----END PUBLIC KEY-----

示例:将pem格式密钥文件转换为der格式

openssl dsa -in dsaPriKey.pem -outform der -out dsaPriKey.der
read DSA key
writing DSA key

示例:显示私钥信息,保护密钥写在pwd.txt中
生成dsa参数:

openssl dsaparam -out dsaparam.pem 1024

生成dsa私钥(des加密,密码123456):

openssl gendsa -des -out encDsaPriKey.pem dsaparam.pem

显示私钥信息

openssl dsa -in encDsaPriKey.pem -passin file:pwd.txt
read DSA key
writing DSA key
-----BEGIN DSA PRIVATE KEY-----
MIIBuwIBAAKBgQDe8fvO93rGD2u5JIEM4b2Bl/iidGyJqsCAMkRdQwny8IAqEClP
phWDQP08gvvWTb4QL60MsMoPAZ0U+f4+1EPZjIbgEs90W3bVHMjKDAm31WKmwXsT
o7xttvI2rsA9wdd0FQ6LKlJUqFZSwOdnMZkoQXuEBI5S2abLzkYXkaROVwIVAPM6
XFhyOuRvw/tRMek1YelBN5QlAoGAM424g3xkMDyRaPgUtDre50LcWFRK4/2J8m4P
gO9emuQ+UUj9+ZuovJTw/2FvpadD6cr/Giw1++OnOfVltbo/KFHQvL5VpRcC8d0o
TI3SRM+kjfa07FOa9BTdaGBcuPmlG4f7I1oQGG4x8DlFfoAqSJgeonxVftegZvRh
X70/O44CgYAFW1WJYaRaD0eWF5jGrEIOA1cPs+nBPpvmkQkS906ziqMk1SPS50HX
om/tWu7E3lzScNsmFlrURqdUoZHL/aHiVyFTDUXE/EeZbqGUl77xr7GuFjKxpugq
pleGqqhI0DNBHSKzsSB4rwpb0UrFgzJGHPaVH9JsVgBVTXQ01SbsRwIVAOIBChSf
iPUPx1YIp9wkNbDRMcfk
-----END DSA PRIVATE KEY-----

16、prime(素数检测/生成)

检查一个数是否为素数。

语法:

openssl prime [-bits n] [-checks n] [-generate] [-hex] [-safe] p

可用选项:

-bits n            生成的素数的位数
-checks n          Miller-Rabin概率素性检验迭代
-generate          生成伪随机素数
-hex               十六进制素数
-safe              仅生成“安全”素数

示例:素数检测

openssl prime 11
11 is prime

示例:生成一个36位的素数

openssl prime -generate -bits 36
67666842029

17、ecparam(椭圆曲线密钥参数工具)

椭圆曲线密钥参数生成及操作。

语法:

openssl ecparam [-C] [-check] [-conv_form arg]  [-genkey] [-in file] [-inform DER | PEM] [-list_curves] [-name arg] [-no_seed] [-noout] [-out file] [-outform DER | PEM] [-param_enc arg] [-text]

可用选项:

-C                 将EC参数转换为C语言格式打印
-check             验证椭圆曲线参数
-conv_form form    指定点转换形式:compressed, uncompressed (default), hybrid
-genkey            使用指定的参数生成EC私钥
-in file           要从中读取参数的输入文件(默认stdin)
-inform format     输入格式(DER or PEM)
-list_curves       打印当前执行的所有EC参数名称的列表
-name curve        使用具有指定名称的EC参数
-no_seed           不使用显式参数编码输出种子
-noout             不输出EC参数的编码版本
-out file          将参数写入的输出文件(默认stdout)
-outform format    输出格式(DER or PEM)
-param_enc type    指定EC参数ASN.1编码类型:explicit, named_curve (default)
-text              以人类可读的形式打印出EC参数

示例:查看所有EC参数

openssl ecparam -list_curves
  secp112r1 : SECG/WTLS curve over a 112 bit prime field
  secp112r2 : SECG curve over a 112 bit prime field
  secp128r1 : SECG curve over a 128 bit prime field
  secp128r2 : SECG curve over a 128 bit prime field
  secp160k1 : SECG curve over a 160 bit prime field
  secp160r1 : SECG curve over a 160 bit prime field
  secp160r2 : SECG/WTLS curve over a 160 bit prime field
  secp192k1 : SECG curve over a 192 bit prime field
  secp224k1 : SECG curve over a 224 bit prime field
  secp224r1 : NIST/SECG curve over a 224 bit prime field
  secp256k1 : SECG curve over a 256 bit prime field
  secp384r1 : NIST/SECG curve over a 384 bit prime field
  secp521r1 : NIST/SECG curve over a 521 bit prime field
  prime192v1: NIST/X9.62/SECG curve over a 192 bit prime field
  prime192v2: X9.62 curve over a 192 bit prime field
  prime192v3: X9.62 curve over a 192 bit prime field
  prime239v1: X9.62 curve over a 239 bit prime field
  prime239v2: X9.62 curve over a 239 bit prime field
  prime239v3: X9.62 curve over a 239 bit prime field
  prime256v1: X9.62/SECG curve over a 256 bit prime field
  sect113r1 : SECG curve over a 113 bit binary field
  sect113r2 : SECG curve over a 113 bit binary field
  sect131r1 : SECG/WTLS curve over a 131 bit binary field
  sect131r2 : SECG curve over a 131 bit binary field
  sect163k1 : NIST/SECG/WTLS curve over a 163 bit binary field
  sect163r1 : SECG curve over a 163 bit binary field
  sect163r2 : NIST/SECG curve over a 163 bit binary field
  sect193r1 : SECG curve over a 193 bit binary field
  sect193r2 : SECG curve over a 193 bit binary field
  sect233k1 : NIST/SECG/WTLS curve over a 233 bit binary field
  sect233r1 : NIST/SECG/WTLS curve over a 233 bit binary field
  sect239k1 : SECG curve over a 239 bit binary field
  sect283k1 : NIST/SECG curve over a 283 bit binary field
  sect283r1 : NIST/SECG curve over a 283 bit binary field
  sect409k1 : NIST/SECG curve over a 409 bit binary field
  sect409r1 : NIST/SECG curve over a 409 bit binary field
  sect571k1 : NIST/SECG curve over a 571 bit binary field
  sect571r1 : NIST/SECG curve over a 571 bit binary field
  c2pnb163v1: X9.62 curve over a 163 bit binary field
  c2pnb163v2: X9.62 curve over a 163 bit binary field
  c2pnb163v3: X9.62 curve over a 163 bit binary field
  c2pnb176v1: X9.62 curve over a 176 bit binary field
  c2tnb191v1: X9.62 curve over a 191 bit binary field
  c2tnb191v2: X9.62 curve over a 191 bit binary field
  c2tnb191v3: X9.62 curve over a 191 bit binary field
  c2pnb208w1: X9.62 curve over a 208 bit binary field
  c2tnb239v1: X9.62 curve over a 239 bit binary field
  c2tnb239v2: X9.62 curve over a 239 bit binary field
  c2tnb239v3: X9.62 curve over a 239 bit binary field
  c2pnb272w1: X9.62 curve over a 272 bit binary field
  c2pnb304w1: X9.62 curve over a 304 bit binary field
  c2tnb359v1: X9.62 curve over a 359 bit binary field
  c2pnb368w1: X9.62 curve over a 368 bit binary field
  c2tnb431r1: X9.62 curve over a 431 bit binary field
  wap-wsg-idm-ecid-wtls1: WTLS curve over a 113 bit binary field
  wap-wsg-idm-ecid-wtls3: NIST/SECG/WTLS curve over a 163 bit binary field
  wap-wsg-idm-ecid-wtls4: SECG curve over a 113 bit binary field
  wap-wsg-idm-ecid-wtls5: X9.62 curve over a 163 bit binary field
  wap-wsg-idm-ecid-wtls6: SECG/WTLS curve over a 112 bit prime field
  wap-wsg-idm-ecid-wtls7: SECG/WTLS curve over a 160 bit prime field
  wap-wsg-idm-ecid-wtls8: WTLS curve over a 112 bit prime field
  wap-wsg-idm-ecid-wtls9: WTLS curve over a 160 bit prime field
  wap-wsg-idm-ecid-wtls10: NIST/SECG/WTLS curve over a 233 bit binary field
  wap-wsg-idm-ecid-wtls11: NIST/SECG/WTLS curve over a 233 bit binary field
  wap-wsg-idm-ecid-wtls12: WTLS curve over a 224 bit prime field
  Oakley-EC2N-3:
	IPSec/IKE/Oakley curve #3 over a 155 bit binary field.
	Not suitable for ECDSA.
	Questionable extension field!
  Oakley-EC2N-4:
	IPSec/IKE/Oakley curve #4 over a 185 bit binary field.
	Not suitable for ECDSA.
	Questionable extension field!
  brainpoolP160r1: RFC 5639 curve over a 160 bit prime field
  brainpoolP160t1: RFC 5639 curve over a 160 bit prime field
  brainpoolP192r1: RFC 5639 curve over a 192 bit prime field
  brainpoolP192t1: RFC 5639 curve over a 192 bit prime field
  brainpoolP224r1: RFC 5639 curve over a 224 bit prime field
  brainpoolP224t1: RFC 5639 curve over a 224 bit prime field
  brainpoolP256r1: RFC 5639 curve over a 256 bit prime field
  brainpoolP256t1: RFC 5639 curve over a 256 bit prime field
  brainpoolP320r1: RFC 5639 curve over a 320 bit prime field
  brainpoolP320t1: RFC 5639 curve over a 320 bit prime field
  brainpoolP384r1: RFC 5639 curve over a 384 bit prime field
  brainpoolP384t1: RFC 5639 curve over a 384 bit prime field
  brainpoolP512r1: RFC 5639 curve over a 512 bit prime field
  brainpoolP512t1: RFC 5639 curve over a 512 bit prime field
  FRP256v1  : FRP256v1
  id-GostR3410-2001-TestParamSet: GOST R 34.10-2001 Test Curve
  id-GostR3410-2001-CryptoPro-A-ParamSet: GOST R 34.10-2001 CryptoPro-A
  id-GostR3410-2001-CryptoPro-B-ParamSet: GOST R 34.10-2001 CryptoPro-B
  id-GostR3410-2001-CryptoPro-C-ParamSet: GOST R 34.10-2001 CryptoPro-C
  id-GostR3410-2001-CryptoPro-XchA-ParamSet: GOST R 34.10-2001 CryptoPro-XchA
  id-GostR3410-2001-CryptoPro-XchB-ParamSet: GOST R 34.10-2001 CryptoPro-XchB
  id-tc26-gost-3410-2012-512-paramSetA: GOST R 34.10-2012 TC26-A
  id-tc26-gost-3410-2012-512-paramSetB: GOST R 34.10-2012 TC26-B

示例:使用指定参数生成EC私钥

openssl ecparam -genkey -name prime256v1 -out ecPrivateKey.pem

私钥文件内容为:

-----BEGIN EC PARAMETERS-----
BggqhkjOPQMBBw==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEINBd0W2V3HjWP7usikTxuAOlRyZXxjHS7M0GdSPDgzrAoAoGCCqGSM49
AwEHoUQDQgAEvZn/ZEAsntqVunI0RJz6RZxdzitbUOotxTVbYMGx+wTU+e2bP4og
TMBwj00DV4vVpzNjIe681uNuH7ZZGx2QhA==
-----END EC PRIVATE KEY-----

18、ec(椭圆曲线密钥工具)

椭圆曲线密钥处理工具。

语法:

openssl ec [-conv_form form] [-in file] [-inform format] [-noout] [-out file] [-outform format] [-param_enc type] [-param_out] [-passin file] [-passout file] [-pubin] [-pubout] [-text] [-ciphername]

可用选项:

-conv_form form    指定点转换形式(default "named_curve")
-in file           输入文件,默认标准输入
-inform format     输入格式(DER or PEM (default))
-noout             不输出
-out file          输出文件,默认标准输出
-outform format    输出格式(DER or PEM (default))
-param_enc type    指定ec参数的编码方式(default "uncompressed")
-param_out         打印椭圆曲线参数
-passin source     输入保护密钥来源,比如:-passin file:pwd.txt
-passout source    输出保护密钥来源,比如:-passout file:pwd.txt
-pubin             表明输入文件为公钥,默认的输入文件是私钥
-pubout            表明输出文件为公钥,默认的输出文件是私钥
-text              打印公钥/私钥组件和参数

支持的算法:

 -aes-128-cbc              -aes-128-cbc-hmac-sha1    -aes-128-cfb
 -aes-128-cfb1             -aes-128-cfb8             -aes-128-ctr
 -aes-128-ecb              -aes-128-gcm              -aes-128-ofb
 -aes-128-xts              -aes-192-cbc              -aes-192-cfb
 -aes-192-cfb1             -aes-192-cfb8             -aes-192-ctr
 -aes-192-ecb              -aes-192-gcm              -aes-192-ofb
 -aes-256-cbc              -aes-256-cbc-hmac-sha1    -aes-256-cfb
 -aes-256-cfb1             -aes-256-cfb8             -aes-256-ctr
 -aes-256-ecb              -aes-256-gcm              -aes-256-ofb
 -aes-256-xts              -aes128                   -aes192
 -aes256                   -bf                       -bf-cbc
 -bf-cfb                   -bf-ecb                   -bf-ofb
 -blowfish                 -camellia-128-cbc         -camellia-128-cfb
 -camellia-128-cfb1        -camellia-128-cfb8        -camellia-128-ecb
 -camellia-128-ofb         -camellia-192-cbc         -camellia-192-cfb
 -camellia-192-cfb1        -camellia-192-cfb8        -camellia-192-ecb
 -camellia-192-ofb         -camellia-256-cbc         -camellia-256-cfb
 -camellia-256-cfb1        -camellia-256-cfb8        -camellia-256-ecb
 -camellia-256-ofb         -camellia128              -camellia192
 -camellia256              -cast                     -cast-cbc
 -cast5-cbc                -cast5-cfb                -cast5-ecb
 -cast5-ofb                -chacha                   -des
 -des-cbc                  -des-cfb                  -des-cfb1
 -des-cfb8                 -des-ecb                  -des-ede
 -des-ede-cbc              -des-ede-cfb              -des-ede-ofb
 -des-ede3                 -des-ede3-cbc             -des-ede3-cfb
 -des-ede3-cfb1            -des-ede3-cfb8            -des-ede3-ofb
 -des-ofb                  -des3                     -desx
 -desx-cbc                 -gost89                   -gost89-cnt
 -gost89-ecb               -id-aes128-GCM            -id-aes192-GCM
 -id-aes256-GCM            -rc2                      -rc2-40-cbc
 -rc2-64-cbc               -rc2-cbc                  -rc2-cfb
 -rc2-ecb                  -rc2-ofb                  -rc4
 -rc4-40                   -rc4-hmac-md5

示例:生成ec私钥

openssl ecparam -genkey -name secp112r1 -out eckey.pem -text
ASN1 OID: secp112r1
-----BEGIN EC PARAMETERS-----
BgUrgQQABg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MD4CAQEEDrZkkCw2L5RzQZECpShRoAcGBSuBBAAGoSADHgAEfrhrhjG3QVsq7Xd9
IYJ7nTGeVhz6JEjQNq2XjQ==
-----END EC PRIVATE KEY-----

示例:转换为DER编码

openssl ec -outform der -in eckey.pem -out eckey.der

示例:给私钥进行口令保护

openssl ec -in eckey.pem -des -out enceckey.pem
read EC key
writing EC key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

示例:给口令保护的私钥进行脱密:

openssl ec -in enceckey.pem -passin pass:123456 -out enckey.unpass
-----BEGIN EC PRIVATE KEY-----
MD4CAQEEDrZkkCw2L5RzQZECpShRoAcGBSuBBAAGoSADHgAEfrhrhjG3QVsq7Xd9
IYJ7nTGeVhz6JEjQNq2XjQ==
-----END EC PRIVATE KEY-----

示例:根据私钥生成公钥

openssl ec -in eckey.pem -pubout -out ecpubkey.pem
-----BEGIN PUBLIC KEY-----
MDIwEAYHKoZIzj0CAQYFK4EEAAYDHgAEfrhrhjG3QVsq7Xd9IYJ7nTGeVhz6JEjQ
Nq2XjQ==
-----END PUBLIC KEY-----

示例:显示密钥信息

openssl ec -in eckey.pem -text
openssl ec -in ecpubkey.pem -pubin -text

示例:转换为PKCS8格式

openssl pkcs8 -topk8 -in eckey.pem -out eckeypk8.pem
Enter Encryption Password:123456
Verifying - Enter Encryption Password:123456
-----BEGIN ENCRYPTED PRIVATE KEY-----
MHcwGwYJKoZIhvcNAQUDMA4ECOFee8eAUNxbAgIIAARYbCTYWixuDzVOvoHPB7rW
A43AJHokGSXl5+OIhP/E1mX7MwlxPiJXeP7/FGHY7VvFd8hFip9ao//n6p7ZcEOd
su7QNsd+MVmi+wJbM9s36wuTASbAeQ7x8A==
-----END ENCRYPTED PRIVATE KEY-----

19、ciphers(显示支持的加密套件)

语法:

openssl ciphers [-hVv] [-tls1] [cipherlist]

可用选项:

-tls1              此选项已弃用,因为它是默认选项
-v                 提供者列表
-V                 提供者带有密码套件值的密码列表

示例:查看支持的加密套件

openssl ciphers -V
          0xC0,0x30 - ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
          0xC0,0x2C - ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
          0xC0,0x28 - ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
          0xC0,0x24 - ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
          0xC0,0x14 - ECDHE-RSA-AES256-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
          0xC0,0x0A - ECDHE-ECDSA-AES256-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
          0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
          0x00,0x6B - DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
          0x00,0x39 - DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
          0xCC,0xA9 - ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=ChaCha20-Poly1305 Mac=AEAD
          0xCC,0xA8 - ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH     Au=RSA  Enc=ChaCha20-Poly1305 Mac=AEAD
          0xCC,0xAA - DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH       Au=RSA  Enc=ChaCha20-Poly1305 Mac=AEAD
          0xFF,0x85 - GOST2012256-GOST89-GOST89 SSLv3 Kx=GOST     Au=GOST01 Enc=GOST-28178-89-CNT Mac=GOST89IMIT
          0x00,0xC4 - DHE-RSA-CAMELLIA256-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=Camellia(256) Mac=SHA256
          0x00,0x88 - DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(256) Mac=SHA1
          0x00,0x81 - GOST2001-GOST89-GOST89  SSLv3 Kx=GOST     Au=GOST01 Enc=GOST-28178-89-CNT Mac=GOST89IMIT
          0x00,0x9D - AES256-GCM-SHA384       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(256) Mac=AEAD
          0x00,0x3D - AES256-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA256
          0x00,0x35 - AES256-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(256)  Mac=SHA1
          0x00,0xC0 - CAMELLIA256-SHA256      TLSv1.2 Kx=RSA      Au=RSA  Enc=Camellia(256) Mac=SHA256
          0x00,0x84 - CAMELLIA256-SHA         SSLv3 Kx=RSA      Au=RSA  Enc=Camellia(256) Mac=SHA1
          0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
          0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(128) Mac=AEAD
          0xC0,0x27 - ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256
          0xC0,0x23 - ECDHE-ECDSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA256
          0xC0,0x13 - ECDHE-RSA-AES128-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
          0xC0,0x09 - ECDHE-ECDSA-AES128-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
          0x00,0x9E - DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD
          0x00,0x67 - DHE-RSA-AES128-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA256
          0x00,0x33 - DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
          0x00,0xBE - DHE-RSA-CAMELLIA128-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=Camellia(128) Mac=SHA256
          0x00,0x45 - DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(128) Mac=SHA1
          0x00,0x9C - AES128-GCM-SHA256       TLSv1.2 Kx=RSA      Au=RSA  Enc=AESGCM(128) Mac=AEAD
          0x00,0x3C - AES128-SHA256           TLSv1.2 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA256
          0x00,0x2F - AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
          0x00,0xBA - CAMELLIA128-SHA256      TLSv1.2 Kx=RSA      Au=RSA  Enc=Camellia(128) Mac=SHA256
          0x00,0x41 - CAMELLIA128-SHA         SSLv3 Kx=RSA      Au=RSA  Enc=Camellia(128) Mac=SHA1
          0xC0,0x11 - ECDHE-RSA-RC4-SHA       SSLv3 Kx=ECDH     Au=RSA  Enc=RC4(128)  Mac=SHA1
          0xC0,0x07 - ECDHE-ECDSA-RC4-SHA     SSLv3 Kx=ECDH     Au=ECDSA Enc=RC4(128)  Mac=SHA1
          0x00,0x05 - RC4-SHA                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=SHA1
          0x00,0x04 - RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5
          0xC0,0x12 - ECDHE-RSA-DES-CBC3-SHA  SSLv3 Kx=ECDH     Au=RSA  Enc=3DES(168) Mac=SHA1
          0xC0,0x08 - ECDHE-ECDSA-DES-CBC3-SHA SSLv3 Kx=ECDH     Au=ECDSA Enc=3DES(168) Mac=SHA1
          0x00,0x16 - EDH-RSA-DES-CBC3-SHA    SSLv3 Kx=DH       Au=RSA  Enc=3DES(168) Mac=SHA1
          0x00,0x0A - DES-CBC3-SHA            SSLv3 Kx=RSA      Au=RSA  Enc=3DES(168) Mac=SHA1

20、errstr(查询错误代码)

本命令用于查询错误代码。

语法:

openssl errstr [-stats] errno ...

可用选项:

-stats             打印哈希表的调试统计信息

示例:

openssl req -config no.txt

产生如下错误:

error on line -1 of no.txt
4526816876:error:02FFF002:system library:func(4095):No such file or directory:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-47.11.1/libressl-2.8/crypto/bio/bss_file.c:122:fopen('no.txt', 'rb')
4526816876:error:20FFF080:BIO routines:CRYPTO_internal:no such file:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-47.11.1/libressl-2.8/crypto/bio/bss_file.c:125:
4526816876:error:0EFFF072:configuration file routines:CRYPTO_internal:no such file:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-47.11.1/libressl-2.8/crypto/conf/conf_def.c:198:

查询错误:

openssl errstr 02FFF002
error:02FFF002:system library:func(4095):No such file or directory

21、pkeyparam(公共密钥算法参数处理工具)

公共密钥算法的参数处理工具。它能够转换组件信息并将它们打印出来。

语法:

openssl pkeyparam [-in file] [-noout] [-out file] [-text]

可用选项:

-in file           输入文件(默认stdin)
-noout             不打印参数的编码版本
-out file          输出文件(默认stdout)
-text              以纯文本形式打印参数

该命令没有-inform或-outform选项,因为仅支持PEM格式,因为密钥类型由PEM头决定。

示例:查看dh参数文件

openssl pkeyparam -in dhparam.pem -text
-----BEGIN DH PARAMETERS-----
MIGHAoGBANIduRr6LK7aUadf8UvGcODKzKbAtzmr888IetT9myqHT5vtc1SJDVZE
SxwdnI5xfKp5sZRLjjxQfuTdlAFMc8INranOLBxTi12We/hpQp1Y+cX27+P5nXQt
UJDiOORZ1OmY7IAZUz08iRhhZjl3jpsdk1rfF3Sr+64cx/3Mzy2zAgEC
-----END DH PARAMETERS-----
PKCS#3 DH Parameters: (1024 bit)
    prime:
        00:d2:1d:b9:1a:fa:2c:ae:da:51:a7:5f:f1:4b:c6:
        70:e0:ca:cc:a6:c0:b7:39:ab:f3:cf:08:7a:d4:fd:
        9b:2a:87:4f:9b:ed:73:54:89:0d:56:44:4b:1c:1d:
        9c:8e:71:7c:aa:79:b1:94:4b:8e:3c:50:7e:e4:dd:
        94:01:4c:73:c2:0d:ad:a9:ce:2c:1c:53:8b:5d:96:
        7b:f8:69:42:9d:58:f9:c5:f6:ef:e3:f9:9d:74:2d:
        50:90:e2:38:e4:59:d4:e9:98:ec:80:19:53:3d:3c:
        89:18:61:66:39:77:8e:9b:1d:93:5a:df:17:74:ab:
        fb:ae:1c:c7:fd:cc:cf:2d:b3
    generator: 2 (0x2)

示例:查看EC参数文件

openssl pkeyparam -in eckey.pem -text
-----BEGIN EC PARAMETERS-----
BgUrgQQABg==
-----END EC PARAMETERS-----
ECDSA-Parameters: (112 bit)
ASN1 OID: secp112r1

22、genpkey(公共密钥算法私钥生成工具)

genpkey命令用于非对称加密(RSA、DSA、DH、EC等c)中密钥和参数的生成。

语法:

genpkey [-algorithm alg] [cipher] [-genparam] [-out file] [-outform der | pem] [-paramfile file] [-pass arg] [-pkeyopt opt:value] [-text]

可用选项:

-algorithm name    要使用的公钥算法(必须在-pkeyopt之前)
-cipher			   加密算法
-genparam          生成一组参数而不是私钥
-out file          输出文件(默认stdout)
-outform format    输出格式(DER or PEM)
-paramfile file    公钥算法参数的文件(必须在-pkeyopt之前)
-pass arg          输出文件密码源
-pkeyopt opt:value 将公钥算法选项设置为给定值
-text              以可读的形式打印私钥/公钥

keyyopt密钥生成选项,每个算法支持的选项以及算法的每个实现都可以有所不同,OpenSSL实现的选项如下:

  • RSA关键生成选项:
    • rsa_keygen_bits:生成的密钥中的比特数,如果未指定1024
    • rsa_keygen_pubexp:RSA公众指数值。如果前面加上0x,这可以是一个大的十进制或十六进制值。默认值为65537
  • DSA参数生成选项:
    • dsa_paramgen_bits:生成参数中的位数,如果未指定1024
  • DH参数生成选项:
    • dh_paramgen_prime_len:素数参数p的位数
    • dh_paramgen_generator:生成g所用的的值
    • dh_rfc5114:如果设置了此选项,则使用相应的RFC5114参数,而不是生成新参数。值num可以采用与RFC5114 DH参数相对应的值1,2或3,该参数包括1024位组与160位子组,2048位组与224位子组和2048位组与256位子组
  • EC参数生成选项:
    • ec_paramgen_curve:要使用的ECC曲线

示例:常规参数产生一个RSA密钥

openssl genpkey -algorithm RSA -out key.pem  

示例:用AES算法对输出的私钥文件进行加密,密码为“hello”

openssl genpkey -algorithm RSA -out key.pem -aes-128-cbc -pass pass:hello

示例:生成私钥
使用随机数长度为1024的rsa算法生成pem格式的私钥并输出到rsa_pri.key文件中,且打印私钥/公钥参数/结构的文本

openssl genpkey -algorithm RSA -out rsa_pri.pem -outform PEM -pkeyopt rsa_keygen_bits:1024 -text

示例:用公共的指数3来产生一个2048位的RSA密钥值

openssl genpkey -algorithm RSA -out key.pem -pkeyopt rsa_keygen_bits:2048 -pkeyopt rsa_keygen_pubexp:3 

23、pkey(公共密钥算法密钥处理工具)

pkey命令处理公钥或私钥。它们可以在各种形式之间进行转换,并将其结构打印出来。

语法:

openssl pkey [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-out filename] 
[-passout arg] [-cipher] [-text] [-text_pub] [-noout] [-pubin] [-pubout] [-engine id]

可用选项:

-in file        输入文件
-inform X       输入格式(DER or PEM)
-passin arg     输入文件密码源
-outform X      输出格式(DER or PEM)
-out file       输出文件
-passout arg    输出文件密码源
-cipher			输出密钥的加密方式
-pubin			默认是读入私钥,该选项指定读入公钥
-pubout			默认情况下会输出私钥:使用此选项将会输出公钥。

示例:由私钥生成公钥

openssl pkey -in rsa_pri.pem -inform PEM -out rsa_pub.pem -outform PEM -pubout 
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC/Y3zGBFXoAhwrfCEdQganGHwi
di63XsBtkLC0UnDKyl3NcfFeudjVUBCDUMPDKQ29XQD6YxEZZmrfF7W5TLS79Xkn
koky8LecLgoL+t1XGJZJ/gaQSgR6s0XfF4OcwWUBEAiqix07r8SgwDxd//TA/ogF
taiRTfGNmcvjfbm8owIDAQAB
-----END PUBLIC KEY-----

示例:私钥添加AES密码保护

openssl pkey -in rsa_pri.pem -inform PEM -out enc_rsa_pri.pem -aes-128-cbc -passout pass:123456 -outform PEM  

示例:私钥改密码

openssl pkey -in enc_rsa_pri.pem -inform PEM -passin pass:123456 -out enc_rsa_pri2.pem -aes-128-cbc -passout pass:111111 -outform PEM  

示例:改变私钥格式

openssl pkey -in enc_rsa_pri.pem -inform PEM -passin pass:123456 -out rsa_pri.der -outform DER 

示例:改变公钥格式

openssl pkey -in rsa_pub.pem -inform PEM -out rsa_pub.der -outform DER -pubin -pubout

24、pkeyutl(公共密钥算法通用工具)

pkeyutl命令可用于执行支持的公钥操作。

语法:

openssl pkeyutl [-in file] [-out file] [-sigfile file] [-inkey file] [-keyform PEM|DER] [-passin arg] [-peerkey file] [-peerform PEM|DER] [-pubin] 
[-certin] [-rev] [-sign] [-verify] [-verifyrecover] [-encrypt][-decrypt] [-derive] [-pkeyopt opt:value] [-hexdump]

可用选项:

-in file        输入文件
-out file       输出文件
-sigfile file   签名文件(仅限验证操作)
-inkey file     输入密钥文件,默认情况下应该是一个私钥
-keyform arg    私钥格式,默认PEM
-pubin          输入密钥是一个公钥,默认为私钥
-certin         输入是一个携带公钥的证书
-pkeyopt X:Y    公钥参数选项
-sign           给输入文件签名,需要私钥
-verify         根据签名文件验证输入数据,并指示验证是成功还是失败,需要公钥
-verifyrecover  使用公钥验证,恢复原始数据
-encrypt        用公钥加密
-decrypt        用私钥解密
-derive         使用对等密钥导出共享密钥
-hexdump        hex转储输出数据
-passin arg     输入密钥的口令
-peerkey file	对等密钥文件,由密钥导出(协议)操作使用
-peerform 		指定对等密钥格式为PEM,DER或ENGINE

注意:支持的操作和选项根据密钥算法及其实现而有所不同。

  • RSA算法支持encrypt,decrypt,sign,verify和verifyrecover操作
  • DSA算法仅支持sign和verify操作
  • DH算法只支持derive操作,没有附加选项
  • EC算法支持sign,verify和derive操作,sign和verify操作使用ECDSA,derive使用ECDH。

示例:私钥签名

openssl pkeyutl -sign -inkey rsa_pri.pem -keyform PEM -in a.txt -out a.sig

示例:公钥验签

openssl pkeyutl -verify -pubin -inkey rsa_pub.pem -keyform PEM -in a.txt -sigfile a.sig  

示例:公钥加密

openssl pkeyutl -encrypt -pubin -in a.txt -inkey rsa_pub.pem -out b.txt

示例:私钥解密

openssl pkeyutl -decrypt -in b.txt -inkey rsa_pri.pem -out c.txt

示例:用对方的私钥和自己的公钥获取共享密钥

openssl pkeyutl -derive -inkey dhkey2.pem -peerkey dhpub1.pem -out secret2.bin

25、rsautl(RSA算法通用工具)

sautl为RSA工具,本指令能够使用RSA算法签名,验证身份, 加密/解密数据。

语法:


可用选项:

-in file        输入文件,默认标准输入
-out file       输出文件,默认标准输出
-inkey file     输入密钥,默认应该为私钥文件
-keyform arg    私钥格式,默认PEM
-pubin          输入的是一个公钥文件,默认输入为私钥文件
-certin         输入是一个携带RSA公钥的证书
-ssl            使用SSL v2填充
-raw            不使用填充
-pkcs           使用PKCS#1.5填充,默认
-oaep           使用PKCS#1OAEP填充
-sign           使用私钥签名
-verify         使用公钥验证
-encrypt        用公钥加密
-decrypt        用私钥解密
-hexdump        十六进制转储输出
-passin arg		输入密钥口令

示例:生成RSA密钥,使用-des3加密保护

openssl genrsa -des3 -out prikey.pem
Generating RSA private key, 2048 bit long modulus
..........+++
......+++
e is 65537 (0x10001)
Enter pass phrase for prikey.pem:123456
Verifying - Enter pass phrase for prikey.pem:123456

示例:分离公钥,使用-des3加密保护

openssl rsa -in prikey.pem -passin pass:123456 -pubout -out pubkey.pem -des3 -passout pass:123456

示例:私钥签名

openssl rsautl -sign -inkey prikey.pem -passin pass:123456 -in a.txt -out a.sign

示例:公钥验签

openssl rsautl -verify -inkey pubkey.pem -pubin -passin pass:123456 -in a.sign 

验证成功默认打印原文件

hello world

示例:公钥加密

openssl rsautl -encrypt -inkey pubkey.pem -passin pass:123456 -pubin  -in a.txt -out b.txt

示例:私钥解密

openssl rsautl -decrypt -inkey prikey.pem -passin pass:123456 -in b.txt

解密成功打印原文件:

hello world

示例:用证书中的公钥加密

openssl rsautl -encrypt -certin -inkey cert1.pem -in a.txt

26、req(PKCS#10证书请求工具)

req的基本功能主要有两个:生成证书请求和生成自签名证书。其他还有一些校验、查看请求文件等功能。

语法:

openssl req
[-new] [-newkey rsa:bits] [-verify] [-x509] [-in filename] [-out filename] [-key filename] [-passin arg] [-passout arg] [-keyout filename] [-pubkey] [-nodes] [-[dgst]] [-config filename] [-subj arg] [-days n] [-set_serial n] [-extensions section] [-reqexts section] [-utf8] [-nameopt] [-reqopt] [-subject] [-subj arg] [-text] [-noout] [-batch] [-verbose]

可用选项:

-inform arg         输入格式,DER or PEM
-outform arg        输出格式,DER or PEM
-in arg             输入文件
-out arg            输出文件
-text               打印证书请求或自签名证书信息
-pubkey             输出公钥
-noout              不输出证书请求
-verify             验证REQ上的签名
-modulus            打印RSA模数
-nodes              不加密输出密钥
-subject            输出请求的subject
-passin             私钥的密码源,例如file:pwd.txt
-key file           使用文件中包含的私钥
-keyform arg        密钥文件格式
-keyout arg         要将密钥发送到的文件
-newkey rsa:bits    用于生成新的bits位的rsa密钥以及证书请求。如果用户不知道生成的私钥文件名称,默认采用privkey.pem,生成的证书请求。如果用户不指定输出文件(-out),则将证书请求文件打印在屏幕上。生成的私钥文件可以用-keyout来指定。生成过程中需要用户输入私钥的保护口令以及证书申请中的一些信息。
-newkey dsa:file    生成新的DSA密钥,参数取自“file”中的CA
-newkey ec:file     生成新的EC密钥,参数取自“file”中的CA
-[digest]           使用指定的算法进行摘要签名 (md5, sha1, md4)
-config file        指定证书请求模板文件,默认采用opensslf,需另行指定时用此选项。配置的写法可以参考opensslf,其中有关于生成证书请求的设置。
-subj arg           用于指定生成的证书请求的用户信息,或者处理证书请求时用指定参数替换。生成证书请求时,如果不指定此选项,程序会提示用户来输入各个用户信息,包括国名、组织等信息,如果采用此选择,则不需要用户输入了。比如:-subj /CN=china/OU=test/O=abc/CN=forxy,注意这里等属性必须大写。
-multivalue-rdn     当采用-subj arg选项时,允许多值rdn名,比如arg参数写作:/CN=china/OU=test/O=abc/UID=123456+CN=forxy。
-new                生成新的证书请求以及私钥,默认为1024比特。
-batch              在生成请求期间不要询问任何内容
-x509               输出一个x509结构,而不是cert.req
-days               -x509生成的证书的有效天数。
-set_serial         用于-x509生成的证书的序列号。
-newhdr             在生成的PME证书请求文件的头尾添加“NEW”,有些软件和CA需要此项
-asn1-kludge        以错误的格式输出“请求”,但某些CA已被报告为需要
-extensions         指定证书扩展部分(覆盖配置文件中的值)
-reqexts            指定请求扩展名部分(覆盖配置文件中的值)
-utf8               输入字符为UTF8(默认ASCII)
-nameopt arg        各种证书名称选项
-reqopt arg         各种请求文本选项

使用说明:

  • new/x509:当使用-new选取的时候,说明是要生成证书请求,当使用x509选项的时候,说明是要生成自签名证书。
  • key/newkey/keyout:key和newkey是互斥的,key是指定已有的密钥文件,而newkey是指在生成证书请求或者自签名证书的时候自动生成密钥,然后生成的密钥名称有keyout参数指定。当指定newkey选项时,后面指定rsa:bits说明产生rsa密钥,位数由bits指定。指定dsa:file说明产生dsa密钥,file是指生成dsa密钥的参数文件(由dsaparam生成)
  • in/out/inform/outform/keyform:
    • in选项指定证书请求文件,当查看证书请求内容或者生成自签名证书的时候使用
    • out选项指定证书请求或者自签名证书文件名,或者公钥文件名(当使用pubkey选项时用到),以及其他一些输出信息
    • inform、outform、keyform分别指定了in、out、key选项指定的文件格式,默认是PEM格式。
  • config:参数文件,默认是/etc/ssl/opensslf(ubuntu12.04),根据系统不同位置不同。该文件包含生成req时的参数,当在命令行没有指定时,则采用该文件中的默认值

示例:根据已有私钥生成新的证书请求(默认sha256算法签名):

openssl genrsa -out pri_key.pem
openssl req -new -key pri_key.pem -out req.csr -subj "/C=CN/ST=BJ/L=BJ/O=acton/OU=acton/CN=acton"

示例:查看证书请求文件内容

openssl req -in req.csr
#或
cat req.csr
#或
openssl req -in req.csr -text

示例:生成证书请求时指定签名算法

openssl req -new -key pri_key.pem -out req2.csr -md5 -subj "/C=CN/ST=BJ/L=BJ/O=acton/OU=acton/CN=acton"

示例:验证请求文件的数字签名

openssl req -verify -in req.csr

示例:使用证书请求构建自签名证书

openssl req -x509 -key pri_key.pem -in req.csr -out ca.crt -days 365

示例:使用自动创建的私钥构建证书请求

openssl req -new -newkey rsa:2048 -out req3.csr -nodes -keyout auto_pri_key.pem -subj "/C=CN/ST=BJ/L=BJ/O=acton/OU=acton/CN=acton"

自动生成一个2048位的rsa私钥,输出到auto_pri_key.pem文件中,使用该私钥生成证书请求req3.csr。

27、x509(证书处理工具)

X509命令是一个多用途的证书工具。它可以显示证书信息、转换证书格式、签名证书请求以及改变证书的信任设置等。

语法:

openssl x509 [-inform DER|PEM|NET] [-outform DER|PEM|NET] [-keyform DER|PEM] [-CAform DER|PEM] [-CAkeyform DER|PEM] [-in filename] [-out filename] [-serial] [-hash] [-subject_hash] [-issuer_hash] [-subject] [-issuer] [-nameopt option] [-email] [-startdate] [-enddate] [-purpose] [-dates] [-modulus] [-fingerprint] [-alias] [-noout] [-trustout] [-clrtrust] [-clrreject] [-addtrust arg] [-addreject arg] [-setalias arg] [-days arg] [-set_serial n] [-signkey filename] [-x509toreq] [-req] [-CA filename] [-CAkey filename] [-CAcreateserial] [-CAserial filename] [-text] [-C] [-md5|-sha1] [-clrext] [-extfile filename] [-extensions section]

可用选项:

-inform arg         输入格式,默认PEM (DER|NET|PEM)
-outform arg        输出格式,默认PEM (DER|NET|PEM)
-keyform arg        私钥格式,默认PEM
-CAform arg         CA格式,默认PEM
-CAkeyform arg      CA密钥格式-默认PEM
-in arg             输入文件,默认stdin
-out arg            输出文件-默认stdout
-passin arg         私钥密码源
-serial             打印序列号值
-subject_hash       打印Subject希值
-subject_hash_old   打印旧式(MD5)Subject哈希值
-issuer_hash        打印issuer哈希值
-issuer_hash_old    打印旧式(MD5)issuer哈希值
-hash               subject_hash的同义词
-subject            打印subject DN
-issuer             打印issuer DN
-email              打印电子邮件地址
-startdate          显示证书的起始有效时间
-enddate            显示证书到期时间
-purpose            打印证书用途
-dates              显示证书的有效期
-modulus            打印RSA密钥模数
-pubkey             输出公钥
-fingerprint        打印证书指纹
-alias              输出证书别名
-noout              不显示信息
-ocspid             打印使用者名称和公钥的OCSP哈希值
-ocsp_uri           打印OCSP响应程序URL
-trustout           输出可信证书
-clrtrust           清除证书附加项里所有有关用途允许的内容
-clrreject          清除证书附加项里所有有关用途禁止的内容
-addtrust arg       添加证书附加项里所有有关用途允许的内容
-addreject arg      添加证书附加项里所有有关用途禁止的内容
-setalias arg       设置证书别名
-days arg           设置证书有效期
-checkend arg       检查证书是否在接下来的arg秒内过期
-signkey arg        指定自签名私钥文件
-x509toreq          根据证书来生成证书请求,需要指定签名私钥,如openssl x509 -in ca.pem -x509toreq -signkey key.pem
-req                输入为证书请求,需要进行处理
-CA arg             设置CA证书,必须是PEM格式
-CAkey arg          设置CA密钥,必须是PEM格式,缺少,则假定它在CA文件中。
-CAcreateserial     如果序列号文件不存在,则创建该文件
-CAserial arg       由arg指定序列号文件
-set_serial         设置证书序列号
-text               打印证书信息
-C                  用C语言格式显示信息
-md5/-sha1          指定使用的摘要算法
-extfile            指定包含证书扩展项(X509V3)的文件名,如果没有,那么生成的证书将没有任何扩展项
-extensions         要添加的扩展名为X509V3的配置文件中的部分
-clrext             删除证书所有的扩展项。当一个证书由另外一个证书生成时,可用此项
-nameopt arg        各种证书名称选项
-certopt arg        各种证书文本选项

示例:查看证书文件信息

openssl x509 -in ca.crt -text

示例:查看证书中的公钥

openssl x509 -in ca.crt -inform PEM -pubkey -noout

示例:转换证书格式

openssl x509 -in ca.crt -inform PEM -out ca.der -outform DER

示例:查看证书Subject信息

openssl x509 -in ca.crt -inform PEM -subject -noout
subject= /C=CN/ST=BJ/L=BJ/O=acton/OU=acton/CN=acton

示例:使用已有的证书,私钥,请求文件签发证书

openssl x509 -req -in req.csr -CA ca.crt -CAkey pri_key.pem -out ca2.crt -CAcreateserial -days 365 
days 365
Signature ok
subject=/C=CN/ST=BJ/L=BJ/O=acton/OU=acton/CN=acton
Getting CA Private Key
  • -in:证书请求
  • -CA:根证书
  • -CAkey:私钥,与根证书对应的
  • -CAcreateserial:自动生成序列号文件
  • -days:有效期365天

28、pkcs8(PKCS#8格式私钥工具)

pkcs8格式的私钥转换工具。

语法:

openssl pkcs8 [-in file] [inform der | pem] [-nocrypt] [-noiter] [-out file] [-outform der | pem] [-passin arg] [-passout arg] [-topk8] [-v1 alg] [-v2 alg]

可用选项:

-in file           输入文件(默认stdin)
-inform der | pem  输入格式(默认PEM)
-nocrypt           加密输入文件,输出的文件不被加密
-noiter            MAC保护计算次数为1
-out file          输出文件(默认stdout)
-outform der | pem 输出格式(默认PEM)
-passin source     输入文件口令保护来源
-passout source    输出文件口令保护来源
-topk8             输出pkcs8文件
-v1 algorithm      采用PKCS#5 v1.5或pkcs12,并指定加密算法,可采用算法包括:
                            PBE-MD2-DES、PBE-MD5-DES、PBE-SHA1-RC2-64、PBE-MD2-RC2-64、
                            PBE-MD5-RC2-64、PBE-SHA1-DES、PBE-SHA1-RC4-128、PBE-SHA1-RC4-40、
                            PBE-SHA1-3DES、PBE-SHA1-2DES、PBE-SHA1-RC2-128和PBE-SHA1-RC2-40
-v2 cipher         采用PKCS#5 v2.0,并指定加密算法,可以是des、des3和rc2,推荐des3

示例:将私钥文件转换为pkcs8文件,以明文存放

#默认生成的PKCS#1
openssl genrsa -out pkcs1.pem 1024

openssl pkcs8 -topk8 -inform PEM -in pkcs1.pem -outform PEM -nocrypt -out pkcs8.pem

pkcs1.pem内容:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDDrjjR6NsG6Dqb8CawFomER0X82Bt5sh0v9M30gI0fwKwXdtWP
UZy4NQoW00q6OotpvYRXyT1tq3xlVX+wmsgtmkbZYrZawH9BYCRS+xUbqrxOopB5
abXLZXPr5snn62bZ89QwgZNHIZXsassiTDU/RFlGlGvF4s9MDh0pUudjtwIDAQAB
AoGBAJ8w6UC7sxQXcTbTVGYEr7NRWHquRQvn/x64haTXv/eJA3fDUVHbDyg83gxb
sHt4jVpkt3nDWZoS3IyD1fGSui4TFWhydoQL6pWbStRv8UupO+psAlqMFhOzScTs
irYw5TYemXC0i1X2Jf0dZGjadMg63j54v/BHFw86TgTDmbohAkEA4srRL4mFhMk8
2E8EW0NKxxaRDyvF6ps2OPqCExFCsSfFXXYXpe4jIbS5x+jafbyDS88gCoJBhXId
KnbakzqVFQJBANzhrHi06pQzY4QCU+5dY79KwyBwtkUKVdMyVH88GVmwnP2zAuBj
ig3rcDH7d+KccenL7OzBUD5eSTbnGEC6oJsCQQDXH5VfZy48b3qEoCc8vk7vHAvK
/TWGPWYolA7QMV42lsgSyFLUNVgjv789zjV6cVeFkFoPPdES2NSrlAPvBfGlAkAL
Dt1EmcIYs03rIPa0u0YwIH0OVbY6VJ8hWKa0S/z06Yuig+DD/Re/RKc0SWOiG7T0
QHpXDAKJbMz7i6xCKVW7AkBwDD1pSAisJHgOonau58SCyrkuczq99gSRTfy7Hb0t
vyc1y9wyQtVIw3vfIjzYJm91OxEMdD6liAtwxgiRY7zy
-----END RSA PRIVATE KEY-----

pkcs8.pem内容:

-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMOuONHo2wboOpvw
JrAWiYRHRfzYG3myHS/0zfSAjR/ArBd21Y9RnLg1ChbTSro6i2m9hFfJPW2rfGVV
f7CayC2aRtlitlrAf0FgJFL7FRuqvE6ikHlptctlc+vmyefrZtnz1DCBk0chlexq
yyJMNT9EWUaUa8Xiz0wOHSlS52O3AgMBAAECgYEAnzDpQLuzFBdxNtNUZgSvs1FY
eq5FC+f/HriFpNe/94kDd8NRUdsPKDzeDFuwe3iNWmS3ecNZmhLcjIPV8ZK6LhMV
aHJ2hAvqlZtK1G/xS6k76mwCWowWE7NJxOyKtjDlNh6ZcLSLVfYl/R1kaNp0yDre
Pni/8EcXDzpOBMOZuiECQQDiytEviYWEyTzYTwRbQ0rHFpEPK8XqmzY4+oITEUKx
J8Vddhel7iMhtLnH6Np9vINLzyAKgkGFch0qdtqTOpUVAkEA3OGseLTqlDNjhAJT
7l1jv0rDIHC2RQpV0zJUfzwZWbCc/bMC4GOKDetwMft34pxx6cvs7MFQPl5JNucY
QLqgmwJBANcflV9nLjxveoSgJzy+Tu8cC8r9NYY9ZiiUDtAxXjaWyBLIUtQ1WCO/
vz3ONXpxV4WQWg890RLY1KuUA+8F8aUCQAsO3USZwhizTesg9rS7RjAgfQ5VtjpU
nyFYprRL/PTpi6KD4MP9F79EpzRJY6IbtPRAelcMAolszPuLrEIpVbsCQHAMPWlI
CKwkeA6idq7nxILKuS5zOr32BJFN/LsdvS2/JzXL3DJC1UjDe98iPNgmb3U7EQx0
PqWIC3DGCJFjvPI=
-----END PRIVATE KEY-----

PKCS#8和PKCS#1的明显区别是BEGIN和END中的RSA标识去掉了,对比内容,也不太一样,想要看具体的结构区别,可以通过ASN1在线解析工具,把密钥粘贴进去,通过解码可以看出来两者结构有明显区别。

29、ca(签发证书请求和生成CRL)

ca命令是一个小型CA系统。它能签发证书请求和生成CRL。它维护一个已签发证书状态的文本数据库。

语法:

openssl ca [-verbose] [-config filename] [-name section] [-gencrl] [-revoke file] [-crl_reason reason] [-crl_hold instruction] [-crl_compromise time] [-crl_CA_compromise time] [-subj arg] [-crldays days] [-crlhours hours] [-crlexts section] [-startdate date] [-enddate date] [-days arg] [-md arg] [-policy arg] [-keyfile arg] [-key arg] [-passin arg] [-cert file] [-in file] [-out file] [-notext] [-outdir dir]

可用选项:

-verbose                    打印附加信息
-config file                指定配置文件,此配置文件中包含了证书存放路径、私钥和生成证书控制等信息。如果默认安装openssl,配置文件在/usr/local/ssl/路径下。我们可以先用apps目录下的CA.sh或者CA.pl脚本来     建立环境:sh CA.sh -newca,输入后回车就会生成一个demonCA的目录。
-name arg                   替换配置文件指定的default_ca所表示的内容。
-gencrl                     生成CRL文件
-crldays days               设置下次CRL发布时间,days为下次发布时间距现在的天数
-crlhours hours             设置下次CRL发布时间,hours为下次发布时间距现在的小时数
-startdate YYMMDDHHMMSSZ    设置证书生效起始时间,采用UTCTime格式:YYMMDDHHMMSSZ
-enddate YYMMDDHHMMSSZ      设置证书失效时间,采用UTCTime格式:YYMMDDHHMMSSZ
-days arg                   设置证书有效期,arg为天数
-md arg                     设置摘要算法:md5、sha1
-policy arg                 指定CA策略,arg为配置文件中的策略段
-keyfile arg                指定签发证书的私钥文件
-keyform arg                私钥格式(PEM)
-key arg                    指定私钥解密口令
-cert file                  指定CA文件
-selfsign                   使用证书关联的密钥进行签名
-in file                    输入的证书请求文件(PEM)
-out file                   输出文件名
-outdir dir                 设置输出路径
-infiles ....               处理多个证书请求文件,此选项必须放在最后,此选项后的多个输入都被当作是证书请求文件
-spkac file                 文件包含DN和签名的公钥以及质询
-ss_cert file               文件包含要签名的自签名证书
-preserveDN                 不要重新订购DN
-noemailDN                  不要将电子邮件字段添加到证书主题中
-batch                      在生成请求期间不要询问任何内容
-msie_hack                  msie修改以处理所有这些通用字符串
-revoke file                撤销证书,file文件中包含了证书
-subj arg                   持有者参数,如/CN=cn/O=test/OU=t/cn=forxy,忽略空格已经\后的字符
-utf8                       输入字符为UTF8(默认ASCII)
-multivalue-rdn             支持多值RDN
-extensions ..              如果没有通过-extfile选项指定扩展项信息,section为配置文件中与扩展项有关的段,签发证书时添加section指定的扩展项(默认采用x509_extensions),如果不指定扩展,将生成第一版本的数字证书
-extfile file               要添加的扩展名为X509v3的配置文件
-crlexts ..                 -CRL扩展部分(覆盖配置文件中的值)
-status serial              显示给定序列号的证书状态
-updatedb                   为过期证书更新数据库

示例:建立CA(在apps目录下):
生成新CA,遇到提示,直接回车

sh ca.sh -newca

示例:生成证书请求

openssl req -new -out req.pem -keyout key.pem
openssl req -new -out req2.pem -keyout key2.pem

示例:签发证书

openssl ca -config /usr/local/ssl/opensslf  -name CA_default -days 365 -md sha1 -policy policy_anything -cert demoCA/cacert.pem -in req.pem -out cert1.pem -preserveDN -noemailDN -subj /CN=CN/O=JS/OU=WX/cn=myname -extensions myexts

openssslf中相关内容如下:

[ myexts ]

basicConstraints=CA:FALSE

sComment="OpenSSL Generated Certificate test"

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid,issuer

openssl ca  -cert demoCA/cacert.pem -in req2.pem -out cert2.pem

示例:撤销一个证书

openssl ca -revoke cert2.pem

示例:生成crl,设置原因、挂起处理方法

openssl ca -gencrl -out crl.crl
openssl ca -gencrl -crl_reason keyCompromise -crl_compromise 20010101030303Z -crl_hold holdInstructionReject -crl_CA_compromise  20020101030303Z -crldays 10 -out crl2.crl

生成一个crl时需要一个crlnumber,它是一个文本文件,内容为数字,比如:03。

30、crl(证书吊销列表处理工具)

crl工具,用于处里PME或DER格式的CRL文件。

语法:

openssl crl [-CAfile file] [-CApath dir] [-fingerprint] [-hash] [-in file] [-inform DER | PEM] [-issuer] [-lastupdate] [-nextupdate] [-noout] [-out file] [-outform DER | PEM] [-text]

可用选项:

-CAfile file       使用给定文件中的证书验证CRL
-CApath path       指定多个CA文件路径,每个CA文件的文件名为XXXX.0,XXXX为其持有者摘要值
-crlnumber         打印CRL编号
-fingerprint       打印CRL指纹
-hash              打印颁发者名称的哈希
-hash_old          打印颁发者名称的旧式(MD5)哈希
-in file           要从中读取的输入文件(如果未指定,则为stdin)
-inform format     输入格式(DER or PEM)
-issuer            打印颁发者DN
-lastupdate        上次发布时间
-nameopt options   指定证书名称选项
-nextupdate        下次发布时间
-noout             不打印CRL文件内容
-out file          要写入的输出文件(如果未指定,则为stdout)
-outform format    输出格式(DER or PEM)
-text              打印信息
-verify            验证CRL上的签名

示例:显示CRL信息

openssl crl -in crl.crl -text -issuer -hash -lastupdate –nextupdate

示例:验证CRL

openssl crl -in crl.crl  -CAfile demoCA/cacert.pem –noout

示例:通过指定CA文件路径来验证
在demoCA目录下建立一个目录:CAfiles

openssl x509 -in demoCA/cacert.pem -hash

得到如下值:(比如)

86cc3989

在CAfiles下建立一个86cc3989.0文件,内容为demoCA/cacert.pem的内容,验证CRL

openssl crl -in crl.crl  -CApath demoCA/CAfiles –noout

31、crl2pkcs7(生成PKCS#7消息工具)

本命令根据CRL或证书来生成pkcs#7消息。

语法:

openssl crl2p7 [-certfile file] [-in file] [-inform DER | PEM] [-nocrl] [-out file] [-outform DER | PEM]

可用选项:

-certfile file     到受信任CA的PEM证书链
-in file           输入文件(默认stdin)
-inform format     输入格式(DER or PEM (default))
-nocrl             不处理crl。一般情况下,输出文件中包含crl信息,设置此选项时,读取时忽略CRL信息,生成的信息不保护CRL信息。
-out file          输出文件(默认stdout)
-outform format    输出格式(DER or PEM (default))

示例:生成PKCS#7消息(只有crl信息)

openssl crl2pkcs7 -in crl.crl -out crlpkcs7.pem

示例:生成PKCS#7消息(既有CRL信息又包含证书信息)

openssl crl2pkcs7 -in crl.crl -certfile demoCA/ca cert.pem  -out crlcertpkcs7.pem

示例:生成PKCS#7消息(只有证书信息)

openssl crl2pkcs7 -in crl.crl -certfile demoCA/ca cert.pem  -out certpkcs7.pem –nocrll2

示例:将PEM证书(ca.crt和ca-chain.crt)添加到一个PKCS7(domain.p7b)文件中:

openssl crl2pkcs7 -nocrl -certfile ca.crt -certfile ca-chain.crt -out ca.p7b

32、pkcs7(PKCS#7处理工具)

pkcs7命令用于处理DER或者PEM格式的pkcs#7文件。

PKCS7(Public–Key Cryptography Standards)是一种标准的加密算法,它是由美国网络安全公司RSA Data Security Inc.提出的,用于保护电子数据传输的安全性。它是一种用于保护数据的公钥加密标准,它可以用于确保数据的完整性、签名和加密。

PKCS7可以用于通过电子邮件传输数据,以及在网络上传输数据时的安全性。它可以用于保护数据的完整性,确保数据的安全性,并防止数据的篡改。PKCS7可以用于加密电子邮件,保护电子邮件中的敏感信息,并确保发件人的身份。

PKCS7还可以用于签名电子文档,以确保文档的真实性和可靠性。它可以用于签署电子文档,以确保文档的真实性,并可以用于验证发件人的身份。

PKCS7还可以用于加密文件,以保护文件的安全性。它可以用于加密文件,以防止未经授权的访问,并确保文件的完整性。

总之,PKCS7是一种用于保护数据的公钥加密标准,它可以用于保护电子邮件、签名电子文档和加密文件等数据传输过程中的安全性。

语法:

openssl pkcs7 [-in file] [-inform DER | PEM] [-noout] [-out file] [-outform DER | PEM] [-print_certs] [-text]

可用选项:

-in file           输入文件(默认stdin)
-inform format     输入格式(DER or PEM (default))
-noout             不打印信息
-out file          输出文件(默认stdout)
-outform format    输出格式 (DER or PEM (default))
-print             输出PKCS#7结构的ASN.1表示
-print_certs       打印证书或CRL信息,在一行中打印出持有者和颁发者
-text              打印出完整的证书详细信息

示例:把一个PKCS#7文件从PEM格式转换成DER格式

openssl pkcs7 -in file.pem -outform DER -out file.der

示例:打印文件所有证书

openssl pkcs7 -in file.pem -print_certs -out certs.pem

33、certhash(为证书或CRL生成链接)

语法:

openssl certhash [-nv] dir ...

可用选项:

-n                 进行试运行-不要做任何更改
-v                 打印详细信息
dir 			   待搜索的目录

示例:为指定目录中的证书生成链接

openssl certhash -v ./

34、pkcs12(PKCS#12文件工具)

pkcs12文件工具,能生成和分析pkcs12文件。

PKCS12(Public-Key Cryptography Standards):定义了一种存档文件格式,用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目, 后缀:.p12, .pfx

语法:

openssl pkcs12 [-export] [-chain] [-inkey filename] [-certfile filename] [-CApath arg] [-CAfile arg] [-name name] [-caname name] [-in filename] [-out filename] [-noout] [-nomacver] [-nocerts] [-clcerts] [-cacerts] [-nokeys] [-info] [-des] [-des3] [-aes128] [-aes192] [-aes256] [-idea] [-nodes] [-noiter] [-maciter] [-twopass] [-descert] [-certpbe alg] [-keypbe alg] [-keyex] [-keysig] [-password arg] [-passin arg] [-passout arg]

可用选项:

-export                         输出pkcs12文件
-chain                          添加证书链
-inkey file                     指定私钥文件,如果不用此选项,私钥必须在-in filename中指定
-certfile f                     添加filename中所有的文件
-CApath arg                     指定CA文件目录
-CAfile arg                     CA的PEM格式文件
-name "name"                    指定证书和私钥的友好名
-caname "nm"                    指定CA友好名,可以多次使用此选项
-in  infile                     指定私钥和证书读取的文件,必须为PEM格式
-out outfile                    指定输出的pkcs12文件,默认为标准输出
-noout                          不输出信息
-nomacver                       读取文件时不验证MAC
-nocerts                        不输出证书
-clcerts                        只输出客户证书,不包含CA证书
-cacerts                        只输出CA证书
-nokeys                         不输出私钥
-info                           输出pkcs12结构信息
-des                            用DES加密私钥
-des3                           使用三重DES加密私钥(默认)
-aes128, -aes192, -aes256       用cbc-aes加密PEM输出
-camellia128, -camellia192, -camellia256  用cbc-camellia加密PEM输出
-nodes                          不对私钥加密
-noiter                         不多次加密
-nomaciter                      加强完整性保护,多次计算MAC
-maciter                        使用MAC迭代
-nomac                          不生成MAC
-twopass                        需要用户分别指定MAC口令和加密口令
-descert                        用3DES加密pkcs12文件,默认为RC2-40
-certpbe alg                    指定证书PBE算法(默认RC2-40)
-keypbe alg                     指定私钥PBE算法(默认3DES)
-macalg alg                     MAC中使用的摘要算法(默认SHA1)
-keyex                          设置私钥只能用于密钥交换
-keysig                         设置私钥只能用于签名
-password p                     指定导入导出口令来源
-passin p                       输入文件保护口令来源
-passout p                      指定所有输出私钥保护口令来源
-CSP name                       Microsoft CSP名称
-LMK                            将本地计算机密钥集属性添加到私钥

示例:打包私钥和对应的证书为PKCS12
私钥密钥为123456,导出文件密码为123456

openssl pkcs12 -export -inkey pri_key.pem -passin pass:123456 -in ca.crt -out testpkcs12.pfx -password pass:123456

示例:查看PKCS12信息

openssl pkcs12 -in testpkcs12.pfx -info -password pass:123456 -passout pass:123456
MAC Iteration 2048
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
    localKeyID: 2D 3E 50 AA 07 30 56 CB DA EA 1C 0D 04 A8 71 40 49 15 B9 CB
subject=/C=CN/ST=BJ/L=BJ/O=acton/OU=acton/CN=acton
issuer=/C=CN/ST=BJ/L=BJ/O=acton/OU=acton/CN=acton
-----BEGIN CERTIFICATE-----
MIIDKjCCAhICCQDurCVIcsKRKjANBgkqhkiG9w0BAQsFADBXMQswCQYDVQQGEwJD
TjELMAkGA1UECAwCQkoxCzAJBgNVBAcMAkJKMQ4wDAYDVQQKDAVhY3RvbjEOMAwG
A1UECwwFYWN0b24xDjAMBgNVBAMMBWFjdG9uMB4XDTIzMTIwMTA1NDQwMVoXDTI0
MTEzMDA1NDQwMVowVzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkJKMQswCQYDVQQH
DAJCSjEOMAwGA1UECgwFYWN0b24xDjAMBgNVBAsMBWFjdG9uMQ4wDAYDVQQDDAVh
Y3RvbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOFZaEe73P4OxzD4
FqFdATnfZmPCAY5J4ydw6gOPKLXON1pH89Y3Qyg6FcQR6/q0L2rJ9g6TIJ94HUYc
5a7xYHWXb+fjTzxHNww6X/CNk7RsEVjpsfEAHi98ZnhwJKLsR2GVUEKsf8iol3BX
xfsLUvXR+K0AJ2m1/VE0Bw1IWOdsZ7GPD5uyf7X7XwTE67Y1YHl0KwgZrDpkLsNX
Ni9UDOdRYySJeLQ2x5bXPYfrBfp5n80t89p7ebCINIJxko72DN+egpqwcNuwo+7M
C3Ej3RgyfMniqsCbdZrXk74JYjlNDhqe49NSV68W/RtoIp5Khvi7IogY2DByDfA/
A5hXoZkCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAMqJVc+mCtFq3YNxLETII9JWN
wh7qTsu45Exerlhsbr76Nde2XBwij2zKZGzP7HjcB7H56KWRZ6iXL1Vf2g41ZbDO
na1GGXxzcUlKA/A+bH/putwYP2Hls4wiUom29GMJG6A7OmSgG4Rdr3k5VsZQtOfx
aVDzaPXk0px49dz/VecsHht0gpqtVehXvHe9/vmVhQjKqVTJosudC9d+4YZiICyq
WogJc498K9iZ/Lyny+JzIowF1FKrQAlxVTBpZkOMuFc/1fjXGMKU0HVVfeyB8LZt
KnI6s7VZnKwehlREcVdRIFdMFqDiUPRSJaEDlmtSu7BVosA3b0/kHqL3t5Ld4A==
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Bag Attributes
    localKeyID: 2D 3E 50 AA 07 30 56 CB DA EA 1C 0D 04 A8 71 40 49 15 B9 CB
Key Attributes: <No Attributes>
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIZxJlvjY/Q4sCAggA
MBQGCCqGSIb3DQMHBAgVOvWeePf3SQSCBMgXvT696Qr6RiejUXAJNAqHJi7+j6+D
oX5piRGm+ARwpqrx1+GIQm0b2RxOLJZACUCS24kTHC6qGP5w4bsx9pney5leoBht
WalQzS3RhBGRikF3wuHXQkFH5/TcsIl/IuvldygJM+5IxN62afDerx5viZP1cWaF
Q3b0WkOGa4Sww/baye1K7KnletoLblY31FrNc7Lbp7PppZaDbrSFrwtt8Bjj0zVV
VdYUVyhRFG6lMs0/MTCHOkcbNo2Fd5Oft+7ZL6BDMCncmbl5O0Bh3S6M8UkxCc1O
WzpiJ0GKjhKABwg2nr4BjyBijg2DumvyXR6yRYFHzzCUrgsxl1mq/adqmxI4AbI2
OYw5UdWymte8F4hjObp57aOmT2kIatxbObGxKsjDtmuzUVeb+6U/pmN51u12wgcd
gOAYmgSXdMJYQSKshuCW0p8I8XfEEu+6g12vqoLhK54YIFVlgzxUIrj5a9vX36rD
fUibMh9o+eMM2+yjekM1Fh13vC6JYuelgaS+55VwT3rzoeqCt99eOqx6jmCGAMjx
hhmu67A3UMPSR4UMxevWX8jauNvTvzJnMEzj986ZT8q+AGGH+mywCZ68MS0VUysl
+L9XSsG+sK6w6wreKmrwsyOBxjmmomuegx9beEKiLrXXnlPOh/3A2a76Q851nUGy
s7y43cVC7/qZV/MMeGCzhH4EdwacScpZXwdDR0NSWZcqq2pX/cVvuabiDfG3DtVK
b/kRlKsD/gEwTXJ4Z79qoOvVczT3kB4V0Il2p8IUOG63cYqh1W6acECEaIJ9iyqW
h7UDm2/po2NBXc8OxZihaL1Jnxcre+WHVBYxYuu5I1WlUP7Pq8kBO4sOjHZ5X2Tu
xsAypSRMcnFkLtqjeF351iylwvBbFkja6ivsSqMJfJPePEi+obM54bvgPLvf8OwJ
tiMeE9ZlRUk2TbxipFtYtJMEjdtEcq/XX+vOcW3Qk8/9j852z8TU8g5CNNTQWAeN
6NWwbKD4fySZM6otpShW1B9H0/3EfqGbFnhTAbtHjOEZZw992rIST9L2KL0ZAEY+
VmOknrjY9rPP3keo1tJR1Y2uSUEQsZR7SxAnZKG0vMjMAqiYQPYsl1xvH4wGKbaL
sLQ3VugFbr3l90w0AYwLbnzRm0g6lAmJARovsuOkjE4iy77fwwjkhVWic4lCUqvy
1GTuGcbuIkUFMeIbp996uLuO3PNQt6NZD1WRhEz5Zv4d/aLPBPYC77phkddAGpBn
Q+UhN/v+SMM9E2egpt0HICFdvj0M30boKpiVauw6pPCW3BdnzwXLiPnbTGd/y6sg
Voka1nl0Ti3IUpfLYXgAmPA0+0u3WKNc7T43hTb3+capODIbuk2msaecHkDSAqoZ
cOW7o596gdxP72snRtWC7Y2JCyDHXOgxCkP5zA/EQ5n8Ka5TpmbF1mHUdaBaxv8d
y7a4PDJFNVnL3cMy9CdLHxyaWB+EvRlFvw1JItzKyOJOK93FCgy4pUjp+2oa1JVc
bc+i5Ufwl37LozeibKCyXiNiffqO1i8OiBmo86Gegc22DIax9dZCSC1zjTr3eJnZ
Cc19sTpWup/I0hmQjjg+emZBeFjzHEmjGjAgJYUGwfUcXYwX3TNzjJHms4SZa595
Sk0=
-----END ENCRYPTED PRIVATE KEY-----

35、nseq(证书与netscape证书序列间相互转化)

语法:

openssl nseq [-in filename] [-out filename] [-toseq]

可用选项:

-in file           要读取的输入文件(默认stdin)
-out file          要写入的输出文件(默认stdout)
-toseq             将证书转换为Netscape证书序列

示例:将多个证书转化为netscape证书序列

cat cert1.pem > 1.pem
cat cert2.pem >> 1.pem

openssl nseq -in 1.pem -toseq -out 2.pem

示例:将netscape证书序列转化为多个证书

openssl nseq -in 2.pem -out 3.pem

36、ocsp(在线证书状态工具)

语法:

openssl ocsp [-out file] [-issuer file] [-cert file] [-serial num] [-signer file] [-signkey file ] [-sign_other file ] [-no_certs] [-req_text] [-resp_text] [-text] [-reqout file] [-respout file] [-reqin file] [-respin file] [-nonce] [-no_nonce] [-url URL] [-host host:n] [-path] [-CApath dir] [-CAfile file] [-VAfile file] [-validity_period n] [-status_age n] [-noverify] [-verify_other file] [-trust_other] [-no_intern] [-no_signature_verify] [-no_cert_verify] [-no_chain] [-no_cert_checks] [-port num] [-index file] [-CA file] [-rsigner file] [-rkey file] [-rother file] [-resp_no_certs] [-nmin n] [-ndays n] [-resp_key_id] [-nrequest n]

可用选项:

-out file          输出文件名
-issuer file       指定当前颁发者证书,此选项可以用多次,file中的证书必须是PEM格式的
-cert file         将file指定的证书添加到OCSP请求中去
-serial n          将数字证书序列号添加到OCSP请求中去,num为证书序列号,0x开始表示是十六进制数据,否则是十进制数据,num可以是负数,前面用-表示
-signer file       用于签署OCSP请求的证书
-signkey file      用于签署OCSP请求的私钥,OCSP请求签名时,分别指定证书和私钥;如果只设置-signer选项,私钥和证书都从-signer指定的文件中读取;如果不设置这两项,OCSP请求将不会被签名
-sign_other file   签名的请求中添加其他证书
-no_certs          签名的请求中不添加任何证书
-req_text          打印OCSP请求信息
-resp_text         打印OCSP响应信息
-text              打印OCSP请求或者响应信息
-reqout file       指定DER编码的OCSP请求输出文件
-respout file      指定DER编码的OCSP响应输出文件
-reqin file        指定输入的DER编码的OCSP请求文件
-respin file       指定输入的DER编码的OCSP响应文件
-nonce             设置OCSP中的nonce扩展
-no_nonce          不设置OCSP中的nonce扩展
-url URL           指定OCSP服务的URL
-host host:n       发送OCSP请求给服务,host为地址或域名n为端口号
-path              OCSP请求所用的路径
-CApath dir        可信CA文件目录
-CAfile file       可信CA文件,file可以包含多个CA证书
-VAfile file       指定受信任的OCSP服务的证书,file可以包含多个证书;等价于-verify_certs 和-trust_other选项
-validity_period n 设置OCSP响应中可接受的时间误差,n以秒为单位。默认可接受时间误差为5秒
-status_age n      如果OCSP响应中没用提供响应的失效时间,则说明马上可以获取到新的响应信息;此时需要检查起始时间是否比当前时间晚n秒;默认情况不做此操作
-noverify          不验证OCSP响应的签名和nonce
-verify_other file 设置其他用于搜索OCSP响应者证书的文件
-trust_other       由-verify_other指定的文件中包含了响应者的证书,用此选项时,不对响应者证书做额外的验证。当不能获取响应者证书的证书链或其根CA时,可用此选项,以保证验证能通过,即:使用了此选项后,verify_other所指定的OCSP服务者证书是可以信任的,即使那些证书有问题
-no_intern         不搜索OCSP响应者的证书,采用此选项时,OCSP响应者的证书必须在-verify_certs或-VAfile中指定
-no_signature_verify 不验证响应者的签名,用于测试
-no_cert_verify    不验证响应者的证书,用于测试
-no_chain          不验证响应者证书链
-no_cert_checks    不验证响应者证书,不检查响应者是否有权来发布OCSP响应,用于测试
-port num		   OCSP服务端口
-index file	       指定证书状态索引文件
-CA file		   指定CA证书
-rsigner file	   指定用于签发OCSP响应的证书
-rkey file	       指定用于签发OCSP响应的私钥文件
-rother file	   将其他证书添加到OCSP响应中
-resp_no_certs     OCSP响应中不包含证书
-nmin n		       距离下次更新时间,n以分钟为单位
-ndays n		   距离下次更新时间,n以天为单位
-resp_key_id       用响应者的私钥ID来标记OCSP响应,默认为响应者证书的持有者
-nrequest n        OCSP服务最大响应个数,默认无限制
-<dgst alg>        在请求中使用指定的摘要

先用req和ca命令生成OCSP服务证书和私钥,下面的OCSP服务证书为ocspservercert.pem,OCSP服务签名私钥为ocspserverkey.pem:

示例:生成OCSP请求

openssl ocsp -issuer demoCA/cacert.pem -cert cert.pem -cert -cert2.pem -reqout ocspreq.der

示例:打印OCSP请求信息

openssl ocsp -reqin ocspreq.der -text

示例:启动OCSP服务

openssl ocsp -ndays 1 -index demoCA/index.txt -port 3904 -CA demoCA/cacert.pem -text  -rkey ocspserverkey.pem -rsigner ocspservercert.pem

示例:请求OCSP响应

openssl ocsp -issuer demoCA/cacert.pem -url http://127.0.0.1:3904 -reqin ocspreq.der -VAfile ocspservercert.pem -respout resp.der

打印如下信息:

Response verify OK

或者:

openssl ocsp -issuer demoCA/cacert.pem -url http://127.0.0.1:3904 -cert cert.pem -cert cert2.pem -VAfile ocspservercert.pem -respout resp.der

打印如下信息:

Response verify OK

cert.pem: unknown

        This Update: Mar  9 16:50:12 2007 GMT

        Next Update: Mar 10 16:50:12 2007 GMT

cert2.pem: revoked

        This Update: Mar  9 16:50:12 2007 GMT

        Next Update: Mar 10 16:50:12 2007 GMT

        Revocation Time: Mar  9 13:56:51 2007 GMT

示例:根据响应的文件来验证

openssl ocsp -respin resp.der -VAfile ocspserverc ert.pem -text

37、verify(证书验证工具)

语法:

openssl verify [-verbose] [-CApath path] [-CAfile file] [-purpose purpose] [-crl_check] [-attime timestamp] cert1 cert2 ...

可用选项:

-CApath directory			信任的CA证书存放目录,它们的文件名为xxxx.0,其中xxxx为其证书持有者的摘要值,通过openssl x509 -hash -in cacert1.pem可以获取。

-CAfile file				CA证书,当其格式为PEM格式时,里面可以有多个CA证书。

-untrusted file				不信任的CA的证书,一个文件中可有多个不信任CA证书。

-purpose purpose			证书的用途,如果不设置此选项,则不会验证证书链。purpose的值可以是:sslclient、sslserver、nssslserver、smimesign和smimeencrypt。

-verbose 					打印详细信息。

-crl_check					验证CRL,可以将CRL内容写在CAfile指定的PEM文件中。

用法:

sslclient 	SSL client
sslserver 	SSL server
nssslserver	Netscape SSL server
smimesign 	S/MIME signing
smimeencrypt	S/MIME encryption
crlsign   	CRL signing
any       	Any Purpose
ocsphelper	OCSP helper
timestampsign	Time Stamp signing

两个证书:cert1.pem和cert2.pem,并撤销了cert2.pem,生成了一个crl文件。在此基础上,我们将crl文件的内容拷贝到demoCA/cacert.pem的结尾,然后做如下验证命令:

openssl verify -CAfile demoCA/cacert.pem -verbose  -purpose sslclient -crl_check cert1.pem cert2.pem

38、smime(处理S/MIME邮件工具)

S/MIME工具,用于处理S/MIME邮件,它能加密、解密、签名和验证S/MIME消息。

语法:

openssl smime [-encrypt] [-decrypt] [-sign] [-verify] [-pk7out] [-des] [-des3] [-rc2-40] [-rc2-64] [-rc2-128] [-in file] [-certfile file] [-signer file] [-recip  file] [-inform SMIME|PEM|DER] [-passin arg] [-inkey file] [-out file] [-outform SMIME|PEM|DER] [-content file] [-to addr] [-from ad] [-subject s] [-text] [-rand file(s)] [cert.pem]...

可用选项:

-encrypt       加密数据
-decrypt       解密数据
-sign          签名数据
-verify        验证数据
-pk7out        输出pkcs7格式的文件
-des3          用三重DES加密
-des           用DES加密
-rc2-40        使用RC2-40加密(默认)
-rc2-64        使用RC2-64加密
-rc2-128       用RC2-128加密
-aes128, -aes192, -aes256   用cbc-aes加密PEM输出
-camellia128, -camellia192, -camellia256   用cbc-camellia加密PEM输出
-nointern      不在消息中搜索证书以寻找签名者
-nosigs        不验证消息签名
-noverify      不验证签名者证书
-nocerts       签名时不包括签名者证书
-nodetach      使用不透明签名
-noattr        不包括任何签名的属性
-binary        二进制输出
-certfile file 其他证书文件
-signer file   签名者证书文件
-recip  file   要解密的收件人证书文件
-in file       输入文件
-inform arg    输入格式SMIME(默认)、PEM或DER
-inkey file    输入私钥(如果不是签名者或收件人)
-keyform arg   输入私钥格式PEM
-out file      输出文件
-outform arg   输出格式SMIME(默认)、PEM或DER
-content file  提供或覆盖分离签名的内容
-to addr       to address
-from ad       from address
-subject s     subject
-text          包括或删除文本MIME标头
-CApath dir    受信任证书目录
-CAfile file   受信任证书文件
-crl_check     使用CRL检查签名者证书的吊销状态
-crl_check_all 使用CRL检查签名者证书链的吊销状态
-passin arg    输入文件密码源
cert.pem       用于加密的收件人证书

示例:用对方的证书来加密消息

openssl smime -encrypt -in mail.pem -out enced.pem newcert.pem

openssl smime -encrypt -in mail.pem -out enced.pem  -des newcert.pem

示例:用私钥解密消息

openssl smime -decrypt -in  enced.pem -out mymail.pem -inkey newkey.pem

openssl smime -decrypt -in  enced.pem -out mymail.pem -inkey newkey.pem -des

示例:用自己的私钥签名数据

openssl smime -sign -in  mail.pem -out signedmail.pem -inkey newkey.pem -signer newcert.pem

示例:验证签名

openssl smime -verify -in  signedmail.pem -CAfile newcert.pem -signer newcert.pem

此处newcert是一个自签名证书,如果不是自签名证书用如下命令:

openssl smime -verify -in  signedmail.pem -CAfile demoCA/cacert.pem -signer newcert2.pem

示例:将数据转化为pkcs7格式

openssl smime -pk7out -in signedmail.pem  -out p7.pem

本文标签: 详解工具javaopenssl