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文件包含认证证书和私钥,需要把它们分开存储才能使用。)

常用选项

 -inform PEM|DER    输入格式 - DER或PEM(x509默认为PEM)
-in infile 输入文件(x509默认为stdin)
-outform PEM|DER 输出格式 - DER或PEM(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

CA证书介绍与格式转换的更多相关文章

  1. tls/ssl证书生成和格式转换

    生成密钥:openssl genrsa -out my.key 2048 生成csr申请文件:openssl req -sha256 -new -key my.key -out my.csr 生成自签 ...

  2. 导入CA证书报错 keytool error: java.lang.Exception: Input not an X.509 certificate

    导入CA证书报错: keytool error: java.lang.Exception: Input not an X.509 certificate 如果你的CA证书是如下格式的: -----BE ...

  3. Cer Crt Pem Pfx 证书格式转换

    1.从pfx格式的证书提取出密钥和证书set OPENSSL_CONF=openssl.cnfopenssl pkcs12 -in my.pfx -nodes -out server.pemopens ...

  4. openssl的证书格式转换

    证书转换 PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 ...

  5. (备忘)openssl的证书格式转换

    PKCS 全称是Public-KeyCryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过15 个标准. ...

  6. web字体格式及几种在线格式转换工具介绍

    原文地址:http://blog.csdn.net/xiaolongtotop/article/details/8316554 目前,文字信息仍是网站最主要的内容,随着CSS3技术的不断成熟,Web字 ...

  7. CA证书和TLS介绍

    数字签名 用自己的私钥给数据加密就叫数字签名 公钥传输威胁 在A和B的通信中,C可以把自己的公钥发给A,让A把C的公钥当成B的公钥,这样的话.B拿到加密数据反而无法解密,而C却可以解密出数据.从而实现 ...

  8. CA和SSL证书介绍

    一.什么是CA? CA是证书的签发机构,它是公钥基础设施(Public Key Infrastructure,PKI)的核心.CA是负责签发证书.认证证书.管理已颁发证书的机关.CA 拥有一个证书(内 ...

  9. <经验杂谈>C#对CA证书加密解密的简单介绍

    最近做项目接触了一些关于用CA证书加密解密的知识,现在分享一下,加密主要分为对称加密和非对称加密以及单项加密这三种,CA是一个权威的第三方认证机构,CA加密有公钥和私钥之分. 以下是C#读取证书文件进 ...

随机推荐

  1. 【uniapp 开发】uni-app 资源在线升级/热更新

    注:本文为前端代码资源热更新.如果是整包升级,另见文档 https://ask.dcloud.net.cn/article/34972 HBuilderX 1.6.5 起,uni-app 支持生成 A ...

  2. mysql数据乱码

    更改数据库安装时的字符编码.打开mysql安装目录,找到my.ini文件,通过使用记事本的方式打开,将这里面的default-character-set=latin1修改成gbk,注意这里面有两处需要 ...

  3. vux+vue-cli3.0坑

    最近开发了项目使用了vue-cli3.0+vux搭建的项目,现在总结遇到的问题: 环境:github vux有关于vue-cli3.0以及vux已经搭建好的脚手架vux-cli3链接 一:如下报错 解 ...

  4. Mybatis-plugins分页助手实现查询数据分页

    其他具体代码接上文->mybatis自定义处理器 1.导入坐标 <dependency> <groupId>com.github.pagehelper</group ...

  5. Go xmas2020 学习笔记 10、Slices in Detail

    10-Slices in Detail. Slice. Empty vs nil slice

  6. Java 在Word指定段落/文本位置插入分页符

    在Word插入分页符可以在指定段落后插入,也可以在特定文本位置处插入.本文,将以Java代码来操作以上两种文档分页需求.下面是详细方法及步骤. [程序环境] 在程序中导入jar,如下两种方法: 方法1 ...

  7. sqlmap源码分析(一)

    Sqlmap源码分析(一) 此次分析的sqlmap目标版本为1.6.1.2#dev 只对sqlmap的核心检测代码进行详细分析其他的一带而过 sqlmap.py文件结构 为了不让篇幅过长下面只写出了s ...

  8. react实战系列 —— 起步(mockjs、第一个模块、docusaurus)

    其他章节请看: react实战 系列 起步 本篇我们首先引入 mockjs ,然后进入 spug 系统,接着模仿"任务计划"模块实现一个类似的一级导航页面("My任务计划 ...

  9. k8s 新版本 部署 Ingress-nginx controller

    k8s 新版本 部署 Ingress-nginx controller 本篇主要记录一下 k8s 新版本 1.23.5 中如何搭建 ingress controller 以及里面的注意项 新版本和老版 ...

  10. SerialPort-4.0.+ 使用说明(Java版本)

    SerialPort-4.0.+ 项目官网 Kotlin版本使用说明 介绍 SerialPort 是一个开源的对 Android 蓝牙串口通信的轻量封装库,轻松解决了构建自己的串口调试APP的复杂程度 ...