快速了解安全通讯中的非对称RSA,ECC及CA证书和机构的作用,附SSL,TLS等基础 

-- 快速了解安全通讯中的非对称RSA,ECC及CA证书和机构的作用,附SSL,TLS等基础概念
【官网】:

应用场景

在涉及一些支付sdk,公众号,小程序等第三方服务时经常涉及一些证书之类的安全通讯的概念,此文就介绍相关的基础知识。

基础资源

相关的依赖库

使用须知

安全通信依赖很多环节,每个环节都不能忽视。 服务器管理,证书认证,证书管理,团队管理,项目管理,安全业内资讯等各方面都需要注意才能最大程度提升安全性

配置步骤

常见问题

快速入门

A)加密应用领域关注的主要问题.

1)保密,保护隐私 (敏感内容,隐私内容,内容银行卡号,手机号,身份证号等).   
2)可以被看,但要防篡改  (产品id,订单id等)。
3)密钥保密问题 (要求双方保密).
4)密钥分发,交换 (双方安全,不安全场景下交换)

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



参考资料