cer/crt是用于存放证书,它是2进制形式存放的,不含私钥。

pem跟crt/cer的区别是它以Ascii来表示,可以用于存放证书或私钥。

pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式。

p10是证书请求。

p7r是CA对证书请求的回复,只用于导入

p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。

二、证书文件/私钥文件

在HTTPS通讯中最常用的是cer/crt和pem。下面以pem格式的证书为例进行说明。下面是一个完整的PEM格式证书:

Certificate:

Data:

Version: 1 (0x0)

Serial Number: 1 (0x1)

Signature Algorithm: md5WithRSAEncryption

Issuer: C=US, ST=Montana, L=Bozeman, O=sawtooth, OU=consulting, CN=www.sawtooth-consulting.com/emailAddress=info@yassl.com

Validity

Not Before: Jun 30 18:52:17 2010 GMT

Not After : Mar 26 18:52:17 2013 GMT

Subject: C=US, ST=Montana, L=Bozeman, O=yaSSL, OU=support, CN=www.yassl.com/emailAddress=info@yassl.com

Subject Public Key Info:

Public Key Algorithm: rsaEncryption

RSA Public Key: (512 bit)

Modulus (512 bit):

00:c6:7b:c0:68:81:2f:de:82:3f:f9:ac:c3:86:4a:66:b7:ec:d4:f1:f6:64:21:ff:f5:a2:34:42:d0:38:9f:c6:dd:3b:6e:26:65:6a:54:96:dd:d2:7b:eb:36:a2:ae:7e:2a:9e:7e:56:a5:b6:87:9f:15:c7:18:66:7e:16:77:e2:a7

Exponent: 65537 (0x10001)

Signature Algorithm: md5WithRSAEncryption

58:a9:98:e7:16:52:4c:40:e7:e1:47:92:19:1b:3a:8f:97:6c:7b:b7:b0:cb:20:6d:ad:b5:d3:47:58:d8:e4:f2:3e:32:e9:ef:87:77:e5:54:36:f4:8d:50:8d:07:b4:77:45:ea:9d:a4:33:36:9b:0b:e0:74:58:11:c5:01:7b:4d

-----BEGIN CERTIFICATE-----

MIICFDCCAb4CAQEwDQYJKoZIhvcNAQEEBQAwgZ4xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdNb250YW5hMRAwDgYDVQQHEwdCb3plbWFuMREwDwYDVQQKEwhzYXd0b290aDETMBEGA1UECxMKY29uc3VsdGluZzEkMCIGA1UEAxMbd3d3LnNhd3Rvb3RoLWNvbnN1bHRpbmcuY29tMR0wGwYJKoZIhvcNAQkBFg5pbmZvQHlhc3NsLmNvbTAeFw0xMDA2MzAxODUyMTdaFw0xMzAzMjYxODUyMTdaMIGKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMHTW9udGFuYTEQMA4GA1UEBxMHQm96ZW1hbjEOMAwGA1UEChMFeWFTU0wxEDAOBgNVBAsTB3N1cHBvcnQxFjAUBgNVBAMTDXd3dy55YXNzbC5jb20xHTAbBgkqhkiG9w0BCQEWDmluZm9AeWFzc2wuY29tMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMZ7wGiBL96CP/msw4ZKZrfs1PH2ZCH/9aI0QtA4n8bdO24mZWpUlt3Se+s2oq5+Kp5+VqW2h58VxxhmfhZ34qcCAwEAATANBgkqhkiG9w0BAQQFAANBAFipmOcWUkxA5+FHkhkbOo+XbHu3sMsgba2100dY2OTyPjLp74d35VQ29I1QjQe0d0XqnaQzNpsL4HRYEcUBe00=

-----END CERTIFICATE-----

从Certificate开始到“-----BEGIN CERTIFICATE-----”为止,中间的内容是证书的明文格式。

从“-----BEGIN CERTIFICATE-----”开始到“-----END CERTIFICATE-----”为止是证书的明文格式经过ASN.1编码再经过Base64编码得到的。

证书中包含的内容以及ASN.1编码格式:

对于私钥文件,真正的私钥是包含在字符串"-----BEGIN PRIVATE KEY-----"和字符串"-----END PRIVATE KEY-----"之间。

如果该私钥文件是pkcs8格式的,那么该私钥文件的格式为

