跳至正文

关于SSL证书你需要知道


概要

网上有很多解释PKI公钥基础设备架构,证书公钥的文章,对Nginx核心知识讲解-痞子胥-博客园证书关于 pem der cer crt csr pfx 的区别-庚庚911-CSDN的技术博客进行部分引用和整理。


概念与名词解释


从网络原理来看SSL安全协议

网络安全是当前非常受到关注的一个问题,大部分站点都是通过https来实现站点安全的,那么怎么样才能把自己的http站点变成https站点呢?我们需要了解SSL协议;
TLS协议究竟是怎么保证http的明文消息被加密的呢?
我们可以看下TLS的通用模型我们可以看下TLS的通用模型
image.png
在OSI七层模型中,应用层是http协议;那么在http协议之下,我们的表示层也就是SSL协议所发挥作用的这一层;它通过握手,交换秘钥,告警,对称加密应用数据等方式使http层没有感知的情况下做到了数据的安全加密;那么TLS是怎么做到数据的安全加密的呢?
image.png
当我们抓包或者观察服务器端的配置的时候,我们可以看类似于上图的配置;
这个安全密码的配置决定了我们的TLS协议是怎么样保证明文被加密的呢?
这里主要有四个组成部分
(1)秘钥交换:秘钥交换是为了解决浏览器和服务器之间是怎样各自独立的生成秘钥而最后生成的秘钥是相同的,接下来它们会用这个秘钥加密数据(ECDHE:椭圆曲线加密算法的表达)
(2)身份验证:在秘钥交换的过程中,我们需要验证各自的身份;而验证身份是需要算法的;(RSA算法用于身份验证)
(3)密码(算法、强度、模式):AES算法,128强度,GCM模式(提高多核CPU算法性能)
(4)MAC或PRF:SHA256是一个摘要算法,它把一个不定长度的字符串,生成固定长度的更短的一个摘要


对称加密&非对称加密

image.png
在对称加密中Alice和Bob,他们共同持有一段秘钥。Bob,可以把原始明文的文档,通过这把秘钥加密生成加密文档;Alice拿到这个文档以后尼他可以拿这把秘钥把加密文档转化为原始文档;而中间的任何人如果没有持有这把秘钥;即使它知道了对称加密的算法;他也没有办法把加密文档还原成原始文档;
那么对称加密究竟是怎么实现的?
我们可以以RC4对称加密(采用异或算法采用异或算法)的一个序列算法来看下;
image.png
同时,密文可以经过秘钥进行解密成明文,进行逆运算;
所以对称加密有一个最大的优点就是它的性能非常的好,它只需要遍历一次就可以进行加密,解密也只需要遍历一次;
image.png

非对称加密根据一个算法原理,它会生成一对秘钥;一对秘钥中,如果我们称其中一个为公钥,那么另一个就是私钥;那么公钥和私钥有什么特性?
就是同一份明文文档,如果用公钥加密了,那么只有经过私钥才能解密;同样的道理,如果文档用私钥加密了,那么用私钥才能解密;


PKI架构

在之前的加密过程中,我们谈论了Alice和Bob之间进行通讯;但是他们有个前提条件;Alice必须知道Bob就是Bob,也就是它收到的信息必须是由Bob发来的;那么这样的一个新的问题在多方通讯的一个过程中呢?必须有一个公信机构,那么这个机构就是CA机构,接下来我们看看CA是怎么样颁发证书和证书过期的?下面图中最右安CA就是CA机构,他负责颁发证书;而我们属于站点的维护者,就是下图最左边的证书订阅人;

image.png

首先我们作为证书订阅人,要去登记机构申请一个证书:登记机构验证订阅人的身份之后发通过CSR发送给CA机构,CA机构通过以后生成一对公钥和私钥,公钥会在CA证书中保存着;同时把公钥和私钥发放给证书订阅人;证书订阅人拿到公钥私钥以后会将其部署到Web服务器,比如Nginx;当浏览器通过第一步访问我们https站点的时候会请求证书,而我们的Web服务器会把我们的公钥证书发送给浏览器;而浏览器会经过验证我们的证书是否是合法和有效的;

