.pem文件,.csr文件,.key文件。。。区别

您所在的位置:网站首页 生成crt和key .pem文件,.csr文件,.key文件。。。区别

.pem文件,.csr文件,.key文件。。。区别

2023-11-11 02:10| 来源: 网络整理| 查看: 265

做项目时在阿里云上申请的证书,下载Nginx对应的证书时,发现有两个文件一个以.key结尾,一个以.pem结尾,而自定义生成证书时,发现有三种后缀名所以想要弄清楚这几种文件的区别,故搜索了相关资料。

首先有几个概念:

总得来说这些文件都与X.509证书和密钥文件有关,从文件编码上分,只有两大类:

* PEM格式:使用Base64 ASCII进行编码的纯文本格式 * DER格式:二机制格式

而CRT, CER,KEY这几种证书和密钥文件,在存储为物理文件时,既可以是PEM格式,也可以DER格式。

* CER:一般用于windows的证书文件格式 * CRT:一般用于Linux的证书,包含公钥和主体信息 * KEY:一般用于密钥,特别是私钥

打个比方:CER,CRT,KEY相当于论文,说明书等,有规定好的行文格式与规范,而PEM和DER相当于txt格式还是word格式。

如何打开.pem 文件和.der文件以及两种文件的转换

假设有一个baidu.crt文件, 这个crt文件的实际格式其实是pem, 有一个der格式的文件baidu.der想要看到这两个文件的实际内容,可以使用命令

openssl x509 -in baidu.crt -text -noout openssl x509 -inform der -in baidu.der -text -noout

两者文件的转化,使用命令

# pem转der openssl x509 -outform der -in baidu.pem -out baidu.der # der转pem openssl x509 -inform der -in baidu.der -out baidu.crt 自定义生成公私钥对

我们生成一个RSA的公钥和密钥对

openssl genpkey -algorithm rsa -out rsa_private.key

该命令生成了一个 私钥公钥对,也就是说rsa_private.key这个文件同时包含了私钥和公钥,很多文章对这里有误解 我们是可以从该文件中,提取出公钥的

openssl rsa -pubout -in rsa_private.key -out rsa_pub.key

现在我们有公钥和私钥了,怎么加密解密??? 先生成一个测试文件:

$echo "this is a test" > text

对该文件进行加密:

#采用公钥对文件进行加密 $openssl rsautl -encrypt -in text -inkey rsa_pub.key -pubin -out text.en #采用私钥解密文件 $openssl rsautl -decrypt -in text.en -inkey rsa_private.key this is a test

既然是非对称加密,那我们尝试下用私钥加密,用公钥解密。 这里需要注意的是,私钥加密在openssl中对应的是-sign这个选项,公钥解密对应的是-verify这个选项,如下:

#用私钥对文件进行加密(签名) $openssl rsautl -sign -in text -inkey rsa_private.key -out text.en #用公钥对文件进行解密(校验) $openssl rsautl -verify -in text.en -inkey rsa_pub.key -pubin this is a test

ok,以上大概介绍了公钥和私钥,那现在有一个问题: 公钥是公开分发的,那当你拿到一个公司(个人)的公钥之后,怎么确定这个公钥就是那个公司(个人)的???而不是一个别人篡改之后的公钥??而且公钥上没有任何的附加信息,标记当前公钥的所属的实体,相关信息等。

为了解决这个问题,人们引入了如下两个概念: (1)证书:公钥信息 + 额外的其他信息(比如所属的实体,采用的加密解密算法等)= 证书。证书文件的扩展名一般为crt。 (2)CA:证书认证中心;拿到一个证书之后,得先去找CA验证下,拿到的证书是否是一个“真”的证书,而不是一个篡改后的证书。如果确认证书没有问题,那么从证书中拿到公钥之后,就可以与对方进行安全的通信了,基于非对称加密机制。CA自身的分发及安全保证,一般是通过一些权威的渠道进行的,比如操作系统会内置一些官方的CA、浏览器也会内置一些CA

ok,那接下来的问题: 我想给自己,给公司、给我的某个服务器申请一个证书,该怎么搞??? 公钥私钥对可以在自己的本地通过相关的工具(如openssl、ssh_keygen)产生,那公钥怎么包装成一个证书,并且要在CA那边“注册”一下,不然,别人拿到你的证书之后,去CA那边验证不过,会认为是一个不可信证书。

(1)先生成一个秘钥对

#生成一个公钥密钥对 openssl genpkey -algorithm rsa -out rsa_private.key

(2)基于该私钥我们生成一个CSR(证书签名请求)

openssl req -new -key rsa_private.key -out server.csr

(3)将该CSR文件发给CA,“注册一下”,当然了这个过程是收费的,要钱的。这里,我们把自己当作一个CA,自己给自己注册一下,当然了,产生的证书是没人认可的。

openssl x509 -req -days 365 -in server.csr -signkey rsa_private.key -out mycert.crt

其实这个过程就是自定义生成SSL证书的过程。

本文参考:

1.SSL中,公钥、私钥、证书(pem、crt、cer、key、csr)的后缀名都是些啥 2.关于PEM, DER, CRT, CER,KEY等各类证书与密钥文件后缀的解释 3.证书相关:rsa、crt文件、key文件、csr文件

本文来自博客园,作者:rachel_zh,转载请注明原文链接:https://www.cnblogs.com/rachel-zh/p/16956086.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3