网络/安全:CA证书
2019-04-19 15:48:20 0 举报
AI智能生成
证书相关笔记
作者其他创作
大纲/内容
References
Certificate authority
TLS 握手优化详解
数字证书用途
服务器端SSL证书
EV SSL 证书
Extended Validation SSL
浏览器地址栏变成绿色
OV SSL证书
Organization Validation SSL
验证证书申请单位的真实身份和验证域名所有权
DV SSL证书
Domain Validation SSL
不验证真实身份,而是仅仅验证域名所有权
WildCard 证书
通配符证书
Multi-Domain 证书
多域名证书
代码签名证书
内核代码签名证书
微软代码签名证书
火狐插件签名证书
Adobe AIR签名证书
Java代码签名证书
微软代码签名证书
火狐插件签名证书
Adobe AIR签名证书
Java代码签名证书
客户端数字证书
电子邮件加密证书
超酷个人证书
超真单位证书
PDF文件签名证书
超酷个人证书
超真单位证书
PDF文件签名证书
可信数字身份认证
可信网站认证
可信软件开发商认证
可信网商认证
可信软件开发商认证
可信网商认证
概念知识
SSL
安全套接层 (Secure Sockets Layer)
SSL记录协议 (SSL Record Protocol)
它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持
SSL握手协议 (SSL Handshake Protocol)
它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
最新版为SSL3.0
TLS
传输层安全 (Transport Layer Security)
LS 记录协议(TLS Record)
TLS 握手协议(TLS Handshake)
最新版为TLS1.3,基于SSL3.0
DTLS
数据包传输层安全性协议 (Datagram Transport Layer Security)
Datagram TLS试图在现存的TLS协议架构上提出扩展,使之支持UDP,即成为TLS的一个支持数据报传输的版本。
PKI
公钥基础设施 (Public Key Infrastructure)
CA
证书签证机关 (certificate authority)
认证中心负责签发证书、认证证书、管理已颁发证书的机关
PKI/CA认证中心
根证书
证书链 (Certificate-Chain)
根证书
中间证书
站点证书
中间证书
站点证书
证书
证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普遍遵循X.509 国际标准。
内容结构
Certificate Chain
根CA证书(Common Name)
DigiCert Global Root CA
所有者和发布者信息相同,自签名
中间证书(Common Name)
DigiCert SHA2 Secure Server CA
发布者是根CA证书所有者
站点证书(Common Name)
*.enn.cn
发布者是中间证书所有者
配置注意
1)证书是在握手期间发送的,由于 TCP 初始拥塞窗口的存在,如果证书太长可能会产生额外的往返开销
2)如果证书没包含中间证书,大部分浏览器可以正常工作,但会暂停验证并根据子证书指定的父证书 URL 自己获取中间证书。
这个过程会产生额外的 DNS 解析、建立 TCP 连接等开销,非常影响性能。
这个过程会产生额外的 DNS 解析、建立 TCP 连接等开销,非常影响性能。
配置证书链的最佳实践是只包含站点证书和中间证书,不要包含根证书,也不要漏掉中间证书。
大部分证书链都是「站点证书 - 中间证书 - 根证书」这样三级,这时服务端只需要发送前两个证书即可。
但也有的证书链有四级,那就需要发送站点证书外加两个中间证书了。
但也有的证书链有四级,那就需要发送站点证书外加两个中间证书了。
Subject Name
证书所有者信息
Country of Region
区域国家
CN
Locality
所在地址
Langfang
Orgnization
组织名称
ENN Group CO., Ltd.
Orgnizational Unit
部门名称
IT Infrastructure Center
Common Name
所有者的通用名称
*.enn.cn
Issuer Name
证书发布者信息
Country of Region
US
Orgnization
DigiCert Inc
Common Name
DigiCert SHA2 Secure Server CA
Serial Number
0F A4 63 27 BA B8 EB 1C 13 B1 94 62 97 3C 6F 7B
Version
3
Signature Algorithm
SHA-256 with RSA Encryption ( 1.2.840.113549.1.1.11 )
Parameters
None
Not Valid Before
Friday, March 2, 2018 at 08:00:00 China Standard Time
Not Valid After
Thursday, June 6, 2019 at 20:00:00 China Standard Time
Public Key Info
Algorithm
RSA Encryption ( 1.2.840.113549.1.1.1 )
Parameters
None
Public Key
256 bytes
Exponent
公钥指数
65537
Key Size
2,048 bits
Key Usage
Encrypt, Verify, Wrap, Derive
Signature
256 bytes
Extensions
Extension
Extension
Key Usage ( 2.5.29.15 )
Critical
YES
Usage
Digistal Signatrue, Key Encipherment
Extension
Extension
Basic Constraints ( 2.5.29.19 )
Critical
NO
Certificate Authority
NO
Extension
Extension
Extended Key Usage ( 2.5.29.37 )
Critical
NO
Purpose #1
Server Authentication ( 1.3.6.1.5.5.7.3.1 )
Purpose #2
Client Authentication ( 1.3.6.1.5.5.7.3.2 )
Extension
Extension
Subject Key Identifier ( 2.5.29.14 )
Critical
NO
Key ID
0F 80 61 1C 82 31 61 D5 2F 28 E7 8D 46 38 B4 2C E1 C6 D9 E2
Extension
Extension
Subject Alternative Name ( 2.5.29.17 )
Critical
NO
DNS Name
*.enn.cn
带通配符的二级域名
DNS Name
enn.cn
一级域名
Extension
Extension
Certificate Policies ( 2.5.29.32 )
Critical
NO
Policy ID #1
( 2.16.840.1.114412.1.1 )
Qualifier ID #1
Certification Practice Statement ( 1.3.6.1.5.5.7.2.1 )
CPS URI
https://www.digicert.com/CPS
Policy ID #2
( 2.23.140.1.2.2 )
Extension
Extension
CRL Distribution Points ( 2.5.29.31 )
Critical
NO
URI
http://cdp1.digicert.com/ssca-sha2-g6.crl
Extension
Extension
Embedded Signed Certificate Timestamp List ( 1.3.6.1.4.1.11129.2.4.2 )
Critical
NO
SCT Version
1
Log Key ID
A4 B9 09 90 B4 18 58 14 87 BB 13 A2 CC 67 70 0A 3C 35 98 04 F9 1B DF B8 E3 77 CD 0E C8 0D DC 10
Timestamp
Friday, March 2, 2018 at 14:09:40 China Standard Time
Signatrue Algorithm
SHA-256 ECDSA
Signatrue
71 bytes
Extension
Extension
Certificate Authority Information Access ( 1.3.6.1.5.5.7.1.1 )
Critical
NO
Method #1
Online Certificate Status Protocol ( 1.3.6.1.5.5.7.48.1 )
URI
http://ocsp1.digicert.com/
Method #2
CA Issuers ( 1.3.6.1.5.5.7.48.2 )
URI
http://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt
Fingerprints
SHA-256
87 FB 82 52 CF BE E6 1F F1 BE F9 1F 2E C6 44 B2 30 9E A3 D8 6D 5E 1C 3A BE 5E 7B 26 EA 76 5D 4B
SHA-1
BF 72 6D C4 03 BF 26 00 B8 EF E1 F4 8B D0 21 A3 0F 06 40 74
加密算法
根据密钥类型不同,算法分为两类
对称加密算法
加密和解密均采用同一把秘密钥匙
非对称加密算法
分为加密钥匙(公钥)和解密钥匙(私钥)
公钥加密签名算法
RSA
SHA256withRSA
一般为CA中心的证书使用该签名算法
可以签署证书
非对称加密算法
RSA的安全性是基于极其困难的大整数的分解(两个素数的乘积)
内置 RSA 公钥的证书就是 RSA 证书
DSA
SHA1withDSA
一般用于数字签名和认证
不可以签署证书
非对称加密算法
DSA 的安全性是基于整数有限域离散对数难题
在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥
来验证签名的真实性
来验证签名的真实性
DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,
只用于签名,它比RSA要快很多
只用于签名,它比RSA要快很多
ECC
SHA256withECDSA
Elliptic Curve Cryptography,椭圆曲线密码学证书
进一步减小证书大小
256 位的 ECC Key 等同于 3072 位的 RSA Key,在确保安全性的同时,体积大幅减小
ECC SSL证书兼容性
ECC 与 RSA 相比
(1)相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。
(2)计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
(3)存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
(4)带宽要求低使得ECC具有广泛得应用前景。
(2)计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
(3)存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
(4)带宽要求低使得ECC具有广泛得应用前景。
内置 ECDSA 公钥的证书一般被称之为 ECC 证书
证书作用
保密性 - 只有收件人才能阅读信息。
认证性 - 确认信息发送者的身份。
完整性 - 信息在传递过程中不会被篡改。
不可抵赖性 - 发送者不能否认已发送的信息。
保证请求者与服务者的数据交换的安全性
认证性 - 确认信息发送者的身份。
完整性 - 信息在传递过程中不会被篡改。
不可抵赖性 - 发送者不能否认已发送的信息。
保证请求者与服务者的数据交换的安全性
证书编码方式
PEM
扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书。
文件开始由一行"—– BEGIN …“开始。
文件开始由一行"—– BEGIN …“开始。
DER
扩展名DER用于二进制DER编码的证书
公钥
公钥用于加密,它是向所有人公开的
私钥(密钥)
私钥用于解密,只有密文的接收者持有
身份认证
受信任的根证书颁发机构
受信任对中级CA机构
鉴别证书真伪
用 CA 的公钥对证书上的签字进行验证
证书吊销
CRL(Certificate Revocation List,证书吊销列表)
证书颁发机构定期更新,实时性很难得到保证
OCSP(Online Certificate Status Protocol,在线证书状态协议)
在线查询接口
OCSP Stapling(OCSP 封套)
是指服务端在证书链中包含颁发机构对证书的 OCSP 查询结果,从而让浏览器跳过自己去验证的过程。
SSL认证方式
单向认证
服务端需配置证书,客户端不需要证书
客户端验证服务端证书
客户端生成都对称加密密钥,使用服务端都公钥进行加密
数据传输使用对称加密
双向认证
服务端和客户端都需配置证书
客户端验证服务端证书
服务端验证客户端证书
数据传输使用对称加密
常见扩展名
.key
包含了公钥和密钥
.pem
.der
.csr
.req
.req
证书签名请求文件 (Certificate Signing Request)
.cer (微软型式)
.crt (unix/linux)
.crt (unix/linux)
证书,包含公钥和用户信息等,不包含密钥
.p12
.pfx
.pfx
公钥加密技术12号标准 (Public Key Cryptography Standards #12)
PKCS#12是一种交换数字证书的加密标准,用来描述个人身份信息。如:用户公钥、密钥、证书等。
为存储和传输用户或服务器密钥、公钥和证书指定了一个可移植的格式
.keystore
.jks
.jks
Java数据证书仓库
PKI系统
组成构件
权威认证机构(CA)
数字证书库
密钥备份及恢复系统
证书作废系统
应用接口(API)
管理系统
AD CA
Windows Server Active Directory Cetificate Services
EJBCA
OpenCA
References
What is the Best Open Alternative to Active Directory Certificate Services?
Certificate authority software
证书解决的痛点
有效防止数据被监听或篡改
抵御 MITM(中间人)攻击
OpenSSL
openssl req
openssl x509
openssl ca
CA中心签署证书
RSA
openssl genrsa
生成公钥私钥对
openssl genrsa -out private.key 1024
注意: 需要注意的是这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密,后面的1024是生成
密钥的长度.
密钥的长度.
openssl rsa
通过密钥文件提取公钥
openssl rsa -in private.key -pubout -out pub.key
openssl rsautl
openssl rsautl -encrypt
使用公钥加密数据
echo -n "123456" | openssl rsautl -encrypt -inkey pub.key -pubin >encode.result
openssl rsautl -decrypt
使用密钥解密数据
cat encode.result | openssl rsautl -decrypt -inkey private.key
DSA
openssl gendsa
生成公钥私钥对
openssl dsaparam -out dsaparam.pem 1024
openssl gendsa -out privkey.pem dsaparam.pem
openssl gendsa -out privkey.pem dsaparam.pem
openssl dsa
生成公钥
openssl dsa -in privkey.pem -pubout -out pubkey.pem
rm -fr dsaparam.pem
rm -fr dsaparam.pem
open dgst
使用私钥签名
echo -n "123456" | openssl dgst -dss1 -sign privkey.pem > sign.result
使用公钥验证
echo -n "123456" | openssl dgst -dss1 -verify pubkey.pem -signature sign.result
EC
EccCA
生成公钥私钥对
openssl ecparam -genkey -name prime256v1 -out EccCA.key
生成请求文件
openssl req -new -key EccCA.key -out EccCA.req -config openssl.cnf
自签署证书
openssl x509 -req -signkey EccCA.key -in EccCA.req -out EccCA.pem
Ecc证书
生成公钥私钥对
openssl ecparam -genkey -name prime256v1 -out EccSite.key
生成请求文件
openssl req -new -key EccSite.key -out EccSite.req -config openssl.cnf
CA中心签署证书
openssl x509 -req -CA EccCA.pem -CAkey EccCA.key -in EccSite.req -out EccSite.pem -CAcreateserial
openssl pkcs12
生成pkcs12文件,不包含CA证书
openssl pkcs12 -export -inkey ocspserverkey.pem -in ocspservercert.pem -out ocspserverpkcs12.pfx
生成pkcs12文件,包含CA证书
openssl pkcs12 -export -inkey server.key -in server.crt -CAfile ca.crt -chain -out server.pfx
将pkcs12中的信息分离出来,写入文件
openssl pkcs12 –in ocsp1.pfx -out certandkey.pem
显示pkcs12信息
openssl pkcs12 –in ocsp1.pfx -info
openssl.cnf
常见错误
The mandatory stateOrProvinceName field was missing
ERROR:Serial number 01 has already been issued,
check the database/serial_file for corruption
check the database/serial_file for corruption
failed to update database
TXT_DB error number 2
TXT_DB error number 2
自签名证书(OpenSSL)
CA证书
生成公钥私钥对,密钥长度2048
openssl genrsa -out ca.key 2048
在当前目录下生成ca.key文件,这个文件是下一步生成CA证书的密钥
生成CA自签名证书
方法一
如果需要使用第三方CA签发证书
openssl req -new -key ca.key -out ca.req -config /etc/pki/tls/openssl.cnf
生成证书请求文件
openssl req -x509 -key ca.key -in ca.req -out ca.crt -days 3650 -config /etc/pki/tls/openssl.cnf
使用CA密钥,生成CA证书
方法二
如果就服务器本机就是CA,则可以将上述两个操作合并为一个操作(如下命令),它在自签署过程中将在内存中自动创建证书请求文件,当然,既然要创建证书请求文件,就需要人为输入申请者的信息了。
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -config /etc/pki/tls/openssl.cnf
在当前目录下生成ca.crt这个文件,这个就是CA证书了,其他服务器和客户端的证书都是用ca.crt这个文件签发的。
服务器证书
生成服务器证书密钥
openssl genrsa -out server.key 2048
在当前目录下生成server.key文件,这个文件是服务器段的密钥
生成服务器证书请求文件
openssl req -new -key server.key -out server.csr -config /etc/pki/tls/openssl.cnf
在当前目录下生成server证书的签署申请,后面用CA给服务器签署证书的时候需要用到这个申请文件
生成签署申请的过程中需要填写一些信息,按提示要求填写即可
但需要说明的是Common Name必须和ssl.conf里面的ServerName一致
否则客户端访问的时候会提示证书信息不能认证
使用CA证书给服务器端签署服务器证书
进入/etc/pki/CA目录下,
在里面创建一个index.txt空文件,
以及一个名为serial,内容为01的文件
在里面创建一个index.txt空文件,
以及一个名为serial,内容为01的文件
touch /etc/pki/CA/index.txt
touch /etc/pki/CA/serial
echo "01" >> /etc/pki/CA/serial
echo "01" >> /etc/pki/CA/serial
执行签署证书命令
openssl ca -in server.csr -cert ca.crt -keyfile ca.key -out server.crt -config /etc/pki/tls/openssl.cnf
这个server.crt就是由CA签发的服务器证书。
客户端证书
生成公钥私钥对
openssl genrsa -out client.key 2048
生成证书请求文件
openssl req -new -key client.key -out client.csr -subj "/CN=127.0.0.1"
使用自签名CA签署证书
openssl x509 -req -in ./client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.pem -days 3650 -sha256
Java Keytool
术语
keytool
Java 密钥库管理工具、X.509证书链、可信证书
keystore
Java 密钥和证书的管理库
storepass
密钥库口令
alias
条目别名
密钥
证书
密钥证书对
证书
密钥证书对
keypass
密钥密码
keyalg
加密算法,DSA只能用于加密,不能用户证书签名。
DSA
RSA
EC
条目类型
PrivateKeyEntry
命令
genkeypair
genkey
使用方:机构用户
生成私钥和公钥对
keytool -genkey -keyalg rsa -keystore <keystore_filename> -alias <alias_name>
keytool -genkey -keyalg RSA -alias Server -keystore server.keystore -storepass PASSWORD
genseckey
使用方:机构用户
certreq
使用方:机构用户
机构用户使用自己的密钥(密钥别名),生成CSR证书签名请求文件
keytool -certreq
-keystore D:\keytooltest\ca1.jks //用户的密钥库
-alias ca1 //所使用的密钥别名
-file D:\keytooltest\ca1_to_ca2.req //证书请求文件的生成路径
-keystore D:\keytooltest\ca1.jks //用户的密钥库
-alias ca1 //所使用的密钥别名
-file D:\keytooltest\ca1_to_ca2.req //证书请求文件的生成路径
gencert
使用方:CA(证书认证中心)
keytool -gencert
-keystore D:\keytooltest\ca2.jks //CA中心的密钥库
-alias ca2 //CA中心的证书密钥别名
-infile D:\keytooltest\ca1_to_ca2.req //用户的证书请求文件
-outfile D:\keytooltest\ca2_to_ca1.cert //生成的证书路径,该证书已签名
-keystore D:\keytooltest\ca2.jks //CA中心的密钥库
-alias ca2 //CA中心的证书密钥别名
-infile D:\keytooltest\ca1_to_ca2.req //用户的证书请求文件
-outfile D:\keytooltest\ca2_to_ca1.cert //生成的证书路径,该证书已签名
importcert
使用方:机构用户
keytool -importcert -alias baidu -file baidu.cer
jarsigner
使用方:机构用户
Jar文件签名
jarsigner -keystore <keystore_filename> <jar_path> <alias_name>
常用命令
生成
生成密钥文件
keytool -genseckey
生成证书请求文件
keytool -certreq
生成密钥和证书对,并使用CA证书签署该证书
keytool -genkeypair -keyalg RSA -alias rootca -keystore mystore.jks
根据证书请求文件生成证书,并使用CA证书签署该证书
keytool -gencert -alias rootca -infile baidu.csr -outfile baidu.cer
导入
导入证书,到jks密钥库
keytool -keystore ./truststore.jks -keypass 222222 -storepass 222222 -alias ca -import -trustcacerts -file /home/out32dll/ca/ca-cert.pem
keytool -keystore ./truststore.jks -keypass 222222 -storepass 222222 -alias ca -import -trustcacerts -file /home/out32dll/ca/ca-cert.pem
导入证书,到jks密钥库
keytool -importcert -alias baidu -file baidu.cer
导入p12证书,到jks密钥库
导出
导出密钥,输出文件扩展名为crt,证书编码方式为PEM
导出密钥和证书,输出文件扩展名为p12
自签名证书(Keytool)
环境依赖
JDK 1.8.0
CA证书
生成公钥密钥对
生成证书请求文件
签署证书
服务器证书
生成公钥私钥对
生成证书请求文件
使用自签名CA签署证书
客户端证书
生成公钥私钥对
生成证书请求文件
使用自签名CA签署证书
常见问题
证书颁发者不可信
证书不可信且证书链长度为1
用户证书与所在域不匹配
安全证书过期不可信
0 条评论
下一页