公钥私钥

非对称加密算法:加密的解密使用不同的密钥。

公钥和私钥是成对的,但两者也是相互独立的,即得到其中一个不会危害到另一个的安全。

  • 公钥可以发给所有人,用来加密,但是只有持有私钥的人才能解密。
  • 私钥用于给文件数字签名,所有持有公钥的人都可以使用公钥验证。
  • 数字证书是由CA(certificate authority)证书颁发机构将公钥及对应的信息绑定在一起权威发布的安全证书,从数字证书中可以获取公钥,并且可以确认对应公钥的所有者相关信息。

一个比较完整的栗子
两个人SA和SB,SA要把消息发给SB,每个人手里都有一对自己的和对方的公钥和私钥:

第一种情况:

SA用自己的公钥加密发给SB,SB接收到消息后使用SA的私钥解密获取对应的信息。对于消息本身来说,只要SA的私钥不泄露就不会有问题。

第二种情况:

  • SA用自己的私钥对密码做数字签名发送给SB,SB收到消息后使用SA的公钥来验证消息是否是SA发出的。
  • 那么假设SC将SB手上的SA的公钥偷偷替换成了SC自己的公钥,然后用自己的私钥签名给SB发消息,那么SB无法判断出来得到消息是否真得来自于SA。所以如果SA通过证书中心生成自己的安全证书,证书中携带有SA的公钥以及SA的身份信息,这样SB只要得到SA的安全证书就可以验证了,SB通过此证书可以取得SA的公钥,确认消息来自于SA。

第三种情况:

  • SA使用自己的私钥对消息做数字签名,之后使用SB的公钥对消息加密。
  • SB拿到加密后的密码后使用自己的密钥可以解密,然后用SA的公钥验证。

iOS下常用加密证书类型:

  • pfx证书:PKCS#12用于公密钥交换的文件格式之一,Microsoft最早提出的专有格式,文件中同时含有公钥和私钥,有密码保护。
  • p12证书:PKCS#12用于公密钥交换的文件格式之一,文件中同时含有公钥和私钥,有密码保护。
  • cer证书:仅含有公钥,不含密钥,公钥以BASE64进行编码存放。
  • pem证书:同cer证书一样,仅含有公钥,公钥以ASCII进行存放。
OpenSSL命令行方式获取公钥和私钥:

从pfx提取密钥信息,并转换为key格式(pfx使用pkcs12模式填充)

1、提取密钥对(如果pfx证书已加密,会提示输入密码。)

openssl pkcs12 -in 1.pfx -nocerts -nodes -out 1.key

//如果pfx证书已加密,上面会提示输入密码

2、从密钥对提取私钥

openssl rsa -in  1.key -out 1_pri.key

3、从密钥对提取公钥

openssl rsa -in 1.key -pubout -out 1_pub.key

那么
1_pub.key文件就是公钥。
1_pri.key文件是私钥。

2015年12月16日上午12:32 待完善