什么是数字证书
数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。
最简单的数字证书包括公钥,名称,签发机构签名和有效时间;数字证书可用于加密,解密;X509签发出的数字证书只包含公钥,但没有私钥,私钥和公钥是一对。
公钥&私钥
公钥和私钥是唯一一对匹配的非对称的秘钥,公钥和私钥是有算法的,比如RSA,这种算法标准是由公钥加密标准(The Public-Key Cryptography Standards,PKCS)制定的,PKCS也分版本PKCS#8,PKCS#12。而RSA是PKCS众多版本中定义的一种加密算法( Algorithm ),PKCS还制定了一些你可能看过但不是很了解的数字证书标准X.509,后面章节会描述加密算法。
公钥和秘钥都可以用于加密和解密,典型的场景就是HTTPS网站。在某些场景里,私钥加密叫做签章,也叫数字签名;公钥解密叫做验章,也叫做验证签名。
如何生成数字证书
用证书生成工具(openssl,keytool)生成私钥private.key
用私钥生成证书签名请求certificate.csr(certificate sign request),顾名思义,证书签名请求文件是做申请用的,向谁申请?CA
CA中心给Certificate.csr文件签名,标志为已签发证书,通常会生成X.509证书*.cer/*.crt,这个签发出来的证书就是所谓的数字证书。
CA
权威CA
CA就是Certificate Authority,证书授权中心。通常是世界上具有权威,可信赖,公正的第三方机构。
实际案例就是我们自己签发的证书放在web容器里是会被浏览器告警的,但CA签发的就不会,因为浏览器厂商是信任这些CA中心签发的证书的。
当然,找这些第三方机构签发证书,是要付费的。
也可以制作私有CA,比如用openssl创建CA,用于建立私有的证书生态,创建RootCA,再由RootCA签发SubCA,通过证书连体系的特征用于不同的场景。
自建CA
可以利用openssl自建CA中心。openssl出厂自带CA,本身就具备了CA特性,当然自建也是允许的。
如果想建立一组局域网内部的证书生态,可以考虑自建CA。
证书使用
签章,数字签名
用哈希函数计算出报文摘要 SHA-256(content)
用私钥加密摘要,加密后追加在报文后面 encrypt
Base64转码追加签章后的报文
Base64解码,再获取报文,摘取出未加密的报文,
用同样的哈希函数计算出摘要
再用公钥解密签名得到解密后的摘要,解密后的摘要内容与计算出的摘要内容一致,说明验证成功
以上的用例有很多:JWT,SAML,OAuth2.0.
为啥非要用私钥才叫签章?签章的用途就是为了让别人一看就知道是我。就跟盖章是一个概念。
当然这里还包含一层意思,就是签章报文生成出来是防止篡改,除非篡改者自己有我的私钥。
加密解密
加解密需要有一定的算法,比如RSA,ECC,SM2等等。
Java证书
Java中JDK提供Keytool工具操作和管理证书。
jre/lib/security/cacerts为JVM信任证书库,密码为changeit
在没有容器存在的java运行环境,访问https请求需把证书添加到该JVM库中。当然可以改造httpconnect,不做证书信任判断。
之前说到的所有证书操作都是可以通过keytool实现的。
标志证书库,标志工程为TLS工程,需https协议访问
信任证书库,管理所有服务提供方的证书,信任这些服务提供方提供的SSL证书,通常是信任证书接口
Openssl
OpenSSL可以创建证书,也可以解析SSL,通常运用场景比较多的是放在Nginx或Apache内使用
配置SSL站点
代理https
双向认证
Nginx双向认证
代理双向认证
配置双向认证
双向认证
通常我们运用的最多的是单向SSL认证,双向SSL认证区别于单向认证
服务器要验证客户端的证书
服务器用客户端公钥加密
客户端用服务器端公钥加密
双向认证需要服务器做额外的配置,启用客户端证书认证,并且配置信任客户端证书库。
客户端访问的时候,要导入客户端私钥和公钥文件,否则无法访问。
服务器端添加客户端公钥信任。
证书规范
数字证书规范,使用最多的是X.509,也称为X.509格式证书,证书包含信息如下:
X.509版本
证书持有人的公钥、算法
证书序列号
主体信息(CN=***,ou=***,o=***),创建证书时填写的信息
证书有效期
认证机构
发布者的数字签名
签名算法标志符,用来指定CA签署证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法。
X.509除了规范证书格式,还是ITU-T设计的PKI标准,什么是PKI?
PKI
概念
Public Key Infrastructure,公钥基础设施,是一种遵循标准的利用公钥加密技术为电子商务的开展提供一套安全基础平台的技术和规范。
X.509标准中,定义PKI为支持公开密钥管理并能支持认证、加密、完整性和可追究性服务的基础设施。
特性
保密性,保证不被窃取,加密
完整性,保证不被篡改,加密
身份认证与授权,保证交易双方的身份,签名
抗抵赖,防止交易双方任意一方抵赖交易,签名
核心标准
X.509格式证书
CRL(Certificate Revocation List),证书吊销列表
CA
操作协议
管理协议
政策制定
包含模块
CA,PKI核心
负责管理所有用户证书,绑定用户证书和信息,负责验证证书和用户信息
管理用户黑名单,负责登记和发布
X.500目录服务器,通常为LDAP,管理用户证书和黑名单信息
高强度SSL安全服务器(硬件)
Web安全通信平台,分成客户端和服务端,分别安装在客户端和服务端。
自开发应用系统,应用PKI的自主开发平台。比如:汽车、银行等高度安全的通讯技术行业。
基础技术
PKI的基础技术包括加密、数字签名、数据完整性机制、数字信封、双重数字签名等。一个典型、完整、有效的PKI应用系统至少应具有以下部分
公钥密码证书管理
黑名单的发布和管理
密钥的备份和恢复
自动更新密钥
自动管理历史密钥
支持交叉认证
子模块功能
认证机构(CA):即数字证书的申请及签发机关,CA必须具备权威性的特征;
数字证书库:用于存储已签发的数字证书及公钥,用户可由此获得所需的其他用户的证书及公钥;
密钥备份及恢复系统:如果用户丢失了用于解密数据的密钥,则数据将无法被解密,这将造成合法数据丢失。为避免这种情况,PKI提供备份与恢复密钥的机制。但须注意,密钥的备份与恢复必须由可信的机构来完成。并且,密钥备份与恢复只能针对解密密钥,签名私钥为确保其唯一性而不能够作备份。
证书作废系统:证书作废处理系统是PKI的一个必备的组件。与日常生活中的各种身份证件一样,证书有效期以内也可能需要作废,原因可能是密钥介质丢失或用户身份变更等。为实现这一点,PKI必须提供作废证书的一系列机制。
应用接口(API):PKI的价值在于使用户能够方便地使用加密、数字签名等安全服务,因此一个完整的PKI必须提供良好的应用接口系统,使得各种各样的应用能够以安全、一致、可信的方式与PKI交互,确保安全网络环境的完整性和易用性。
证书算法
常用的算法分为:对称、非对称、摘要
对称算法
对称,算法公开、计算量少、加密速度快,对于同样大小的传输对象,对称加密效率通常为非对称加密的千倍左右:
DES
3DES
AES
RC4
IDEA
但对称算法不是证书算法,证书秘钥是非对称的,要非对称算法,这里只是做一下对比。
非对称算法
非对称加密,对称密钥数据通信是单向安全的,客户端使用服务端的公钥加密数据传向服务端是严格加密安全的
RSA
DSA
Diffe-Hellman
ECC
非对称加密的主要用途:
单向传输加密数据,防止中间人攻击。使用公钥加密数据并传输给接受者,可以确保只有接受者才能获得明文信息,一般用于交换对称密钥;
身份验证和数据校验。发送方使用私钥加密明文数据的hash值,并将明文、加密后的数据和公钥一起发送给接收方,接收方只需要通过公钥解密密文,然后与相同hash算法获取明文的hash值进行比较,一致则说明明文数据没有被篡改,一般用于数字签名。
摘要算法
MD5
SHA-1
MAC
CRC
摘要算法也称为哈希算法、散列算法,可以将任意长度的数据转换成一个定长的、不可逆的数字。只要原文本不同,计算的结果必然不同(几乎不用考虑重复的情况)。摘要算法用于对比信息源是否一致,因为只要数据源发生变化,得到的摘要信息必然不同,通常用于签名校验。
常用证书文件
.csr:证书请求文件
.crt:微软定义的数字证书文件格式,同等于.cer文件
.cer:数字证书文件,目前用于X.509标准的数字证书文件
.der:辨别编码规则 (Distinguished Encoding Rule ) 可包含所有私钥、公钥和证书。它是大多数浏览器的缺省格式,并按 ASN1 DER 格式存储。它是无报头的 - PEM 是用文本报头包围的 DER。是证书的原始文件格式。
.pem:Privacy Enhanced Mail,Openssl的证书文件,有固定格式
内容类型,“——-BEGIN XXXX ——”,与结尾的“——END XXXX——”
头信息:表明数据是如果被处理后存放,openssl 中用的最多的是加密信息,比如加密算法以及初始化向量 iv
信息体:为 BASE64 编码的数据。可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ascii 报头包围,因此适合系统之间的文本模式传输
.key, 秘钥文件
.jks , .keystore, JAVA证书库
.bks, Android端的证书库,基于java keystore。
.pfx,.p12 :公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书。
.p7b : PKCS#7标准文件,包含公钥
————————————————
个人总结:
1.数字证书类似于我们的大学毕业证书,任何人都可以创建,但是只有大学的盖章才被信任.这个大学就是CA,如果不是受信任的CA的签名,浏览器访问时有警告信息.
2.数字证书_360百科 (so.com)