结合我们日程生活来理解,类似如下关系:

证书申请 身份证申请
证书订阅人 申请人
证书签名申请CSR 申请时所填写申请表单
证书登记机构 户籍公安派出所
证书颁发机构CA 户籍地区公安分局
证书 身份证

DER

DER(Distinguished Encoding Rules)是BER(Basic Encoding Rules)的一个受限变体,用于为ASN.1中描述的数据结构生成明确的传输语法。与CER(Canonical Encoding Rules)一样,DER编码也是有效的BER编码。DER除了删除了一个发送者选项外,其他的与BER完全相同。
DER是BER的子集,提供了一种准确编码ASN.1值的方法。DER适用于需要唯一编码情况,例如在加密中,确保需要进行数字签名的数据结构产生一个唯一的序列化表示。DER可以被认为是BER的规范形式。例如,在BER中,布尔值true可以编码为255个非零字节值中的任何一个,而在DER中,只有一种方法编码布尔值true。
DER被广泛的用户数字证书,例如X.509。


PEM

PEM(Privacy-Enhanced Mail)是一种基于一组定义“隐私增强邮件”的1993IETF标准的文件格式,用于存储和发送加密密钥,证书和其他数据。虽然原始标准从未被广泛采用,并已经被PGP和S/MIME取代,但它们定义的文本编码方式流行起来了。PEM格式最终由IETF在RFC7468中正式确定。
许多加密标准使用ASN.1来定义它们的数据结构,使用区分编码规则(Distinguished Encoding Rules,DER)来序列化这些结构。由于DER产生二进制输出,它在传输结果文件通过只支持ASCII的系统系统时,具有很大的挑战性,比如通过电子邮件系统时。PEM格式则使用Base64编码二进制数据的方式解决了这个问题。PEM还定义了其文件格式

-----BEGIN (label) -----
...
-----END (label) -----

这个 label 决定了被编码消息的类型,通常这些类型有如下一些:
"CERTIFICATE", "CERTIFICATE REQUEST", "PRIVATE KEY" and "X509 CRL".
PEM 格式的数据通常存储在以 ".pem",".cer",".crt"(证书)或者".key"(公钥或私钥)为后缀的文件中。这个PEM文件中的lable字段比文件后缀名更加准确地代表了数据类型,因为许多不同类型的数据都可以保存在".pem"结尾的文件中。
一个PEM文件可能包含了多个实例。比如,一个操作系统可能提供一个含有一系列信任的"CA证书",或者web服务器可能配置了一个"证书链",该证书链包含了一个客户端证书加一系列的中间证书。
举例:
一个PEM编码的证书文件:

-----BEGIN CERTIFICATE-----
MIICLDCCAdKgAwIBAgIBADAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G
A1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2VydGlmaWNhdGUgYXV0aG9y
hvcNAQEBBQADggEPADCCAQoCggEBAMTwzCYD+iLlDwTu5Y43aQH9q1LF3kgot8I4
...
-----END CERTIFICATE-----

一个PEM编码的证书签名请求文件:

-----BEGIN CERTIFICATE REQUEST-----
MIICXTCCAUUCAQAwGDEWMBQGA1UEAwwNaGkgd2lraXBlZGlhITCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAMTwzCYD+iLlDwTu5Y43aQH9q1LF3kgot8I4
9ZgbFhDmCE4YlLhZKO4hieK6z8z+IfZjfapn01rzuzvTHESj5bSSU6AcEsKSOgT
...
-----END CERTIFICATE REQUEST-----

一个PEM编码的私钥文件:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAgGKD+Q4S8Ne/gchJOkbVL7wMYwS42OgK20f0JqWBPKq4WsSx
fg6XEE+4GZ4UNGuYT3mYMCZhzAOdZX3pY79qcrGlL6IpXiqTE1hdaMcajsH2p2Io
EsebOZS/ky+WHfke13rdfi0HF9rEvH1tI4DG4w1VTuYnMpX6trJS6h4xl2GseVT9
...
-----END RSA PRIVATE KEY-----

