Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CA证书介绍与格式转换

CA证书介绍与格式转换

作者头像
Miloce
发布于 2022-09-28 03:57:45
发布于 2022-09-28 03:57:45
5.1K00
代码可运行
举报
文章被收录于专栏:JoyJoy
运行总次数:0
代码可运行

CA证书介绍与格式转换

概念

PKCS 公钥加密标准(Public Key Cryptography Standards, PKCS),此一标准的设计与发布皆由RSA资讯安全公司(英语:RSA Security)所制定,PKCS 目前共发布过 15 个标准。更多公钥加密标准

X.509 是密码学里公钥证书的格式标准。

X.509是常见通用的证书格式。是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准。 X.509附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。 X.509证书已应用在包括TLS/SSL在内的众多网络协议里,同时它也用在很多非在线应用场景里。

应用场景如电子签名服务。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。

  1. 常用加密标准:
    • PKCS #7: 密码讯息语法标准(Cryptographic Message Syntax Standard),规范了以公开金钥基础设施(PKI)所产生之签章/密文之格式。其目的一样是为了拓展数位证书的应用。
    • PKCS #10: 证书申请标准(Certification Request Standard),英语:PKCS_10,规范了向证书中心申请证书之CSR(certificate signing request)的格式。
    • PKCS #12: 个人讯息交换标准(Personal Information Exchange Syntax Standard),定义了包含私钥与公钥证书(public key certificate)的文件格式。私钥采密码(password)保护。常见的PFX就履行了PKCS#12。
  2. 常用扩展名:
    • PKCS#7格式: .P7B .P7C .SPC
    • PKCS#12格式: .P12 .PFX .PKCS12
    • JKS格式: .jks .keystore .truststore
    • .pem – 隐私增强型电子邮件(Privacy-enhanced Electronic Mail)格式,通常是Base64格式的。
    • .cer /.crt /.der – 通常是DER(X.690#DER_encoding)二进制格式的。
    • .cer /.crt是用于存放证书,它是2进制形式存放的,不含私钥。
    • .p12 – PKCS#12格式,包含证书的同时可能还包含私钥
    • .pfx – PFX,PKCS#12之前的格式(通常用PKCS#12格式,比如由互联网资讯服务产生的PFX文件)
    • .pfx /.p12 用于存放个人证书/私钥,他通常包含保护密码,2进制方式。
    • .p7r 是CA对证书请求的回复,只用于导入。
    • .p7b 以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。

术语介绍

  1. 密钥对: 在非对称加密技术中,有两种密钥,分为私钥和公钥。
  2. 公钥: 公钥用来给数据加密,用公钥加密的数据只能使用私钥解密,公钥是密钥对持有者公布给他人的。
  3. 私钥: 用来解密公钥加密的数据,私钥是密钥对所有者持有,不可公布。
  4. 摘要: 对需要传输的文本,做一个HASH计算,一般采用SHA1,SHA2来获得。
  5. 签名: 使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。
  6. 签名验证: 数据接收端,拿到传输文本,但是需要确认该文本是否就是发送发出的内容,中途是否曾经被篡改。因此拿自己持有的公钥对签名进行解密(密钥对中的一种密钥加密的数据必定能使用另一种密钥解密。),得到了文本的摘要,然后使用与发送方同样的HASH算法计算摘要值,再与解密得到的摘要做对比,发现二者完全一致,则说明文本没有被篡改过。
  7. 密钥分为两种: 对称密钥非对称密钥
    1. 对称密钥加密: 又称私钥加密或会话密钥加密算法,指的就是加、解密使用的同是一串密钥,所以被称做对称加密。它的最大优势是加/解密速度快,适合于对大数据量进行加密,但密钥管理困难。
    2. 非对称密钥加密: 又称公钥密钥加密。指的是加、解密使用不同的密钥,一把作为公开的公钥,另一把作为私钥保存。公钥机制灵活,但加密和解密速度却比对称密钥加密慢得多。

Tips:

  • 密钥指的是私钥或者公钥 —> 密钥 = 私钥/公钥;
  • 密钥对指的是公钥加上私钥 —> 密钥对 = 私钥+公钥;
  • 非对称加密:
    • 公钥和私钥是成对的,公钥和私钥唯一对应,它们互相解密。
    • 公钥一般用来加密和验证签名,私钥用来签名和解密。
    • 加密(加解密): 公钥加密,私钥解密;加密的目的是保证信息的保密传输,使只有具备资格的一方才能解密。
    • 认证(加验签): 私钥数字签名,公钥验证签名;加签的目的是让收到消息的一方确认该消息是由特定方发送的。
  • 在实际的应用中,通常将两者结合在一起使用,例如,对称密钥加密系统用于存储大量数据信息,而公开密钥加密系统则用于加密密钥。

原文链接:https://blog.csdn.net/qq_41586280/article/details/82669840

PEM 格式

  1. PEM格式是证书颁发机构颁发证书的最常见格式.PEM证书通常具有扩展名,例如.pem,.crt,.cer和.key。
  2. 它们是以二进制文件的Base64编码的保存,包含“—– BEGIN CERTIFICATE —–”和“—– END CERTIFICATE —–”语句。
  3. 服务器证书,中间证书和私钥都可以放入PEM格式。
  4. 相较于PEM的Base64编码格式以文本文件的形式存在,CERT格式的文件为PEM的二进制格式,文件扩展名.cert /.cer /.crt。
  5. KEY格式通常用来存放公钥或者私钥,并非X.509证书,编码可能是PEM也有可能是DER,扩展名为 .key。

Apache和其他类似服务器使用PEM格式证书。几个PEM证书,甚至私钥,可以包含在一个文件中,一个在另一个文件之下,但是大多数平台(例如Apache)希望证书和私钥位于单独的文件中。

DER 格式

  1. DER格式只是证书的二进制形式,不含私钥。
  2. 文件扩展名通常是.cer,有时会有.der的文件扩展名。
  3. 判断DER .cer文件和PEM .cer文件方法是在文本编辑器中打开它,并查找BEGIN / END语句。
  4. 所有类型的证书和私钥都可以用DER格式编码。
  5. DER通常与Java平台一起使用。
  6. SSL转换器只能将证书转换为DER格式。

PKCS#7 / P7B 格式

  1. PKCS#7是签名或加密数据的格式标准,官方称之为容器。由于证书是可验真的签名数据,所以可以用SignedData结构表述。
  2. PKCS#7或P7B格式通常以Base64 ASCII格式存储,文件扩展名为.p7b或.p7c。
  3. P7B证书包含“—– BEGIN PKCS7 —–”和“—– END PKCS7 —–”语句。
  4. P7B文件仅包含证书和链证书,而不包含私钥。
  5. 多个平台支持P7B文件,包括Microsoft Windows和Java Tomcat。

PKCS#12 / PFX 格式

  1. PKCS#12 是公钥加密标准,通用格式(rsa公司标准)。规定了可包含所有私钥、公钥和证书。文件格式是加密过的。
  2. PKCS#12 或 PFX 格式是其以二进制格式存储,也称为 PFX 文件,在windows中可以直接导入到密钥区。也可用于导入和导出证书和私钥。
  3. PKCS#12 由 PFX 进化而来的,用于交换公共的和私有的对象的标准格式。
  4. 文件通常具有扩展名,例如.pkcs12 .pfx .p12。
  5. 密钥库和私钥用相同密码进行保护

JKS 格式

  1. JKS是java用来存储密钥的容器。可以同时容纳n个公钥或私钥,后缀一般是.jks或者.keystore或.truststore等。
  2. 在Java 8之前,这些文件的默认格式为JKS(android .keystore 也是jsk格式的证书)。
  3. 从Java 9开始,默认的密钥库格式为PKCS12。
  4. Android签名keystore文件也是jks格式,且1.8之后要求转换到p12格式。
  5. JKS是二进制格式,同时包含证书和私钥,一般有密码保护,只能存储非对称密钥对(私钥 + x509公钥证书)。
  6. 当应用程序需要通过SSL / TLS进行通信时,在大多数情况下将使用java keystore和java truststore。
  7. 密钥库和私钥用不同的密码进行保护

JKS和PKCS12之间的最大区别是JKS是Java专用的格式,而PKCS12是存储加密的私钥和证书的标准化且与语言无关的方式。

格式转换

OpenSSL是一个非常有用的开源命令行工具包,可用于 X.509 证书,证书签名请求(CSRs)和加密密钥。

查看证书

  • 查看 PEM证书 openssl x509 -text -noout -in CERTIFICATE.pem
  • 查看 DER证书 openssl x509 -inder der -text -noout -in CERTIFICATE.der
  • 查看 CSR证书 openssl req -text -noout -in mysite.csr
  • 查看 P7B证书 openssl pkcs7 -inform der -in CERTIFICATE.p7b -print_certs -text
  • 查看 JKS证书 keytool -list -rfc -keystore server.jks -storepass XXXXXX

转换证书

转换 PEM证书(.pem /.crt /.cer)
  • PEM to DER openssl x509 -outform der -in CERTIFICATE.pem -out CERTIFICATE.der
  • PEM to P7B openssl crl2pkcs7 -nocrl -certfile CERTIFICATE.cer -certfile CACert.cer -out CERTIFICATE.p7b
  • PEM to PFX openssl pkcs12 -export -out CERTIFICATE.pfx -inkey PRIVATEKEY.key -in CERTIFICATE.crt [-certfile CACert.crt] openssl pkcs12 -export -out CERTIFICATE.pfx -inkey PRIVATEKEY.key -in CERTIFICATE.cer [-certfile CACert.cer] openssl pkcs12 -export -out server.p12 -inkey server.key -in server.pem
转换 DER证书(der /.crt /.cer)
  • DER to PEM openssl x509 -inform der -in CERTIFICATE.cer -out CERTIFICATE.pem
转换 P7B证书(.p7b /.p7c)
  • P7B to PEM openssl pkcs7 -print_certs -in CERTIFICATE.p7b -out CERTIFICATE.cer
  • P7B to PFX openssl pkcs7 -print_certs -in CERTIFICATE.p7b -out CERTIFICATE.cer
转换 PFX证书(.pkcs12 /.pfx /.p12)
  • PFX to PEM openssl pkcs12 -in CERTIFICATE.pfx -out CERTIFICATE.cer -nodes konwersja poprze OpenSSL openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem

(PFX to PEM后CERTIFICATE.cer文件包含认证证书和私钥,需要把它们分开存储才能使用。)

常用选项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-inform PEM|DER    输入格式 - DERPEM(x509默认为PEM-in infile         输入文件(x509默认为stdin)
-outform PEM|DER   输出格式 - DERPEM(x509默认为PEM-out outfile       输出文件(x509默认为stdout)
-keyform PEM|DER|ENGINE 私钥格式 - 默认PEM
-passin val        私钥密码/口令来源
-modulus           打印RSA密钥模数
-pubkey            输出公钥
-fingerprint       打印证书的指纹
-alias             输出证书别名
-noout             没有输出,只有状态
-nocert            无证书输出
-trustout          输出一个受信任的证书
-setalias val      设置证书别名
-days int          签署的证书到期前的时间 - 默认 30-signkey val       用参数自行签署证书
-x509toreq         输出一个认证请求对象
-req               输入是一个证书请求,签署并输出
-CA infile         设置CA证书,必须是PEM格式
-CAkey val         设置 CA 密钥,必须是 PEM 格式;如果不在 CAfile 中
-text              打印文本形式的证书
-ext val           打印各种X509V3扩展文件
-extfile infile    要添加X509V3扩展的文件
-writerand outfile 将随机数据写到指定文件中
-extensions val    要使用的配置文件中的部分
-nameopt val       各种证书名称选项
-certopt val       各种证书文本选项
-checkhost val     检查证书是否与主机匹配
-checkemail val    检查证书是否与电子邮件匹配
-checkip val       检查证书是否与ipaddr匹配
-CAform PEM|DER    CA格式--默认PEM
-CAkeyform PEM|DER|ENGINE      CA密钥格式--默认为PEM

-export        输出PKCS12文件
-nodes         不要加密私钥
-nokeys        不输出私钥
-keysig        设置 MS 密钥签名类型
-nocerts       不输出证书
-clcerts       只输出客户证书
-cacerts       只输出CA证书
-info          打印有关PKCS#12结构的信息
-chain         添加证书链
-certpbe val   证书PBE算法(默认为RC2-40)
-inkey val     如果不是infile,则为私钥
-certfile infile   从文件中加载证书
-CApath dir    PEM格式的CA的目录
-CAfile infile     PEM格式的CA的文件
-no-CAfile     不加载默认的证书文件
-no-CApath     不从默认的证书目录中加载证书

Reference

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
再谈加密-RSA非对称加密的理解和使用
枕边书
2018/01/04
2.7K0
OpenSSL 转换证书格式
工作中我相信你一定会遇到处理数字证书的时候。各种平台,各种语言,它们采用的证书格式与标准都不相同,多多少少存在一些差异。实际上证书仍然是那个证书,只是格式发生了变化。 公私钥 分开存储 公私钥合并为一个文件 有些采用二进制文件 有些事二进制文件做了BASE64编码 有些证书做了签名 有些证书加入了密码 不同组织有不同的编码。例如微软喜欢使用 x509 下面内容节节选自《Netkiller Cryptography 手札》 接下来几天我们将讨论密钥证书相关话题。 文章出处: http://www.netk
netkiller old
2018/03/05
4.2K0
nginx配置证书和私钥进行SSL通信验证
正常项目的私钥和服务端证书会放在项目中或者外挂到linux服务器某个路径下,现在的需求是客户手动创建的新的证书,替换后项目证书仍然生效,且功能能正常使用。
刘大猫
2025/01/26
2800
pem 文件详解
.DER:用二进制DER编码的证书;.PEM:用ASCLL(BASE64)编码的证书; .CER:存放公钥,没有私钥; .PFX:存放公钥和私钥(pem 后缀的证书都是base64编码;der 后缀的证书都是二进制格式;crt .cer 后缀的文件都是证书文件(编码方式不一定,有可能是.pem,也有可能是.der);.pfx 主要用于windows平台,浏览器可以使用,也是包含证书和私钥,获取私钥需要密码才可以)
用户8418197
2022/02/17
21.8K0
使用 openssl 生成证书(含openssl详解)
openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。 官网:https://www.openssl.org/source/
菲宇
2019/06/12
17.1K0
使用 openssl 生成证书(含openssl详解)
非对称加密与安全证书看这一篇就懂了 转
前几日做支付对接时,被对方文档中的加密方式搞晕乎了一会。意识到证书加密方面的理解不够深入,事后查阅参考资料补习一波。本文是根据期间的学习,以及长期以来的实践做出的总结。
wuweixiang
2018/08/14
1.5K0
非对称加密与安全证书看这一篇就懂了
                                                                            转
java pfx_如何在Java处理PFX格式证书
公钥加密技术12号标准(Public Key Cryptography Standards #12,PKCS#12)为存储和传输用户或服务器私钥、公钥和证书指定了一个可移植的格式。它是一种二进制格式,这些文件也称为PFX文件。
全栈程序员站长
2022/08/14
1.9K0
SSL 证书基本概念扫盲
keytool 是 java JDK 自带的证书管理工具,使用 keytool 可以生成密钥,创建证书。只要装了 jdk,并正确设置了环境变量,就可以之间通过命令行执行 keytool 命令来管理证书。
JMCui
2023/03/02
8510
如何使用SSL证书
SSL证书是用于在WEB服务器与浏览器以及客户端之间建立加密链接的加密技术,通过配置和应用SSL证书来启用HTTPS协议,来保护互联网数据传输的安全,全球每天有数以亿计的网站都是通过HTTPS来确保数据安全,保护用户隐私。
用户8418197
2021/09/05
3.6K0
系统安全加密验证签名之Openssl命令
描述:OpenSSL是一个开源项目,它是安全套接字层密码库(Secrue socket layer)和传输层安全(transport layer security,TLS)协议的实现,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议(SSL/TLS工具集),并提供丰富的应用程序供测试或其它目的使用。
全栈工程师修炼指南
2022/09/29
4.4K0
系统安全加密验证签名之Openssl命令
jks 证书文件的生成步骤
作为文件形式存在的证书,一般有三类: A. 包含有私钥的证书,包含了公钥和私钥,用pkcs12标准,而一般以pfx 作为扩展名; B. DER 编码证书,不含私钥,以cer 结尾,文件是二进制data. 通常CA(无论是intermediate CA还是root CA)证书都是这类; C. BASE64编码的证书,这类证书也不含私钥,一般也以cer结尾,是pem证书, 这类证书可以直接cat 出结果, 特征是”-----BEGIN CERTIFICATE----- “开头,“-----END CERTIFICATE-----”结尾;
qsjs
2022/09/09
6.1K0
PKI体系及常见证书
大家好,又见面了,我是你们的朋友全栈君。 http://blog.chinaunix.net/space.php?uid=23637692&do=blog&id=3057988 1.PKI体
全栈程序员站长
2022/09/27
2.6K0
netty系列之:对聊天进行加密
在之前的文章中,我们讲到了怎么使用netty建立聊天室,但是这样的简单的聊天室太容易被窃听了,如果想要在里面说点悄悄话是很不安全的,怎么办呢?学过密码学的朋友可能就想到了一个解决办法,聊天的时候对消息加密,处理的时候再对消息解密即可。
程序那些事
2021/08/15
1.1K0
如何让Apache HttpClient 支持SSL配置?
按照Httpclient的设计要求编写一个响应信息处理类,也可以使用匿名内部类或者Lambda表达式。
阿东
2024/05/08
9130
如何让Apache HttpClient 支持SSL配置?
证书,密钥,加密,rsa到底是啥?
证书也叫CA(Certification Authority)证书;密钥就是用来加解密用的文件或者字符串;rsa即非对称加密算法。
老高的技术博客
2022/12/28
4.2K1
证书,密钥,加密,rsa到底是啥?
基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等
在社区中,分享了很多篇基于Netty编写的IM聊天入门文章(比如《跟着源码学IM》系列、《基于Netty,从零开发IM》系列等),在这些文章中分享了各种IM通信算法原理和功能逻辑的实现。但是这样简单的IM聊天系统是比较容易被窃听的,如果想要在里面说点悄悄话是不太安全的。
JackJiang
2022/12/22
1.1K0
基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等
linux openssl制作ssl证书_openssl生成自签名证书 c++代码
最近,被分配了一个任务,完成数字证书管理系统的开发,一开始我是一脸懵逼的,因为以前我对于什么数字证书都没了解过,可谓了一片空白,也不知其是用来干嘛的。于是,我奋发图强,用了一个下午加晚上的时间来脑补这部分概念知识,原来数字证书其实就是网站的身份认证。
全栈程序员站长
2022/11/04
4K0
linux openssl制作ssl证书_openssl生成自签名证书 c++代码
非对称加密与安全证书看这一篇就懂了
前几日做支付对接时,被对方文档中的加密方式搞晕乎了一会。意识到证书加密方面的理解不够深入,事后查阅参考资料补习一波。本文是根据期间的学习,以及长期以来的实践做出的总结。
用户1263954
2018/07/30
1.8K0
非对称加密与安全证书看这一篇就懂了
openssl原理与操作
OpenSSL 是一个强大的安全套接字层密码库,包括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
五分钟学SRE
2023/11/17
1.2K0
openssl原理与操作
Java扩展工具使用说明补充
描述:keytool是JDK中工具对JDK版本要求不高,但基于现在JDK版本的安全性考虑,建议使用JDK8及以上版本
全栈工程师修炼指南
2022/09/29
1.1K0
相关推荐
再谈加密-RSA非对称加密的理解和使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验