PKI(公钥基础设施)是一个包括硬件、软件、人员、策略和规程的集合,用来实现基于公钥密码体制的密钥和证书的产生、管理、存储、分发和撤销等功能。
本专题将系统的讲解整个体系。
基本术语
之后专门写一个章节来解释吧。
详解
生成及查看rsa密钥
- openssl: 一个开源组织,配套做了一套开源的工具,囊括了主要的加密算法及周边的内容
- 下面的命令生成了一个“私钥密钥对”,这个key里面包含了公钥和私钥。
openssl genpkey -algorithm rsa -out rsa_demo_001.key
- 直接查看文件内容
vim rsa_demo_001.key
1 | -----BEGIN PRIVATE KEY----- |
- 查看其中的公钥和私钥。
openssl rsa -in rsa_demo_001.key -text
1 | Private-Key: (2048 bit) |
- 提取其中的公钥
openssl rsa -pubout -in rsa_demo_001.key
1 | writing RSA key |
- 写入公钥到文件里面,指定了-out就不会再输出到控制台。
openssl rsa -pubout -in rsa_demo_001.key -out rsa_demo_001.pub.key
使用密钥加密解密文件
生成一个数据文件
echo “{“data”:[{“6544242”:[121.40541199401648,32.95890201633851]}]}” > data.json
使用公钥对文件进行加密操作。
openssl rsautl -encrypt -in data.json -inkey rsa_demo_001.pub.key -pubin -out data-encrypt.json
此时获得的文件 data-encrypt.json是加密后的文件,不可被直接理解了。一般在传输过程中,会对这个二进制流转码成hex或者base64。
在2的基础上,使用私钥文件进行解密。
openssl rsautl -decrypt -in data-encrypt.json -inkey rsa_demo_001.key
重要: 在实际操作过程中,我们一般会把私钥保存,把公钥发出去,这样通过公钥加密的内容,只有接收者可以看到。实际上、私钥加密的内容,公钥可以解密。但是因为私钥中已经包含了公钥,所以如果私钥文件发出去,就失去了非对称加密的意义了。私钥加密的场景,其实是验证,私钥签名的内容,可以用公钥验证是这个私钥签名的。
私钥“签名”(也是加密),公钥验证签名(也是解密)。
openssl rsautl -sign -in data.json -inkey rsa_demo_001.key -out data-sign.json
openssl rsautl -verify -in data-sign.json -inkey rsa_demo_001.pub.key -pubin
可以看出,其实和上面的过程是类似的,只是定义不同。从数学上来说没有区别。加密的中间文件可能会不一样。
证书
密钥虽然已经有了,但是上面没有任何组织或者个人的标识,那么如何才能通过证书本身来标志组织或者持有者的身份呢。当你拿到这个公钥之后,怎么知道这个公钥是这个组织所有的,而不是被偷梁换柱之后的?
所以我们有证书: 公钥信息+额外的附加信息(所属实体,采取的加密算法等)=证书。扩展名一般为crt。(cert)
证书的获得
自行通过密钥对生成证书。
openssl genpkey -algorithm rsa -out rsa_for_cert.key # 和前面的证书章节一样。
基于这个私钥生成一个CSR(证书签名请求)。
采用私钥生成一个CSR,过程中需要输入一些信息,这些信息都是公开的
openssl req -new -key rsa_for_cert.key -out server.csr
1 | You are about to be asked to enter information that will be incorporated |
- 文件生成了,我们查看一下。
openssl req -in server.csr -text -noout
1 | Certificate Request: |
我们可以把这个证书发给CA机构,让他们认证。CA认证过的(签名)的证书,是可以被主流浏览器直接识别的。唯一的问题是要收钱。
自己充当CA来注册一下。并且这里是把自己当做root证书来自签名。(而浏览器里面是预埋了各个CA机构的公钥,可以来验证是不是由这个CA机构签发的证书,因为公钥可以verify私钥sign的内容)。
openssl x509 -req -days 365 -in server.csr -signkey rsa_for_cert.key -out my-cert.crt
1 | Signature ok |
- 查看证书相关信息
openssl x509 -in my-cert.crt -text
1 | Certificate: |
版权声明
本文标题:112-【pki体系及安全策略】1-openssl及各类证书详解
文章作者:盛领
发布时间:2020年11月03日 - 22:54:50
原始链接:http://blog.xiaoyuyu.net/post/45c4089e.html
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。
如您有任何商业合作或者授权方面的协商,请给我留言:sunsetxiao@126.com