PKCS

在密码学里,PKCS代表"Public Key Cryptography Standards"(公开密钥密码学标准)。这些是RSA Security LLC从上世纪90年代初开始设计并发布的一组公钥加密标准。该公司发布这些标准是为了推广使用他们拥有专利的加密技术,比如RSA算法、Schnorr签名算法和其他一些技术。虽然不是行业标准(因为公司保留了对它们的控制),但近年来,一些标准已经开始进入相关标准组织的“标准跟踪”过程,如IETF和PKIX工作组

常见PKCS标准概况(PKCS#7 PKCS#10 PKCS#12)
image.png


CSR

在公钥基础设施(PKI)系统中,证书签名请求(certificate signing request,也称为CSR或certificate request)是申请人向证书颁发机构发送的一条消息,用于申请数字身份证书。它通常包含需要被颁发证书的公钥、标识信息(例如域名)和完整性保护(例如数字签名)。CSR最常见的格式是PKCS#10规范,另一种格式是由一些web浏览器生成的SPKAC(Signed Public Key and Challenge,签名公钥和挑战)格式。
认证请求由三个主要部分组成:认证请求信息、签名算法标识符和认证请求信息上的数字签名。第一部分包含重要信息,包括公钥。请求者的签名防止实体请求他人公钥的伪造证书。因此,生成CSR需要私钥,但私钥不是CSR的一部分。
第一部分,asn.1类型CertificationRequestInfo,包括版本号(对于所有已知版本规范1.0,1.5和1.7,它为0),主题名称、公钥(算法标识符+位串)和一组属性证书的主题提供额外的信息。这些属性可以包含所需的证书扩展名、限制撤销的质询密码,以及关于证书主题的任何附加信息(可能包括本地类型或未来类型)。
PKCS#10标准定义了用于编码CSR的二进制格式,以便与X.509一起使用。 它在ASN.1中进行了阐述。

openssl asn1parse -i -in your_request_file

CSR可以表示为Base64编码的PKCS#10。这里给了一个示例文件

-----BEGIN CERTIFICATE REQUEST-----
MIICzDCCAbQCAQAwgYYxCzAJBgNVBAYTAkVOMQ0wCwYDVQQIDARub25lMQ0wCwYD
VQQHDARub25lMRIwEAYDVQQKDAlXaWtpcGVkaWExDTALBgNVBAsMBG5vbmUxGDAW
BgNVBAMMDyoud2lraXBlZGlhLm9yZzEcMBoGCSqGSIb3DQEJARYNbm9uZUBub25l
LmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMP/U8RlcCD6E8AL
...
-----END CERTIFICATE REQUEST-----

这是通过在命令"openssl asn1parse -inform PEM -i -in your_request_file "中提供base64编码生成的,其中PEM代表Privacy-enhanced mail,并描述了base64中ASN.1 DER编码。
有CSR必定有KEY,是成对的,CSR最终变成为证书crt,和私钥key配对使用。
证书下发后,CSR就没有用了,只是在提交给证书颁发机构才需要。

  • 生成证书请求和私钥有很多方式,最简单就是通过VCO自带的`openssl`生成私钥(Key)和证书签名请求(CSR)(这一组合可以反复使用,无需每年生成新的Key和CSR,来年CSR可以直接提交给签发机构签发新的证书,那么在替换时只要替换证书即可。)
    以下为使用openssl生成私钥和证书签发请求:

    openssl genrsa -out server.key 2048 #可以通过openssl来生成私钥
    openssl req -new -key server.key -out server.csr -subj "/C=US/ST=California/L=Mountain View/O=Velocloud Networks Inc./OU=Development/CN=vco.velocloud.net"
    #根据实际申请域名,组织信息进行替换,生成证书签发请求

X.509

Public-Key Infrastructure (X.509) (pkix)
在密码学中,X.509是定义公钥证书格式的标准。X.509证书用于许多Internet协议,包括TLS/SSL,它是HTTPS(用于浏览web的安全协议)的基础。它们也用于离线应用程序,比如电子签名。一个X.509证书包含一个公钥和一个标识(主机名、组织或个人),由证书颁发机构签名或自签名。当证书由受信任的证书颁发机构签名时,或者通过其他方法进行验证时,持有该证书的人可以依赖于它包含的公钥来与另一方建立安全通信,或者验证由相应私钥数字签名的文档。
X.509还定义了证书撤销列表,这是一种分发被签名机构认为无效的证书信息的方法,以及认证路径验证算法,该算法允许证书由中间CA证书签名,而中间CA证书又由其他证书签名,最终到达信任锚。
X.509由国际电信联盟标准化部门(ITU-T)定义,并基于ITU-T的另一个标准ASN.1。


常见SSL证书(编码)格式

SSL Certificate实际上就是X.509 Certificate。X.509是一个定义了certificate结构的标准。它在SSL certificate中定义了一个数据域。X.509使用名为 Abstract Syntax Notation One (ASN.1)的通用语言来描述certificate的数据结构。
X.509 certificate 有几种不同的格式,例如 PEM,DER,PKCS#7 和 PKCS#12。 PEM和PKCS#7格式使用Base64 ASCII编码,而DER和PKCS#12使用二进制编码。certificate文件基于不同的编码格式有不同的文件扩展名。
如下图就展示了X.509证书的编码方式和文件扩展名。
image.png

  • PEM 格式
    大多数 CA (Certificate Authority) 提供了Base64 ASCII编码的PEM格式的certificate文件。这些证书文件的后缀可以是 .pem, .crt, .cer, .key。 以.pem结尾的文件可以将服务端证书(server certificate),中间证书(intermediate certificate)和私钥(private key)包含在一个文件中。服务端证书和中间证书也可以分别存放在.crt 和 .cer两个文件中。私钥可以单独在一个 .key文件中。
    PEM文件使用ASCII编码,所以你可以用文本编辑器打开它,例如notepad,微软的word等等。每一个PEM文件中的证书都在"---- BEGIN CERTIFICATE---- " 和 "----END CERTIFICATE----"语句之间。私钥包括在"---- BEGIN RSA PRIVATE KEY-----" 和 "-----END RSA PRIVATE KEY-----"语句之间。而CSR则包含在"-----BEGIN CERTIFICATE REQUEST----- " 和 "-----END CERTIFICATE REQUEST-----"语句之间。
  • PKCS#7 格式
    PKCS#7格式是一种加密消息语法标准。PKCS#7证书使用Base64 ASCII编码和文件扩展名 .p7b 或 .p7c 。只有证书可以存储在这种格式的文件中,私钥则不可以。P7B证书包含在"-----BEGIN PKCS7-----" 和 "-----END PKCS7-----" 语句之间。
  • DER 格式
    DER格式的证书是二进制形式,存储在以 .der 和 .cer 为扩展名的文件中。这些证书大部分使用在基于java的web服务器上。
  • PKCS#12 格式
    PKCS#12格式的证书也是二进制形式,存储在以 .pfx 或 .p12为扩展名的文件中。
    PKCS#12文件可以存储服务端证书,中间证书和私钥在一个 .pfx文件中,并且使用密码保护。 这类证书主要使用在Windows平台。
  • DER 实际上就是密钥的最原始的二进制格式;而PEM是对DER的Base64的编码,PEM解码后得到的就是DER编码格式。
    只要是文本格式的文件,用文本编辑器打开后查看关键语句即可。

常见SSL证书类型

DV SSL证书:指只验证网站域名所有权的简易型SSL证书,此类证书仅能起到网站机密信息加密的作用,无法向用户证明网站的真实身份

OV SSL 是 Organization Validation SSL 的缩写,指需要验证网站所有单位的真实身份的标准型SSL证书,此类证书也就是正常的SSL证书,不仅能起到网站机密信息加密的作用,而且能向用户证明网站的真实身份。

EV SSL 是 Extended Validation SSL 的缩写,指遵循全球统一的严格身份验证标准颁发的SSL证书,是目前业界最高安全级别的SSL证书。用户访问部署了EV SSL证书的网站,不仅浏览器地址栏会显示安全锁标志,而且浏览器地址栏会变成绿色。

image.png

证书类型 DV OV EV
申请资料 域名所有权确权 授权书公司营业执照扫描件等 授权书公司营业执照扫描件律师函等
CA审核方式 机器审核 人工审核 人工审核
申请耗时 小时 一般在几个工作日 一般在几个工作日
绿色地址栏

日常会碰到


常见SSL证书文件后缀转换

随着安全意识的增长,HTTPS也越来越普及了,公司内各种C/S架构的应用都要使用证书,证书与私钥文件直接暴露存在泄漏和盗用的风险。一般性有两种方式来降低风险,一种使用同一个证书管理软件,管理所有应用服务器的证书,进行统一生命周期的维护,减少证书流通。另一种就是降低传递中泄密的可能性,将证书和私钥打包成`*.pfx`文件,增加密码保护。

  • crt转pfx
    我们通常使用openssl来进行转换,网上有很多工具,但觉得还是很不安全,存在泄密的可能。
    将私钥文件`server.key`和服务器crt证书文件`server.crt`,放到openssl安装目录的bin目录下(如果已经将openssl添加到环境变量中,那这步可以省略)。
    控制台也进到此目录下,然后执行下面指令。
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
#会提示需要输入两遍密码,确保密码正确性

然后再看bin目录下面多了一个`server.pfx`文件,即为生成的pfx证书文件。

  • pfx转crt
    当然整个过程是可逆的,当你获得了`*.pfx`文件和验证密码,也可以把证书和key导出
    将`server.pfx`文件放到bin目录下,执行:
openssl pkcs12 -in server.pfx -nodes -out server.pem
openssl rsa -in server.pem -out server.key
openssl x509 -in server.pem -out server.crt

常见DV申请域名所有权确权方式

DV证书一般通过证书机构的网站直接购买,只要确认域名所有人后,会直接签发证书,如阿里云,Let's encrypted等。具体使用哪种方式取决于证书机构和申请人可实现的方式

  • 域名解析添加证书机构提供的TXT记录信息
    最常用方式,大部分证书机构都支持,域名控制人添加证书机构提供TXT记录,等待证书机构验证服务器扫描,完成验证后可以删除该记录。
  • 发送验证至域名邮箱控制人邮箱地址
    大部分证书机构都提供这种方式,但是接收邮箱地址不能手工填写。一般性两种情况:1.通过域名注册时登记的邮箱地址。2.admin@xxx.com等类似管理员邮箱地址的选项,如果没有相应邮箱,就需要临时创建用于接收验证信息。
  • 需要使用证书的服务器地址已添加A记录解析
    服务器相关IP和域名已经发布A记录,并在公网可以被证书机构访问,证书机构会提供一个验证文件放置在服务器上的指定目录,证书机构会进行检查,通过后也可以删除。

查看证书信息

如果你想知道网站证书有效期和其他证书的详细信息,可以通过点击浏览器地址栏file查看证书信息
常用的浏览器Edge,Chrome,Firefox的查看位置
image.png

主要能看到:

  1. 基本信息 类似我们使用的身份证。包括用于的主域名,签发机构,证书有效期。
  2. 详细信息 类似我们的个人档案,数据库或是户口本个人信息页,包含所有证书的属性,如系列号,指纹等更详细的信息。
  3. 证书链 类似族谱,记录父亲是谁,你父亲的父亲是谁。
    image.png

参考资料

Nginx系列7:SSL证书的公信力是如何保证的?
第十五讲:SSL证书的公信力是如何保证的?
SSL三种类型证书有什么区别?
ssl证书类型区别
证书关于 pem der cer crt csr pfx 的区别
DER、CRT、CER、PEM格式的证书及转换

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

13 + 14 =