史上最全数字证书及openssl命令详解

数字证书相关文件说明

PEM,DER

X509证书标准定义的两种编码格式

PEM

纯文本文件格式,以-----BEGIN xxx-----开头,以----END xxx—结尾
可以通过文本编辑器打开查看文本结构,如果要查看原始数字证书的信息需要命令:openssl x509 -in xxx.pem -text -noout

DER

二进制文件格式,可以通过命令工具提取其中的信息或进行编码转换。
查看证书信息:openssl x509 -in xxx.der -inform der -text -noout

不同格式的证书

我们知道有很多常见的数字证数,扩展名既不以pem结尾也不以der结尾,但是无论扩展名是什么,其中内容的编码格式都是pem或者der中的一种,不同平台偏好的编码格式不同,不同类型的数字证书存储的内容也略有差异,不过大部分证书文件都可以通过命令行工具转换成另一种编码格式。
常见的扩展名有以下这些:

CRT

certificate单词的简写,常见于unix系统,有可能是pem编码,也有可能是der编码,大部分都是pem编码

CER

也是certificate单词的简写,常用于windows系统,同样的可能是pem编码也可能是der编码,大多数应该是der编码

KEY

通常用于存放公钥和私钥,并非x.509证书,编码同样也是pem或者der的一种,查看key的方法:
openssl rsa -in xxx.key -text -noout
如果是der格式,同理如下:
openssl rsa -in xxx.key -inform der -text -noout

CSR(Certificate Signing Request)

即证书签名请求,这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥(还附带一些其他信息),在生成这个申请的时候,同时也会生成一个私钥,私钥要自己保管好,做过ios app的应该知道怎么向苹果申请开发者证书。
查看方法:openssl req -in xxx.csr -text -noout
如果是der编码加上-inform der

PFX/P12(predecessor of PKCS#12)

对unix服务器来说,一般CRT和KEY是分开存放的,但windows的iis则将他们存放在一个PFX文件中(这个文件中包含了证书和私钥),这样会不会不安全呢?应该不会,PFX通常会有一个提取密码,如果要提取里面的东西,需要输入提取密码,PFX文件使用的是DER编码,如何把PFX转换为PEM编码?
openssl pkcs12 -in xxx.pfx -out xxx.pem -nodes
这时候会提示你输入提取码,输出的xxx.pem就是可读的文本
生成pfx的命令:
openssl pkcs12 -export -in certficate.crt -inkey privatekey.key -out certficate.pfx -certfile CACert.crt
其中CACert.crt是CA(权威证书颁发机构)的根证书,有的话也通过-certfile参数一起带进去.这么看来,PFX其实是个证书密钥库.

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.der -inform der -outform pem -out cert.pem

密钥文件和证书申请文件编码格式转换

只需要把上述x509换成rsa或者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地址,其它都可以留空的.
生产环境中还是不要使用自签的证书,否则浏览器会不认,或者如果你是企业应用的话能够强制让用户的浏览器接受你的自签证书也行.向权威机构要证书通常是要钱的,但现在也有免费的,仅仅需要一个简单的域名验证即可.

openssl命令详解

其实openssl不仅仅能用于rsa或者是证书生成,还有很多编解码,加解密的功能,如:base64, md5/sha1摘要,aes/des3加密解密

利用openssl命令进行Base64编解码
  1. 对字符串进行编码:
# echo abc | openssl base64
# YWJjCg==
  1. 对base64字符串解码
# echo YWJjCg== | openssl base64 -d
  1. 对文件进行编码
# openssl base64 -in xxx.txt
  1. 如果对一个文件进行base64解码(文件名t.base64):
# openssl base64 -d -in t.base64 
利用openssl命令进行md5/sha1摘要(digest)
  1. 对字符串‘abc’进行md5摘要:
    # echo abc | openssl md5
    
  2. 对文件进行md5摘要
    # openssl md5 -in t.txt
    
  3. 对字符串’abc‘进行sha1摘要
    # echo abc | openssl sha1
    
  4. 对文件进行sha1摘要
    # openssl sha1 -in t.txt
    
利用openssl命令进行AES/DES3加密解密(AES/DES3 encrypt/decrypt)
  1. 对字符串’abc‘进行AES加密,使用密钥123,输出结果以base64编码:
    $ echo abc | openssl aes-128-cbc -k 123 -base64
    $ U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g=
    
    对以上的输出结果进行解密:
    $ echo U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= | openssl aes-128-cbc -d -k 123 -base64
    $ abc
    
  2. des3加密解密
    同上,只要把aes-128-cbc 换成des3就可以了,
  3. 对文件进行AES/DES3加密解密
    同上,只要指定-in参数指向文件名就可以了

生成私钥公钥

需要先使用genrsa生成私钥,然后使用rsa从私钥中提取公钥

genrsa 的用法如下:
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]

常用选项有:
-out filename:将生成的私钥保存至指定的文件中
-des|-des3|-idea:不同的加密算法
numbits:指定生成私钥的大小,默认是2048

示例:

$ openssl genrsa -out 123.txt 2048
ras 的用法如下:
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
   [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]

常用选项:
-in filename:指明私钥文件
-out filename:指明将提取出的公钥保存至指定文件中
-pubout:根据私钥提取出公钥

示例:

$ openssl rsa -in 123.txt -pubout -out 123.pub

创建CA和申请证书

由于篇幅太长,单独写了一篇文章:https://blog.csdn.net/humanhaunt/article/details/109309675

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值