PrivateKeyInfo ::= SEQUENCE {

version Version(INTEGER),

privateKeyAlgorithm PrivateKeyAlgorithmIdentifier (AlgorithmIdentifier),

privateKey PrivateKey(OCTET STRING),

attributes [0] IMPLICIT Attributes OPTIONAL(SET OF Attribute)

如果不是pkcs8格式的,那么"-----BEGIN PRIVATE KEY-----"和"-----END PRIVATE KEY-----"之间的内容就是私钥的Base64编码。

在客户端或服务器在交换证书时,需要首先把Base64编码转换为ASCII编码再进行传输。

三、公钥/私钥

公钥和私钥是证书文件和私钥文件中最核心的内容。

在SSL/TLS协议中需要是用公钥算法,来进行对称密钥的交换。最常见的算法是RSA和DH,而RSA算法和DH算法的公钥、私钥的数据格式是不同的。

3.1 RSA算法

RSA算法简要描述如下:

n = p *q; p,q为互质的大素数

(d * e) mod ( (p-1) * (q-1) ) = 1

其中n,e为公钥,n,p,q,d,e自己保留。

加密方法:

Y(密文) = X(明文)**d mod n;

解密方法:

X(明文) = Y(密文)**e mod n;

公钥包含两个整数:

n RSA 合数模,是一个正整数

e RSA 公开幂,是一个正整数

私钥有两种表达方法,这两种方法是等价的。

n RSA 合数模,是一个正整数

d RSA 私有幂,是一个正整数

p 第一个因子,是一个正整数

q 第二个因子,是一个正整数

dP 第一个因子的CRT 幂,是一个正整数

dQ 第二个因子的 CRT 幂,是一个正整数

qInv (第一个)CRT 系数,是一个正整数

对于RSA算法中的公钥部分,包含两个INTEGER类型的数字n和e。

对于RSA私钥的第一种表述方法,私钥中包含5个INTEGER类型的数字依次为n, e, d, p, q;对于RSA私钥的第二种表达方法,私钥中包含8个INTEGER类型的数字依次为n, e, d, p, q, dP, dQ和qInv;

交互方法:

SSL/TLS协议中,服务器端用Certificate消息把证书(公钥)传递给客户端,客户端随机生成48byte的预主密钥,用公钥加密传递给服务器端,作为双方对称加密中一系列密钥计算的基础。如下图:

3.2 DH算法

算法原理:

DH算法用于交换对称密钥,不能用于非对称的加解密。

DH算法简要描述如下:

一个素数q和一个整数a, 称a是q的一个原根。

双方各自选定一个大数Xa和Xb,分别计算得到Ya = a**Xa mod q和Yb= a**Xb mod q;

双方交换Ya和Yb,保密Xa和Xb。

计算对称密钥的方法:

K = Ya**Xb mod q = Xb ** Ya mod q

密钥格式:

DH算法的公钥中包含了两个整数:a和q,用于生成对称密钥

服务器一端通过Certificate消息同步双方的a和q。

服务器紧接着选取Xa,计算得到Ya,并通过Server Key Exchange消息把Ya传递给客户端。

客户端选取Xb,计算得到Yb,并通过Client Key Exchange消息把Yb传递给服务器端。

双方分别计算K = Ya**Xb mod q = Xb ** Ya mod q,得到相同的预主密钥。

用于 X.509 公钥 证书 、属性 证书 、认证请求和认证路径验证的 PHP 库。 该库提供了 X.509 证书 的纯 PHP 实现。 类层次结构适应 ASN.1 类型,这使得 使用 相应的 RFC 作为参考文档变得容易。 X.509 证书 ( ) 证书 解码和编码 证书 签名 认证请求( ) CSR解码和编码 属性 证书 ( ) AC解码和编码 PHP >=7.2 这个库在Packagist上可用。 composer require sop/x509 示例位于/examples目录中。 创建 CA 证书 创建 CSR 颁发 证书 验证认证路径 该项目已获得MIT许可。
1、完整的X509 证书 解析 方案,C语言实现; 2、内含测试程序,在Linux环境下进入目录后make即可编译,已经在ubuntu16.04环境下编译测试OK; 4、已经在扫码POS认证中得到应用, 解析 证书 的序列号、公钥; 5、漂亮的 解析 ASN1(TLV数据格式)算法及完整 解析 X509 证书 逻辑 6、支持对der/pem格式的 证书 解析 7、内含base64编码/解码的C语言代码
X.509 证书 结构描述 X.509被广泛 使用 的数字 证书 标准,是由国际电联电信委员会(ITU-T)为单点登录(SSO-Single Sign-on)和授权管理基础设施(PMI-Privilege Management Infrastructure)制定的PKI标准。X.509定义了(但不仅限于)公钥 证书 证书 吊销清单、属性 证书 证书 路径验证算法等 证书 标准。 在X.509系统中,CA签发的 证书 ... X.509格式 证书 是被广泛 使用 的数字 证书 标准,是用于标志通讯各方身份信息的一系列数据。 1.2常见的X.509格式 证书 .cer/.crt是用于存放 证书 ,以二进制形式存放,不含私钥 .pem跟.crt/.cer的区别是它以Ascii来表示,可以用于存放 证书 或私钥。 .pfx/.p12用于存放个人 证书 /私钥,他通常包含保护密码, 1、什么叫数字签名 数字签名: 将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。 将该报文摘要值用发送者的私人密钥加密,然后连同原报文一起发送给接收者,而产生的报文即称数字签名 2、什么叫数字 证书 数字 证书 : 数字 证书 就是互联网通讯中标志通讯...
做实验的时候需要用到python3.7,Ubuntu18.04自带python3.6 想把它删掉结果用了auto remove这个命令,翻车了。 千万不要用auto remove命令删除ubuntu18自带的Python重新装,这个命令会删除它依赖的包,从而影响其他软件的 使用 ,比如图形化界面 只好重装unix系统 rufus制作启动盘 fat32格式(uefi不支持NTFS引导) uefi(非csm) 右键’此电脑’–>管理,进入计算机管理页面 查看磁盘管理,选中一个有空余空间的盘压缩出100G左右
X.509被广泛 使用 的数字 证书 标准,是由国际电联电信委员会(ITU-T)为单点登录(SSO-Single Sign-on)和授权管理基础设施(PMI-Privilege Management Infrastructure)制定的PKI标准。X.509定义了(但不仅限于)公钥 证书 证书 吊销清单、属性 证书 证书 路径验证算法等 证书 标准。 在X.509系统中,CA签发的 证书 依照X.500的管...
1、什么叫数字签名数字签名:将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。 将该报文摘要值用发送者的私人密钥加密,然后连同原报文一起发送给接收者,而产生的报文即称数字签名 2、什么叫数字 证书 数字 证书 :数字 证书 就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在In
X.509是# 公钥 证书 的格式标准, 广泛用于TLS/SSL安全通信或者其他需要认证的环境中。X.509 证书 可以由# CA颁发,也可以自签名产生。 1 Overview {#1-overview} X.509 证书 中主要含有公钥、身份信息、签名信息和有效性信息等信息。这些信息用于构建一个验证公钥的体系,用来保证客户端得到的公钥正是它期望的公钥。 公钥: 非对称密码中的公钥。公钥 证书 的目的就是为了在互联网上分发公钥。 身份信息: 公钥对应的私钥持有者的信息,域名以及用途等。 签名信息: 对公钥进...
1、X.509简介 X.509是密码学里公钥 证书 的格式标准。X.509 证书 已应用在包括TLS/SSL在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X.509 证书 里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是 证书 签发机构CA的签名,也可以是自签名)。 X.509还附带了 证书 吊销列表和用于从最终对 证书 进行签名的 证书 签发机构直到最终可信点为止的 证书 合法性验证算法。X.509是ITU-T标准化部门基于他们之前的ASN.1定义的一套 证书 标准。 2、 证书 组成
X.509标准简介 在和CA进行一些接触时,我们常常会听到一个名词: X.509。它是一种行业标准或者行业解决方案,在X.509方案中,默认的加密体制是公钥密码体制。为进行身份认证,X.509标准及公共密钥加密系统提供了数字签名的方案。用户可生成一段信息及其摘要(亦称作信息"指纹")。用户用专用密钥对摘要加密以形成签名,接收者用发送者的公共密钥对签名解密,并将之与收到的信息"指纹"进行比较,以确定其真实性。 此问题的解决方案即X.509标准与公共密钥 证书 。本质上, 证书 由公共密钥加密钥拥有者的用户标识组成,整
SSL Certificate实际上就是X.509 Certificate。X.509是一个定义了certificate结构的标准。它在SSL certificate中定义了一个数据域。X.509 使用 名为Abstract Syntax Notation One (ASN.1)的通用语言来描述certificate的数据结构。 X.509 certificate 有几种不同的格式,例如 PEM,...
import java.io.FileInputStream; import java.security.cert.CRL; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; public class X509CertParser { public static void main(String[] args) throws Exception { // 读取 X.509 证书 FileInputStream certFile = new FileInputStream("certfile.cer"); CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate) cf.generateCertificate(certFile); certFile.close(); // 读取 X.509 CRL FileInputStream crlFile = new FileInputStream("crlfile.crl"); CRL crl = cf.generateCRL(crlFile); crlFile.close(); // 获取 证书 和 CRL 的信息 System.out.println("Certificate Issuer: " + cert.getIssuerDN()); System.out.println("Certificate Subject: " + cert.getSubjectDN()); System.out.println("CRL Issuer: " + crl.getIssuerDN()); 在上面的示例代码中,我们 使用 `CertificateFactory` 类的 `getInstance` 方法来获取一个 X.509 证书 工厂。然后,我们 使用 `generateCertificate` 方法来从文件中读取 X.509 证书 并将其转换为 `X509Certificate` 对象。同样,我们 使用 `generateCRL` 方法来读取 CRL 文件并将其转换为 `CRL` 对象。最后,我们可以 使用 `getIssuerDN` 和 `getSubjectDN` 方法来获取 证书 的颁发者和主题信息,以及 `getIssuerDN` 方法来获取 CRL 的颁发者信息。