密码学标准和咱们日常所见的互联网协议同样,是一种你们都遵照的约定和标准,好比PKCS#1中规定了 RSA 秘钥时怎么生成的,公私钥的格式等内容,x509标准规定了证书的格式等。node
OpenSSL 本质就是一个工具集,按照主流的密码学标准实现了经常使用的加密算法,证书的生成、签名、验签等功能。ios
由于网络上的资料比较杂,有的是一些比较老的版本,有的又不完整,因此本身稍加总结,方便之后从新查阅。而学习 OpenSSL 的目的只是为了加深对密码学基础内容的理解和一些知识点的验证,不是密码学的开发人员暂时不须要去研究 OpenSSL 源码,有这功夫还不如多补补算法、C/C++、编译原理、数据结构等底层知识,因此本文只会创建 OpenSSL 大概的使用框架以及主流功能,完整的功能及其溯源再也不本文讨论范围。算法
本文将分三类讲述 OpenSSL 指令的使用,其中也只讲解经常使用的指令:dgst、enc、rsa指令集合、req、x50九、pkcs12。CA 指令由于在平时较少使用,暂不研究。数据库
OpenSSL 一共实现了4种非对称加密算法,包括DH算法、RSA算法、DSA算法和椭圆曲线算法(EC)。DH算法通常用户密钥交换。RSA 算法既能够用于密钥交换,也能够用于数字签名,固然,若是你可以忍受其缓慢的速度,那么也能够用于数据加密。DSA算法则通常只用于数字签名, 这里主要演示 RSA 算法,须要使用DH算法的能够自行研究 pkey 指令集合。安全
genrsa
指令虽然已经被功能更加全面的genpkey
指令取代,可是由于其相对简单,功能纯粹,能够做为学习genpkey
的基础。另外,genpkey
中的一些更详细的功能在现阶段使用不到,使用genrsa
直接生成私钥相对简单方便,容易掌握。其可选参数以下:bash
usage: genrsa [args] [numbits]
-out file output the key to 'file'(输出的文件名)
-passout arg output file pass phrase source(给输出的文件设置密码,此处不一样于对称算法加密,对称算法是对私钥结果进行加密,这里是对文件加密)
-f4 use F4 (0x10001) for the E value(使用65537做为E的值,E在RSA算法中使用场景为:1<e<φ(n) ,默认)
-3 use 3 for the E value(使用3做为E的值,非默认)
// 如下为对称加密选项
-des encrypt the generated key with DES in cbc mode
-des3 encrypt the generated key with DES in ede cbc mode (168 bit key)
-aes128, -aes192, -aes256
encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
encrypt PEM output with cbc camellia
复制代码
genrsa
接两个参数,第一个选项参数,第二个为rsa算法中的m值的长度,通常为1024,更高安全级别的位2048。其中,若是不设置对称加密的算法,则不会对私钥结果进行加密,若是不为空,则会要求输入对称算法中将要使用的秘钥,使用以下:网络
openssl genrsa -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
..............++++++
...............................++++++
e is 65537 (0x10001)
复制代码
获得的结果为: 数据结构
openssl genrsa -aes128 -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
....................................................++++++
.................++++++
e is 65537 (0x10001)
Enter pass phrase for private.pem:123456
Verifying - Enter pass phrase for private.pem:123456
复制代码
结果: app
rsa功能比较多,能够对秘钥进行管理。其中最主要的功能就是从私钥中提取公钥、查看秘钥的结构信息,可使用-help查看:框架
usage: rsa [options]
-check 检测秘钥合法性
-in file 输入的文件名
-inform format 输入文件的格式 (DER, NET or PEM (default))
-modulus 打印 RSA 秘钥的modulus
-out file 输出的文件名
-outform format 输出文件的格式(DER, NET or PEM (default PEM))
-passin src 输入文件的密码
-passout src 输出文件的密码
-pubin 该指令说明输入的是公钥,默认为私钥
-pubout 该指令说明须要输出公钥,默认输出私钥
-sgckey what it is?
-text 打印信息
复制代码
其中,ciphername可选值有-AES-192-CBC等等,能够经过-help指令查看,此处再也不列出。主要功能演示以下:
openssl rsa -in private.pem -text
复制代码
结果:
openssl rsa -in private.pem -pubout -out public.pem
复制代码
// 为RSA密钥增长口令保护
openssl rsa -in RSA.pem -des3 -passout pass:123456 -out E_RSA.pem
// 为RSA密钥去除口令保护
openssl rsa -in E_RSA.pem -passin pass:123456 -out P_RSA.pem
// 修改加密算法为aes128,口令是123456
openssl rsa -in RSA.pem -passin pass:123456 -aes128 -passout pass:123456 -out E_RSA.pem
复制代码
// 把pem格式转化成der格式,使用outform指定der格式
openssl rsa -in RSA.pem -passin pass:123456 -des -passout pass:123456 -outform der -out rsa.der
复制代码
以上两个指令时生成和管理秘钥,而rsautl
指令则和秘钥的具体使用有关,也就是如何使用 rsa 秘钥进行加密解密操做。
Usage: rsautl [options]
// 输入文件(被加密/解密/签名)和输出文件
-in file 被操做的文件
-out file 操做完成后的输出文件
// 输入的秘钥
-inkey file 完成操做时使用到的秘钥
// 集中填充方式
-ssl use SSL v2 padding
-raw use no padding
-pkcs use PKCS#1 v1.5 padding (default)
-oaep use PKCS#1 OAEP
// 几种功能选项
-sign 使用私钥签名
-verify 使用公钥验签
-encrypt 使用公钥加密,注意是公钥加密
-decrypt 使用私钥解密,注意是私钥解密
-passin arg 若是秘钥被对称加密过,则使用该选项提供对称加密所使用的秘钥
// 其余
-keyform arg 说明私钥格式,默认PEM
-pubin 说明输入的是公钥
-certin 输入的是携带rsa公钥的证书
-hexdump 16进制输出
复制代码
注意,OpenSSL 中的rsautl
指令和pkeyutl
指令都只能使用私钥解密,可是公钥和私钥都能用于加密。
也就是说使用私钥加密时须要用私钥解密,使用公钥加密后仍然须要使用私钥解密。猜想可能的缘由是私钥能够提取公钥,因此使用私钥加密后会先分理处公钥,再使用公钥加密?先这么理解吧,要完全搞清楚估计要学习加密标准及其实现了,指令以下:
openssl rsautl -encrypt -in plain.text -inkey public.pem -out encrypt.text
复制代码
备注: 为何相同的明文,使用密钥加密后,每次密文结果不同?由于 RSA 加密的时候根据填充模式填充随机数,致使每次加密结果不一样。
openssl rsautl -decrypt -in encrypt.text -inkey private.pem -out replain.text
复制代码
openssl rsautl -sign -in plain.text -inkey private.pem -out signed.text
复制代码
验签的时候须要使用-pubin
告知输入的秘钥为公钥
openssl rsautl -verify -in signed.text -pubin -inkey public.pem -out verify.text
复制代码
摘要算法经常使用于数字签名,数字签名严格意义上来说分为两步:生成摘要和签名。首先使用摘要算法对原文计算摘要,而后使用签名者的私钥对摘要进行签名。
openssl中的哈希函数加密主要使用命令dgst
,也能够直接使用对应算法指令,好比md5
,能够直接使用-help来查看选项(其实是瞎输入一个不存在的option来被动弹出提示)。然而,由于openssl
版本的缘由,致使命令乱七八糟,好比md5
指令还能够指定其余的算法类型,这就很蛋疼了。
总之就记住一条,只是用dgst指令来加密便可,其使用场景有三个:
计算摘要的格式以下:
openssl dgst [算法名称] [须要计算摘要的文件]
复制代码
其中算法可供选择的有:-md四、-md五、-ripemd160、-sha、-sha一、-sha22四、-sha25六、-sha5十二、-sha38四、-wirlpool等等能够经过openssl dgst -help命令查看
举个栗子🌰:
// 进入到对应的文件夹中
cd /Users/caoxk/Demo/opensslTest
// 使用sha1算法对plain.text文件进行摘要计算,其中plain.text中的内容为123456
openssl dgst -sha1 plain.text
复制代码
结果:
SHA1(plain.text)= 7c4a8d09ca3762af61e59520943dc26494f8941b
复制代码
和在线加密的结果对比:
仍然遵循 dgst [指令] [文件名]的格式
// 使用默认md5对plain.text进行哈希,而后使用private.pem私钥对哈希值进行签名后以16进制输出到test.text文件中
openssl dgst -sign private.pem -hex -out test.text plain.text
复制代码
结果:
openssl dgst -verify public.pem -signature test.text plain.text
复制代码
结果:
Verified OK
复制代码
备注 使用hex输出后验证会失败,hex指令只是用于展现,真正使用中须要将hex去掉,同理,rsa中的-hexdump指令也是如此。
OpenSSL一共提供了8种对称加密算法,且支持电子密码本模式(ECB)、加密分组连接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种经常使用的分组密码加密模式。这里以AES128的ECB模式作演示。
enc 指令参数以下:
usage: 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 使用base64输出/解密
-d 解密
-e 加密(默认)
-debug 打印出debug输出
-in file 须要加密/解密的文件
-iv IV 偏移量,ECB模式下不须要
-K key 对称加密中使用到的秘钥,若是不使用-k,则会要求从键盘输入
-out file 输出文件
-p 打印
-salt 该选项为默认值,意思是默认会随机加盐,使用-nosalt取消加盐
-S 手动指定加盐的值
复制代码
enc中默认会对key进行加盐操做,因此和在线 aes 加密的结果确定会不一样。可使用 -S 手动指定盐的值,可是具体的加盐算法是什么,不得而知,请高手指正。
// 使用aes-128算法,以ecb模式,对秘钥123进行默认加盐操做后,对plain.text进行对称加密,结果输出到 result.text 中
openssl enc -e -aes-128-ecb -in plain.text -p -k 123 -a -out result.text
// 盐
salt=EF3004BF880585F5
// 加盐以后的key
key=32BDF1964B275BF4F7A344D066E3A23E
// 加密后的base64结果值
U2FsdGVkX1/vMAS/iAWF9XW23uJDpttgH/3J0n18R30=
复制代码
解密:
openssl enc -d -aes-128-ecb -in result.text -p -k 123 -a
// 盐的信息已经包含在了result.text文件中,不须要再次输入
salt=041C31BA86CA7D29
key=DED2653F37157BC56C7D52919D6FF828
123456
复制代码
openssl
更新以后有一个pkey
系列的三个指令genpkey
、pkey
、pkeyutl
,和原先的genrsa
、rsa
、rsautl
一一对应。
新的指令集只是在原油基础上对功能进行了合并和扩展,因此这些指令不做为本文重点,具体使用能够在openssl genpkey -help
中查看,这里只演示最常使用的几个指令:
genpkey
生成私钥// 使用随机数长度为1024的rsa算法生成pem格式的私钥并输出到rsa_pri.key文件中,且在文件中打印私钥/公钥参数/结构的文本
openssl genpkey -out rsa_pri.key -outform PEM -algorithm RSA -pkeyopt rsa_keygen_bits:1024 -text
复制代码
结果:
pkey
从私钥中提取公钥pkey命令处理公钥或私钥。它们能够在各类形式之间进行转换,并将其结构打印出来。其指令以下:
-in file 输入文件,若是没有则标准输入
-inform X 输入的格式
-passin arg 输入文件的密码
-outform X 输出格式(DER/PEM)
-out file 输出的文件,若是没有则标准输出
-passout arg 输出文件加密所使用的密码
-pubin 默认是读入私钥,该选项指定读入公钥
-pubout 默认状况下会输出私钥,使用此选项将会
输出公钥,用于从私钥生成公钥
-text 打印公私钥结构信息
复制代码
从私钥中提取公钥:
openssl pkey -in private.pem -pubout -out public.pem
复制代码
结果:
// 公钥加密
openssl pkeyutl -encrypt -in plain.text -inkey public.pem -out encrypt.text
// 私钥解密
openssl pkeyutl -decrypt -in encrypt.text -inkey private.pem -out decrypt.text
复制代码
openssl pkeyutl -sign -in plain.text -inkey private.pem -out signed.text
openssl pkeyutl -verify -pubin -inkey public.pem -in plain.text -sigfile signed.text -out verify.text
复制代码
证书的格式相关的密码学标准是PKCS#10,标准中规定了CSR 文件的格式,req
指令就是基于该标准,实现了 CSR 文件的生成、查看、验证、自签名等功能。
req
的使用方法为:req [options] <infile >outfile
,其选项有:
[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格式。
[pubkey/noout/text/默认]
text打印请求文件中的全部信息(不包含公钥),pubkey提取出 csr 文件中的公钥,noout不输出 csr 文件中的 request 内容。默认只打印 request 内容。
除上述主要参数外,还有许多其余的参数,不在一一叙述,有兴趣的读者能够查看req的man手册
复制代码
使用private.pem私钥生成csr文件并输出,期间会要求输入我的信息
openssl req -new -key private.pem -out request.csr
复制代码
使用原有的RSA密钥生成证书请求文件,指定-batch选项,不询问申请者的信息。主体信息由命令行subj指定,且输出公钥
openssl req -new -key RSA.pem -passin pass:123456 -out client.pem -subj /C=AU/ST=Some-State/O=Internet -pubkey
复制代码
自动生成1024位RSA密钥,并生成证书请求文件,指定-nodes文件,密钥文件不加密
openssl req -new -newkey rsa:1024 -out client.pem -keyout RSA.pem -subj /C=AU/ST=Some-State/O=Internet -nodes
复制代码
默认只会输出 csr 内容,-text
输出包含 csr 内容的全部结构,-noout
不输出 csr内容
openssl req -in request.csr -noout -text
复制代码
结果:
openssl req -in request.csr -pubkey
复制代码
结果:
-x509
须要三个参数:证书请求文件 csr 、证书签名用到的私钥、证书输出文件
// 使用private.pem 私钥对request.csr的证书请求文件进行签名并输出
openssl req -x509 -in request.csr -out client.cer -key private.pem
复制代码
结果:
查看证书内容则在下一个指令x509
中讲解。
OpenSSL实现了对证书的X.509标准编解码、PKCS#12格式的编解码以及PKCS#7的编解码功能。并提供了一种文本数据库,支持证书的管理功能,包括证书密钥产生、请求产生、证书签发、吊销和验证等功能。
事实上,OpenSSL提供的CA应用程序就是一个小型的证书管理中心(CA),实现了证书签发的整个流程和证书管理的大部分机制。
该指令功能丰富,能够查看证书信息、做为一个伪 CA 机构给证书签名(和req -x509指令同样)、证书格式转换等。由于功能是在太多,这里只介绍最主要和经常使用的功能:
// 查看证书格式为DER的Apple.cer文件中的信息,默认证书为PEM格式
openssl x509 -in Apple.cer -text -inform DER
复制代码
结果:
// 只打印证书中的公钥,不打印证书
openssl x509 -in ios_development.cer -inform DER -pubkey -noout
复制代码
openssl x509 -in apple.cer -inform DER -out cert.pem -outform PEM
复制代码
和req -x509
是相同的,这里再也不赘述。
PKCS#标准有1-15个,具体的内容能够去网络上查阅,后文也会对密码学的一些主流标准进行简析。OpenSSL 就是参照这些标准实现了一些使用的功能。
PKCS#12标准定义了我的身份信息(包括私钥、证书、各类秘密和扩展字段)的格式。p12 文件则是我的秘钥文件,能够只包含私钥,也能够包含证书和私钥。通常用于用户在不一样设备间移动他们的我的身份信息。
在iOS中,开发者经过本身的私钥生成 csr 文件以后在 apple 官网生成并下载了证书,这个证书只有本身能使用,其余人由于没有证书对应的私钥,因此是不能使用的。因而乎就有了把p12文件共享给别人,其余人在本身电脑上安装私钥以后就可使用对应的证书对代码进行签名了。可是貌似新的版本上已经不须要共享p12文件了,这个有时间能够去验证下结果并探索下原理。
经常使用功能以下:
注意,必定要加-nodes
,不然默认会要求输入加密密码对私钥进行加密
openssl pkcs12 -in caoxk1107-private.p12 -out private.pem -nodes
复制代码
不输入-nodes:
caoxkdeMacBook-Pro:opensslTest caoxk$ openssl pkcs12 -in caoxk1107-private.p12 -out private.pem
// 要求输入p12文件的密码
Enter Import Password:
MAC verified OK
// 要求输入加密导出的PEM文件的密码
Enter PEM pass phrase:
caoxkdeMacBook-Pro:opensslTest caoxk$
复制代码
结果:
输入-nodes:
caoxkdeMacBook-Pro:opensslTest caoxk$ openssl pkcs12 -in caoxk1107-private.p12 -out private.pem -nodes
// 只要求输入p12文件的密码
Enter Import Password:
MAC verified OK
caoxkdeMacBook-Pro:opensslTest caoxk$
复制代码
结果:
openssl pkcs12 -export -in alicecert.pem -inkey alicekey.pem -certfile cacert.pem -out alice.p12
复制代码
以前的指令中通常使用-text
来进行信息的查看,在pkcs12
指令中,使用-info
来查看 p12 文件的内容,须要注意的是,仍然记得带上-nodes
,不然私钥会被加密,不予展现。
查看建立 csr 文件时,从私钥中导出的p12文件:
openssl pkcs12 -in caoxk1107-private.p12 -nodes -info
复制代码
结果:
MAC Iteration 1
MAC verified OK
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Bag Attributes
friendlyName: caoxk1107
localKeyID: 17 E6 1A 74 F3 38 00 05 46 B4 B1 42 18 1A FC 34 9B AB DB 08
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDRaMHFhRycODXw
D7JBQ8N/JbN/PeXEqLuvXNa9MtCvAf2lhsm90dwyUyfiLcWVHO1Xz2SmySAC3Rpw
6h0XRpGSGCDl7jqx9yFkZwTw/cVco0K4iP473aa+3+x7CboTyrgKEKP+uwEVZINO
/zGIf9QAg2F9dV1A3jxzZYmWvAzmfWq62n76gqUN2Fs0TDFBV0bFUNuw0SUZQpXQ
Ex/j18kGCps+Y8ab0sVy9O+shKUYjdhURwniXJkHI2T0SYMHg844KshWh8FMit74
s7cUkgdPQd09Ubj7oBGN/XfcysMx5tgevXXhw9yqZLv+2dFEVzn6NKvxg7HNBY3u
r/a37fPTAgMBAAECggEAElQA4bDM2D9zORemml+79JzwIOrh+VxrUOXnRZf0+9xI
vvwVHDAJ/b2ZeApZiLuHanAUdySTUKzZa5iSAz+B7i9+caFwMbNXkNoTbKRJadpA
NLaIyeSUe5BNulcXmjPb98WNFPZ5Gc46T+e2BiRqAcF9/uUOzGanE9KHQFIlLucS
riBfYyvJw1S/AVoHvlBk6wldvnB5IRdcHHBdl+bLofBTxkDXcLDikhttxps9ix3P
YecuPEs5TkBiredYO9tJKCPYkcz2rdBioQHCRBsx3LInVzkVHEHrVLBbt9T3wgBA
IA+pliuUeVV/HeelqLGMwYQBlCmSxiZ5/gKF8zQ6wQKBgQDss5BaBg89sP68Rr6J
ba4j72pThoaeO+kYPGNeWKz9zhT3phf81NjxQ/THuJTPJ0bWhoKz58/HP1LTL9W1
lsihU7VNa7kVqOteWTDNkli087Kes5iqoWJVdLrJv2Tn+4EXltX0L5Musquord7v
3AE6dar9aleDzEp0wFr/x7wv5wKBgQDie4yqVLXzXOqnlPXdAsjEx7IC/ysgUsuD
HrvOBzjq9nGilk4IjGgCdzZujn3A80UcPN8boCcrVSDc0qTM8MCqD8t+8yEgRLD6
UA1MgUQfqZKictpsuwsNkQ/2OqUSPkCGUaSqfucCuYJtfxf/vbRfEYkvxShMuI1j
9bewWFqPNQKBgQCgeAOu5FjEzA+GeLeH19GtDwyYX6U39QnLonUDaz6sOmBAnFu6
zlndBuMV228XGVuO6FYHvWpBfA6cmdtaZkTSCjvpptQteP1IU1Mgqsx0sJoxuTQQ
yaQupxpS1+yC0SDtaxbVmsM/b2Wsz2NKXW5/wXIQp115PrBjglyu9yv/lQKBgAaD
oTcg+p7GVGV/jlbOBrJKQB9/8WCboQjjcGlrocJ4VipkAliSmUdA4IrrhEhxdtJq
Gcy0nYvMhgZz9JOEdTYvAB5lpdVExIZemRNTQH9cpEAR56Bq/NVmD7x4UVkl+zsh
zAevYLueVFcL6cfMUAzP908tb4xNXpu6bI8g63HlAoGAQNEzqSzVoLDpeeMUbo5y
OtCcT5p4Rin8VBG/izUFo6vXfeDcQU/VDaegDDokEvrPIGymxu1CHIfqF+E81KrK
cY/YmTkk9q6/jzFfJVQIZ29Y40kPBnEeWc1ij/H0ImwsUmKyvOh2Bq9wiFx4RHw+
LnXrKAC9CEnvZUmpam41UQ0=
-----END PRIVATE KEY-----
复制代码
查看经由钥匙串中的证书导出的p12文件
openssl pkcs12 -in privateKeyFromKeychain.p12 -info -nodes
复制代码
结果:
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
friendlyName: iPhone Developer: yue hu (ZJ7BM73MA2)
localKeyID: 17 E6 1A 74 F3 38 00 05 46 B4 B1 42 18 1A FC 34 9B AB DB 08
subject=/UID=JUNRCFGNSU/CN=iPhone Developer: yue hu (ZJ7BM73MA2)/OU=3BFC8YW44Z/O=Wuhan New World Jewelry Co., Ltd./C=US
issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
-----BEGIN CERTIFICATE-----
MIIFpzCCBI+gAwIBAgIIKFFF+H2MnPUwDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
HhcNMTkxMTA3MDYyNTAwWhcNMjAxMTA2MDYyNTAwWjCBmjEaMBgGCgmSJomT8ixk
AQEMCkpVTlJDRkdOU1UxLjAsBgNVBAMMJWlQaG9uZSBEZXZlbG9wZXI6IHl1ZSBo
dSAoWko3Qk03M01BMikxEzARBgNVBAsMCjNCRkM4WVc0NFoxKjAoBgNVBAoMIVd1
aGFuIE5ldyBXb3JsZCBKZXdlbHJ5IENvLiwgTHRkLjELMAkGA1UEBhMCVVMwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRaMHFhRycODXwD7JBQ8N/JbN/
PeXEqLuvXNa9MtCvAf2lhsm90dwyUyfiLcWVHO1Xz2SmySAC3Rpw6h0XRpGSGCDl
7jqx9yFkZwTw/cVco0K4iP473aa+3+x7CboTyrgKEKP+uwEVZINO/zGIf9QAg2F9
dV1A3jxzZYmWvAzmfWq62n76gqUN2Fs0TDFBV0bFUNuw0SUZQpXQEx/j18kGCps+
Y8ab0sVy9O+shKUYjdhURwniXJkHI2T0SYMHg844KshWh8FMit74s7cUkgdPQd09
Ubj7oBGN/XfcysMx5tgevXXhw9yqZLv+2dFEVzn6NKvxg7HNBY3ur/a37fPTAgMB
AAGjggHxMIIB7TAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFIgnFwmpthhgi+zr
uvZHWcVSVKO3MD8GCCsGAQUFBwEBBDMwMTAvBggrBgEFBQcwAYYjaHR0cDovL29j
c3AuYXBwbGUuY29tL29jc3AwMy13d2RyMDEwggEdBgNVHSAEggEUMIIBEDCCAQwG
CSqGSIb3Y2QFATCB/jCBwwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlz
IGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2Yg
dGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9u
cyBvZiB1c2UsIGNlcnRpZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBw
cmFjdGljZSBzdGF0ZW1lbnRzLjA2BggrBgEFBQcCARYqaHR0cDovL3d3dy5hcHBs
ZS5jb20vY2VydGlmaWNhdGVhdXRob3JpdHkvMBYGA1UdJQEB/wQMMAoGCCsGAQUF
BwMDMB0GA1UdDgQWBBQX5hp08zgABUa0sUIYGvw0m6vbCDAOBgNVHQ8BAf8EBAMC
B4AwEwYKKoZIhvdjZAYBAgEB/wQCBQAwDQYJKoZIhvcNAQELBQADggEBAFM9T1dB
P5JXQ6cj9QOgLWaIBfdo3WRT/H3ZXBmaIuJVCjlAbK1QORQt3xBgGoqp68fPC6rl
Z/jikrgNuVFt1bsRxM60xkhBMbYKSlGU4SuwJK7vjH5/z1VcEqiep0MRNnFzruih
gahBWFYUhSJ4R87SoszIULxwF8xzZHMqcZgrOkydOSIMhKLgDOGOj80wpvnj/uDP
Mo8EUr1zaIS+T0BBWdnOV5gp7ZOzTT2ws/h0SI79sxVwesUAw8S0d1WjazsiCvSm
MGbHD3lW+3l+4O334l5CKfTSa9HzUMGazio+6GZ3D8KKgW7trfRvhHjqWjjCBLx0
sfXPbULNRAyEFFE=
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Bag Attributes
friendlyName: caoxk1107
localKeyID: 17 E6 1A 74 F3 38 00 05 46 B4 B1 42 18 1A FC 34 9B AB DB 08
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDRaMHFhRycODXw
D7JBQ8N/JbN/PeXEqLuvXNa9MtCvAf2lhsm90dwyUyfiLcWVHO1Xz2SmySAC3Rpw
6h0XRpGSGCDl7jqx9yFkZwTw/cVco0K4iP473aa+3+x7CboTyrgKEKP+uwEVZINO
/zGIf9QAg2F9dV1A3jxzZYmWvAzmfWq62n76gqUN2Fs0TDFBV0bFUNuw0SUZQpXQ
Ex/j18kGCps+Y8ab0sVy9O+shKUYjdhURwniXJkHI2T0SYMHg844KshWh8FMit74
s7cUkgdPQd09Ubj7oBGN/XfcysMx5tgevXXhw9yqZLv+2dFEVzn6NKvxg7HNBY3u
r/a37fPTAgMBAAECggEAElQA4bDM2D9zORemml+79JzwIOrh+VxrUOXnRZf0+9xI
vvwVHDAJ/b2ZeApZiLuHanAUdySTUKzZa5iSAz+B7i9+caFwMbNXkNoTbKRJadpA
NLaIyeSUe5BNulcXmjPb98WNFPZ5Gc46T+e2BiRqAcF9/uUOzGanE9KHQFIlLucS
riBfYyvJw1S/AVoHvlBk6wldvnB5IRdcHHBdl+bLofBTxkDXcLDikhttxps9ix3P
YecuPEs5TkBiredYO9tJKCPYkcz2rdBioQHCRBsx3LInVzkVHEHrVLBbt9T3wgBA
IA+pliuUeVV/HeelqLGMwYQBlCmSxiZ5/gKF8zQ6wQKBgQDss5BaBg89sP68Rr6J
ba4j72pThoaeO+kYPGNeWKz9zhT3phf81NjxQ/THuJTPJ0bWhoKz58/HP1LTL9W1
lsihU7VNa7kVqOteWTDNkli087Kes5iqoWJVdLrJv2Tn+4EXltX0L5Musquord7v
3AE6dar9aleDzEp0wFr/x7wv5wKBgQDie4yqVLXzXOqnlPXdAsjEx7IC/ysgUsuD
HrvOBzjq9nGilk4IjGgCdzZujn3A80UcPN8boCcrVSDc0qTM8MCqD8t+8yEgRLD6
UA1MgUQfqZKictpsuwsNkQ/2OqUSPkCGUaSqfucCuYJtfxf/vbRfEYkvxShMuI1j
9bewWFqPNQKBgQCgeAOu5FjEzA+GeLeH19GtDwyYX6U39QnLonUDaz6sOmBAnFu6
zlndBuMV228XGVuO6FYHvWpBfA6cmdtaZkTSCjvpptQteP1IU1Mgqsx0sJoxuTQQ
yaQupxpS1+yC0SDtaxbVmsM/b2Wsz2NKXW5/wXIQp115PrBjglyu9yv/lQKBgAaD
oTcg+p7GVGV/jlbOBrJKQB9/8WCboQjjcGlrocJ4VipkAliSmUdA4IrrhEhxdtJq
Gcy0nYvMhgZz9JOEdTYvAB5lpdVExIZemRNTQH9cpEAR56Bq/NVmD7x4UVkl+zsh
zAevYLueVFcL6cfMUAzP908tb4xNXpu6bI8g63HlAoGAQNEzqSzVoLDpeeMUbo5y
OtCcT5p4Rin8VBG/izUFo6vXfeDcQU/VDaegDDokEvrPIGymxu1CHIfqF+E81KrK
cY/YmTkk9q6/jzFfJVQIZ29Y40kPBnEeWc1ij/H0ImwsUmKyvOh2Bq9wiFx4RHw+
LnXrKAC9CEnvZUmpam41UQ0=
-----END PRIVATE KEY-----
复制代码
备注 从结果中能够清晰的看出,经由钥匙串中已经安装成功的证书(有何证书中配套的私钥才能安装成功),导出以后的 p12 文件中包含证书+私钥。而生成 CSR 文件时的私钥中导出的 p12 文件只包含私钥。
CA指令至关于OpenSSL在内部实现了一个小型的CA系统,签发证书请求和生成CRL,维护一个已签发证书状态的文本数据库,由于实际使用中较少,本文不讨论该指令的使用。
至此,OpenSSL 主要的功能介绍完毕,其中若有错误,强烈欢迎指正!另外,man comman
到底怎么使用?No manual entry for rsa
怎么解决?若是有高手知道,也请告知,万分感谢!
后文会对一些名词作出解释和总结,还会结合iOS中证书的申请、HTTPS的使用、iOS签名机制作出实践。