http系列---公钥体系PKI

IETF

InternetEngineeringTaskForce:互联网工程任务组

PKIX

Public Key Infrastructure for X.509 Certificates:公钥基础设施为509证书

PKI

Public Key Infrastructure:公钥基础设施,又称公钥体系,用于发布和传输公开秘钥(即公钥)的系统

Certificate

证书:即公钥的载体,用于保证公钥的完整性和真实性

IETF的安全领域的公钥基础实施(PKIX)工作组为互联网上使用的公钥证书定义一系列的标准。PKIX工作组在1995年10月成立。

Internet工程任务组(IETF)主要负责制定标准化协议/功能并推动其运用。正是这些协议/功能使得Internet具有巨大用处且充满趣味(如TCP/IP、SMTP、FTP、TELNET、HTTP等)。这些工作被很多工作组分担,它们分别致力于不同的领域。

在IETF的安全领域中,其中一个工作组负责公开密钥基础设施(PKI)及X.509,通常称为PKIX工作组,旨在使X.509标准中所做的证书和证书撤销列表工作,满足于在Internet环境中建立Internet公开密钥基础设施(IPKI)的需要。

PKIX主要目的

PKIX的目的是要开发必须的互联网标准来支持可互操作的PKI。工作组的第一项任务就是要创建一个概要文件,把证书数据结构、扩展域和数据取值限定在一个特定的可选范围内。X.509标准的巨大灵活性使得互操作难以实现,PKIX工作组希望通过限定允许的选项,提高PKI系统间的互操作性。

PKIX工作组定义了公钥证书及CRL的概要文件。在一些情况下,他还定义了其他的证书扩展字段或证书属性,还有这些属性的对象标识。PKIX也正在开发新的协议,以便于PKI生命周期中自始至终对PKI信息的管理。这些协议部分包括证书管理协议(CMP)、安全多用途邮件扩展(S/MIME)和在线证书状态协议(OCSP)。

PKIX主要内容

PKIX作为IETF设定的工作组,其目的更多的在于Internet PKI,而不仅仅是刻画X.509证书和做证书撤销列表工作。所以,PKIX的章程中包含了如下4项专门领域:

1、 证书和证书撤销列表概貌(Profile);

2、 证书管理协议;

3、 证书操作协议;

4、 证书策略(CP)和认证业务声明(CSP)结构。

第一项是有创造性的工作——制定X.509的语法,包括对强制性的、可选择性的、必要的和非必要的扩展的详细说明,这些扩展用于PKIX相容的证书和证书撤销列表中。

第二项对在IPKI中管理操作需求所用到的协议进行了详细说明。这些操作包括对实体及密钥对的初始化/认证、证书撤销、密钥备份和恢复,以及CA密钥更换、交叉认证等。

第三项详细描述了日常IPKI操作中需要用到的协议,比如从公共存储库中收回证书/证书撤销列表,证书的在线撤销状态检查等。

第四项为书写CP和CSP文档的作者提供了指导,对特殊环境中所应包括的主题和格式做了建议。

公钥体系简介

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

X.509标准

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

证书文件详解

证书标准:X.509 - 这是一种证书标准,主要定义了证书中应该包含哪些内容.其详情可以参考RFC5280,SSL使用的就是这种证书标准.

编码格式:同样的X.509证书,可能有不同的编码格式,目前有以下两种编码格式.

PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN…"开头, "-----END…"结尾,内容是BASE64编码.
查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout
Apache和*NIX服务器偏向于使用这种编码格式.

DER - Distinguished Encoding Rules,打开看是二进制格式,不可读.
查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout
Java和Windows服务器偏向于使用这种编码格式.

相关文件扩展名

证书虽然只有PEM和DER这两种编码格式,但文件扩展名并不一定就叫"PEM"或者"DER",常见的扩展名除了PEM和DER还有以下这些,它们除了编码格式可能不同之外,内容也有差别,但大多数都能相互转换编码格式.

PEM:- 采用 PEM 编码格式的 X.509 证书的文件扩展名;

DER - 采用 DER 编码格式的 X.509 证书的文件扩展名;

CRT - CRT应该是certificate的三个字母,其实还是证书的意思,常见于UNIX系统,有可能是PEM编码,也有可能是DER编码,大多数应该是PEM编码,相信你已经知道怎么辨别.

CER - 还是certificate,还是证书,常见于Windows系统,同样的,可能是PEM编码,也可能是DER编码,大多数应该是DER编码.

KEY - 通常用来存放一个公钥或者私钥,并非X.509证书,编码同样的,可能是PEM,也可能是DER.
查看KEY的办法:openssl rsa -in mykey.key -text -noout
如果是DER格式的话,同理应该这样了:openssl rsa -in mykey.key -text -noout -inform der

