简介公开密钥算法和证书生成

前段时间,在做 https 的协议解密工作,所以对公开密钥算法等有了初步的了解,用本篇文章梳理下,参考《深入浅出HTTPS 从原理到实践》,学习https必备的好书,内容很详实,推荐!

一 简介

公开密钥算法其实不是一个算法,包含一组算法,包括加密和数据完整性保护算法等。只所以叫公开密钥算法是因为它有一对密钥,一个是公钥,一个是私钥。公钥可以公开。和常用的对称加密算法有所不同,对称加密算法的密钥只有一个;

此外,公开密钥算法不仅仅用于数据加密,还用于密码协商,数字签名。公开密钥算法进行加密的时候,安全性一般比较好,当时性能比较差,一般不作为主力用在数据的加解密上,比如 HTTPS 中用公开密钥算法进行密钥的协商。

二 RSA 密钥

RSA 是公开密钥算法中最常用和最重要的算法(解密也只能针对这个协议解密),它和对称密钥算法的密钥不同,RSA 算法中的公钥和私钥是由很多参数组成,不是简单的数字,一般采用文件方式提供。具体格式就不说了,总之 RSA 算法通过离散对数模型来保障算法的安全性,当然也和密钥长度有关,一个长度为 2048 的密钥算法被认为是安全的。加密安全与否,除了与密钥长度有关,还和使用方式,比如填充标准有关。公开密钥算法也有使用标准,称为 PKCS,按照目前常用的规定填充标准方式填充(RSAES-OAEP 和 RSAES-PKCS1-V1-5),通过这些标准可以保障相同的内容,同样的密钥,每次加密后的内容不同,进一步保障了加密的安全性。

三 实践

3.1 生成 RSA 密钥对

openssl genrsa -out  key.pem 2048
#输出密钥信息
openssl rsa -in mykey.pem  -text

这种方式生成后,如果不加保护,不安全,可以通过以下命令保护:

openssl genrsa -des3 -out   passkey.pem 2048

从密钥对中提取公钥和私钥。

openssl rsa -in mykey.pem  -pubout -out mypub.pem

3.2 用 RSA 加解密

如果有什么重要的文件,需要加密的,我觉得用这种非对称加密算法自己手工加密是很好的方式,只是别忘记了口令。

[root@localhost log]# echo "hello world" >a.txt
[root@localhost log]# openssl rsautl -encrypt -pubin -inkey mypub.pem -in a.txt -out ciphere.log
[root@localhost log]# openssl rsautl -decrypt -inkey mykey.pem  -in ciphere.log
hello world

3.3 自签名证书生成

我们一般开发测试 https 的时候,用的证书都是自签名证书,也就是自己生成的证书,没有正规 CA 认证,浏览器访问的时候,会有个告警,忽略即可。以 rsa 为例说明:

  1. 生成密钥对

openssl genrsa -out   mykey.pem 2048

这个和上一步一样。

  1. 生成证书签名请求文件 CSR(Certificate Signing Request) 里面除了公私钥,还包含用户名称,签发者,还有 common name(对应域名信息)等。命令如下:

[root@localhost log]# openssl req -new -key mykey.pem -out my.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:sichuan
Locality Name (eg, city) []:chengdou
....
....

输入一些信息后,生成了 csr 文件。

  1. 生成自签名证书

 openssl x509 -signkey mykey.pem -in my.csr -req -days 36500 -out cert.pem

说明:-signkey 后面指定使用的密钥对文件。-in 后面跟着我们刚才生成的 csr 文件 -days 标识有效期,上面命令为 10 年。cert.pem 为最终生成的证书。

四 证书格式转换

4.1 X509 到 P12

PCKCS#12 是另外一种常见的格式,多用在 tomcat,java 或安卓的客户端上,后缀一般是:.pkcs12,.pfx,.p12,它是将证书和密钥打包成一个文件管理。

  • 从 X509 转成 p12 格式 不同的 web 服务器,采用的证书格式有所差别,有时候我们需要转换证书格式,如下:

#x509转pkcs12
openssl pkcs12 -export -in  cert.pem  -inkey  cert.pem  -out server.p12
#pkcs12 转509格式
openssl pkcs12 -in server.p12 -out certificate.cer
#从pkcs12中提取私钥
openssl pkcs12 -in mycert.p12  -nocerts -nodes -out mycert.pem

如果刚才在生成证书的时候,设置了密码这里面要输入密码才可以生成 p12 格式的证书。

4.2 X509 到 p7b

PCKCS#7 是另外一种常见格式,文件后缀一般为.p7b 和.p7c。x509 转 PCKCS#7 命令如下:

openssl crl2pkcs7 -nocrl -certfile cert.pem   -certfile CACert.cer  -out certificate.p7b

说明:-certfile 指定服务器证书或中间服务器证书 -out 指定输出的文件 -nocrl 不加载证书对应的 CRL 文件。(包含被吊销证书的序列号文件)

五 诗词欣赏

渔家傲·秋思

宋:范仲淹

塞下秋来风景异。
衡阳雁去无留意。
四面边声连角起。
千嶂里。长烟落日孤城闭。
浊酒一杯家万里。
燕然未勒归无计。
羌管悠悠霜满地。
人不寐。将军白发征夫泪。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值