略
略
略
使用摘要算法对原文进行签名后使用rsa的私钥对摘要进行加密。
不过rsa在实际使用中有两种手段,一种是直接加密,这样对对长度有要求,不能超过rsa所选定的质因数的长度,或者进行分段加密。
因为rsa加密很慢,第一种方法在加密较长文件时会很蛋疼,所以一般使用第二种加密方法。使用对称加密加密原文,然后使用rsa加密对称加密中使用的秘钥。
数字证书通俗理解就是被认证过的数字签名。
数字签名中的原文可以是一些文本内容,也可以是签名者的信息。如果是签名者的信息,就可以使用认证的方法对这个人的信息进行认证,表示认证者认同签名者的信息。
证书认证的过程就是认证者使用自己的私钥对数字签名进行签名,准确来说是对数字签名中的公钥进行签名。这样只有认证者的公钥可以验签,以此来保证安全。然而认证者可以是私人,可以是权威机构。如果认证者是权威机构,那么这个数字证书就可以成为CA证书,是权威机构核查过申请者的信息之后使用自己的私钥加密而产生的。
为了数据传输安全,越来越多的网站启用https。在https握手阶段,服务器首先把自己的证书发送给用户(浏览器),浏览器查看证书中的发证机构,然后在机器内置的证书中(在PC或者手机上,内置了世界上著名的CA机构的证书)查找对应CA证书,然后使用内置的证书公钥校验服务器的证书真伪。如果校验失败,浏览器会提示服务器证书有问题,询问用户是否继续。
例如12306网站,它使用的自签名的证书,所以浏览器会提示证书有问题,在12306的网站上有提示下载安装根证书,其用户就是把自己的根证书安装到用户机器的内置证书中,这样浏览器就不会报证书错误。但是注意,除非特别相信某个机构,否则不要在机器上随便导入证书,很危险。
csr:证书请求文件,通过私钥生成。其中包含申请者的信息、申请者的公钥
crt:证书,CA机构通过私钥对认证申请者的公钥进行加密。包含被认证者的信息、认证机构的信息、认证者的私钥
base64
p12
x509
dv、ov、sv
PKCS#1-PKCS#15
x509
cer
crt
pem
p12
我们知道在 iOS 中向 Apple 申请证书时,需要生成 csr 文件并上传。这个过程中涉及到的操作有:
1、证书申请者生成自己的私钥
图:
2、通过私钥生成 csr 文件(第一步和第二部可以合成一步)
图:
3、将 csr 文件上传给 Apple,csr 文件中包含申请者的公钥和申请者的信息
图:
4、Apple验证 csr 文件的合法性,如果合法则进行验签操作
图:
5、如果验签通过,审核申请者的信息是否属实。
6、如果校验全部通过,则使用自己的私钥对 csr 文件进行签名生成 CA 证书颁发给证书申请者
使用x509指令查看Apple办法的证书的信息
3、验证csr文件中包含公钥且公钥是通过私钥生成的
1、通过钥匙串生成csr文件
该步骤产生3个文件,一个是请求文件csr,另外两个是公私钥文件,可以再钥匙串中查看并导出,结果如下:
将三个文件全部导出到文件夹中,其中私钥导出的格式只能是p12:
2、从 csr 文件中提取公钥进行对比
caoxk$ openssl req -pubkey -in request.certSigningRequest -noout
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0WjBxYUcnDg18A+yQUPD
fyWzfz3lxKi7r1zWvTLQrwH9pYbJvdHcMlMn4i3FlRztV89kpskgAt0acOodF0aR
khgg5e46sfchZGcE8P3FXKNCuIj+O92mvt/sewm6E8q4ChCj/rsBFWSDTv8xiH/U
AINhfXVdQN48c2WJlrwM5n1qutp++oKlDdhbNEwxQVdGxVDbsNElGUKV0BMf49fJ
BgqbPmPGm9LFcvTvrISlGI3YVEcJ4lyZByNk9EmDB4POOCrIVofBTIre+LO3FJIH
T0HdPVG4+6ARjf133MrDMebYHr114cPcqmS7/tnRRFc5+jSr8YOxzQWN7q/2t+3z
0wIDAQAB
-----END PUBLIC KEY-----
caoxk$ openssl req -pubkey -in request.certSigningRequest -noout -out pubfromcsr.pem
caoxk$ diff pubfromcsr.pem caoxk1107-public.pem
1c1
< -----BEGIN PUBLIC KEY-----
---
> -----BEGIN RSA PUBLIC KEY-----
9c9
< -----END PUBLIC KEY-----
---
> -----END RSA PUBLIC KEY-----
从结果中可以看出 csr 中包含的公钥就是在生成 csr 时产生的公钥。
3、从私钥文件中提取
caoxk$ openssl pkcs12 -in caoxk1107-private.p12 -out private.pem -nodes
Enter Import Password:
MAC verified OK
结果:
4、向 apple 请求证书
期间会要求上传 csr 文件,这里新增一个开发者证书,下载完成后
查看证书信息:
openssl x509 -in ios_development.cer -text -inform DER
还可以提取证书中的公钥进行对比,当然毫无意外,完全一致:
openssl x509 -in ios_development.cer -inform DER -pubkey
结果:
5、安装证书后查看
如图所示,产生了一个专用秘钥,所以这个证书对应的文件肯定是私钥
做以下尝试:
1、以cer和只导出私钥(也就是在私钥中点击导出,而不是证书中点击导出),查看 cer 文件和 p12 文件中包含哪些(证书、私钥、公钥)
结果:
以cer格式导出私钥,在钥匙串中的操作等同于导出证书,也就是等价于从 apple 下载到的证书。可以和下载到的证书大小进行对比,大小分毫不差。
2、以 p12 格式只导出私钥
首先可以确定的是肯定是和私钥不一样的,因为文件大小不一样。
1、查看内容
2、查看能否导出私钥
结论:导出的是包含私钥+证书
3、以 cer 格式导出证书
4、以 p12 格式导出证书
p12格式导出时,这个p12文件应当是包含证书、公钥、私钥。而以 cer 导出时,只包含公钥和证书??还是和只以 p12 格式导出私钥的操作等价??
5、删除钥匙串中的证书后再删除钥匙串中的秘钥,此时再次尝试安装证书,因为私钥已经不存在,当钥匙串根据私钥id去寻找私钥时,应当找不到私钥,所以证书不能安装成功
总结:
钥匙串中,点击证书或者点击证书下的私钥进行导出,导出操作的意义是完全相同的,不存在点击私钥导出的是私钥相关的信息这种说法。
删除证书中的私钥时,钥匙串中的私钥也被删除,也就是说证书下的私钥只是UI层上的关联展示关系。
比如删除证书下的私钥之后,钥匙串中的私钥就同步被删除了:
此时再删除证书后重新安装证书,在xcode中会提示没有该证书的私钥
此时,因为刚刚申请的证书还没有添加到描述文件中,所以新增一个描述文件,但是即使新增了,因为缺少私钥,证书也是不能使用的
备注
xcode会从描述文件中包含的证书集合中选择可用的证书对代码进行签名。也就是说,只有在描述文件的证书集合中仅有当前证书可用,然而这个证书在当前设备(mac电脑)中又不存在私钥时,才会报出以上提示。
另外,证书是用于代码签名的,怎样签名的呢?是使用私钥还是证书中的某一部分进行签名的呢?这个有关于apple的签名机制,以后会研究到。
导出 cer 时,导出的是不包含私钥的证书文件。导出 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:
-----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:
-----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 文件只包含私钥。