CSR - Certificate Signing Request,即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(当然还附带了一些别的信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好.做过iOS APP的朋友都应该知道是怎么向苹果申请开发者证书的吧.
查看的办法:openssl req -noout -text -in my.csr (如果是DER格式的话照旧加上-inform der,这里不写了)

PFX/P12 - predecessor of PKCS#12,对UNIX服务器来说,一般CRT和KEY是分开存放在不同文件中的,但Windows的IIS则将它们存在一个PFX文件中,(因此这个文件包含了证书及私钥)这样会不会不安全?应该不会,PFX通常会有一个"提取密码",你想把里面的东西读取出来的话,它就要求你提供提取密码,PFX使用的时DER编码,如何把PFX转换为PEM编码?
openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes
这个时候会提示你输入提取代码. for-iis.pem就是可读的文本.
生成pfx的命令类似这样:openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
其中CACert.crt是CA(权威证书颁发机构)的根证书,有的话也通过-certfile参数一起带进去.这么看来,PFX其实是个证书密钥库.

CRL - Certificate Revocation List,证书吊销列表,一个被签署的列表,它指定了一套证书发布者认为无效的证书。除了普通CRL外,还定义了一些特殊的CRL类型用于覆盖特殊领域的CRL。CRL一定是被CA所签署的,可以使用与签发证书相同的私钥,也可以使用专门的CRL签发私钥。CRL中包含了被吊销证书的序列号。证书具有一个指定的寿命,但 CA 可通过称为证书吊销的过程来缩短这一寿命。CA 发布一个证书吊销列表 (CRL),列出被认为不能再使用的证书的序列号。CRL 指定的寿命通常比证书指定的寿命短得多。CA 也可以在 CRL 中加入证书被吊销的理由。它还可以加入被认为这种状态改变所适用的起始日期。由 CA 吊销证书意味着,CA 在证书正常到期之前撤销其允许使用该密钥对的有关声明。在吊销的证书到期之后,CRL 中的有关条目被删除,以缩短 CRL 列表的大小。
在验证签名期间,应用程序可以检查 CRL,以确定给定证书和密钥对是否仍然可信(有些应用程序使用 CryptoAPI 中的 Microsoft 证书链验证 API 来完成此任务)。如果不可信,应用程序可以判断吊销的理由或日期对使用有疑问证书是否有影响。如果该证书被用来验证签名,且签名的日期早于 CA 吊销该证书的日期,那么该签名仍被认为是有效的。
应用程序获得 CRL 之后,由客户机缓存 CRL ,在它到期之前客户机将一直使用它。如果 CA 发布了新的 CRL,拥有有效 CRL 的应用程序并 不 使用新的 CRL,直到应用程序拥有的 CRL 到期为止。

JKS - 即Java Key Storage,这是Java的专利,跟OpenSSL关系不大,利用Java的一个叫"keytool"的工具,可以将PFX转为JKS,当然了,keytool也能直接生成JKS,不过在此就不多表了.

证书编码的转换
PEM转为DER openssl x509 -in cert.crt -outform der -out cert.der

DER转为PEM openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

(提示:要转换KEY文件也类似,只不过把x509换成rsa,要转CSR的话,把x509换成req…)

获得证书
向权威证书颁发机构申请证书

用这命令生成一个csr: openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr
把csr交给权威证书颁发机构,权威证书颁发机构对此进行签名,完成.保留好csr,当权威证书颁发机构颁发的证书过期的时候,你还可以用同样的csr来申请新的证书,key保持不变.

或者生成自签名的证书
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
在生成证书的过程中会要你填一堆的东西,其实真正要填的只有Common Name,通常填写你服务器的域名,如"yourcompany.com",或者你服务器的IP地址,其它都可以留空的.

生产环境中还是不要使用自签的证书,否则浏览器会不认,或者如果你是企业应用的话能够强制让用户的浏览器接受你的自签证书也行.向权威机构要证书通常是要钱的,但现在也有免费的,仅仅需要一个简单的域名验证即可.有兴趣的话查查"沃通数字证书".

在这里插入图片描述

证书生成与转换

打开终端,敲入命令即可转换

1、p12生成证书

openssl pkcs12 -clcerts -nokeys -out apple_cert.pem -in apple_cert.p12

2、将p12格式证书文件转换成.pem格式证书文件

openssl pkcs12  -in  xxx.p12  -out  xxx.pem  -nodes

3、p12导出key,这时需要输入p12的导出密码

openssl pkcs12 -nocerts -nodes -out apple.key -in apple_cert.p12

利用key导出公私钥(存在rsa和ecc算法两种):

    导出rsa公私钥

    openssl rsa -in apple.key -out apple_rsa_pri.pem

    openssl rsa -in apple.key -pubout -out apple_rsa_pub.pem

    导出ecc公私钥

    openssl ec -in apple.key -out apple_ec_pri.pem

    openssl ec -in apple.key -pubout -out apple_ec_pub.pem

一般服务端只需要证书和私钥,所以拼接即可:

cat apple_cert.pem apple_rsa_pri.pem >magic-dev.pem

或者

cat apple_cert.pem apple_ec_pri.pem >magic-dev.pem
附接触项目的证书文件目录

国密版本:
在这里插入图片描述
在这里插入图片描述
非国密版本:
在这里插入图片描述

在这里插入图片描述

参考链接:

https://blog.csdn.net/ququ_123/article/details/79863800

https://www.jianshu.com/p/ef06507269c0

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lipviolet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值