-- 快速了解安全通讯中的非对称RSA,ECC及CA证书和机构的作用,附SSL,TLS等基础概念
【官网】:无
应用场景
在涉及一些支付sdk,公众号,小程序等第三方服务时经常涉及一些证书之类的安全通讯的概念,此文就介绍相关的基础知识。基础资源
相关的依赖库
使用须知
安全通信依赖很多环节,每个环节都不能忽视。 服务器管理,证书认证,证书管理,团队管理,项目管理,安全业内资讯等各方面都需要注意才能最大程度提升安全性
配置步骤
无
常见问题
快速入门
A)加密应用领域关注的主要问题.
5)密钥管理 (CA).
B)密钥交换的一般方案.
C)网络安全通信中CA证书的作用和相关流程.
C1)CA的作用和处理流程。
C2)CA证书的主要分类.
域名型https证书(DVSSL):信任等级一般,只需验证网站的真实性便可颁发证书保护网站;
企业型https证书(OVSSL):信任等级高,须要验证企业的身份,审核严格,安全性更强;
增强型https证书(EVSSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最好,同时可以激活绿色网址栏
C3)CA的相关机构.
国际:美国的verisign公司,加拿大的ENTRUST公司
国内:在金融CA方面,根证书由中国人民银行管理, 非金融CA方面,由中国电信负责
D)证书扩展名.
虽然证书编码格式有2种,但是扩展名有很多:
扩展名 | 说明 |
---|---|
.der | 用于DER编码的证书 |
.pem | 它是基于X.509标准生成的,它是以"-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----"开头和结尾且用Base64编码的证书 |
.crt | 这种扩展名的证书可以是DER编码也可以是PEM编码,在Unix系统中常见。 |
.cer | 微软系统常见,在微软系统中可以将.crt转换为.cer。同样可以是DER编码也可以是PEM编码。 |
.key | 用于存储公钥和私钥,同样可以使用DER或者PEM编码。 |
.csr | 这个不是证书文件,而是证书签名请求文件,向CA申请获得签名证书时需要提供的申请文件。 |
[注]
CSR(Certificate Sign Request)、公钥、密钥和证书归属为一类。CSR 用来获取证书,包含申请人的公钥、邮件等证明身份的信息。证书颁发机构(可以是自己)收到 CSR 后签发证书,生成的证书中包含公钥、有效期、持有人等信息。私钥可单独生成,也可在生成 CSR 的同时生成。整个过程中,私钥应当都要被妥善保管,不能泄露。
keystore、PEM、cer/crt、key 等文件存储格式可归为一类。Java KeyStore(文件后缀 .keystore 或 .jks)是 Java 常用的存储密钥和证书的文件格式,需要设置文件密码、别名和别名密码,安卓打包和部署 Tomcat 时会用到;PEM(Privacy Enhanced Mail)以文本形式存放私钥和证书(链);cer/crt 和 key 分别用来存放证书和密钥;另外一种常见的格式是 pfx 和 p12,同 jks 格式,这类文件一般是二进制,访问需要密码。
PKI(Public key infrastructure)体系构建在公钥加密基础之上,主要解决证书的颁发和管理问题。证书管理中应用广泛的两个标准是 X509 和 PKCS。遵循 X509 标准的证书文件结尾多为 PEM、der、crt 等;遵循 PKCS 标准的证书常用后缀名是 pfx、p12 等。
本次对接晕乎的第二个地方是一处地方读取密钥需要密码,另一处直接读取。根据存储格式可知原因:访问遵循 PKCS#12 标准的 pfx 文件需要密码,遵循 X509 规范的 PEM 文件则可直接查看内容。
E)网络安全通信中的协议与实现.
[注]
SSL/TLS提供的服务主要有:
1、身份认证,确保消息发送双方身份的真实性。
2、加密传输,消息以密文传递,防止中途被窃取。
3、数据校验,确保消息在传输途中不会被篡改。
F)附常用的命令.
F1)生成 CSR、签发证书.
# 先生成csr和私钥
# 注意使用-nodes选项,否则私钥会有密码,用在nginx启动时需要手动输入
openssl req -new -out tlanyan.csr -newkey rsa:2048 -nodes -keyout tlanyan.priv.key
# 接下来的交互里填入一些基本信息,完毕后会生成tlanyan.csr和tlanyan.priv.key两个文件
# csr的格式如下:
# -----BEGIN CERTIFICATE REQUEST-----
# xxxx
# -----END CERTIFICATE REQUEST-----
# 密钥文件的格式类似
# 有了csr,接下来为自己签发证书
openssl req -x509 -sha256 -nodes -days 365 -in tlanyan.csr -key tlanyan.priv.key -out tlanyan.crt
# 命令结束后,目录中出现tlanyan.crt的证书文件
# 校验密钥
openssl rsa -in tlanyan.priv.key --check
# 校验csr
openssl req -in tlanyan.csr -verify
# 校验证书
openssl x509 -in tlany.**crt -text -n**ooutPEM
转换各种不同格式的证书:
# 将pem格式转换成pfx/p12格式
openssl pkcs12 -export -out tlanyan.pfx -inkey tlanyan.priv.key -in tlaPEMn.crt
# 将pfx格式转换成pem格式
openssl pkcs12 -in tlanyan.pfx -out tlanyan.cer -nodes
# 生成的tlanyan.cer文件包含了证书和公钥,对应导入前的tlanyan.crt和tnPEM . pri v.key两个文件
pem 和 jks 的格式转换太过复杂, 具体请看 Oracle 的文档。
F2)自签名证书如何添加和安装.
自签名证书的如何生成、安装?
有时候,我们在内部系统传输数据需要使用SSL协议,对数据加密,但是我们又不想花钱去申请CA,这个时候可以使用自签名CA,实现数据加密传输的功能。首先要明确一点就是自签名证书是不安全的,存在安全漏洞,具体看下面的博文介绍:
为什么”自签名SSL证书”不安全?
https://www.wosign.com/FAQ/selfsigned_SSL_insecure.htm
自签名证书使用jdk中的keytool生成即可,看似神秘,但实际上比较简单,见下博文:
如何利用keytool工具生成数字证书
https://jingyan.baidu.com/article/b0b63dbfe18eff4a483070f4.html
自签名证书的安装也很简单,见下博文:
添加自签发的 SSL 证书为受信任的根证书
https://cnzhx.net/blog/self-signed-certificate-as-trusted-root-ca-in-windows/
在java编程中,使用socket网络编程,实现SSL协议,对服务器的证书需要导入到客户端的秘钥库中,这样才能完成自动认证,具体实现见下博文:
JAVA SSL SOCKET通信服务器端客户端证书双向认证
http://blog.csdn.net/matt8/article/details/45071815