加密解密和CA证书杂记
最近两三个月,断断续续的一直在处理CA证书相关的事情。CA证书本质上也是一种加解密,因此就自然而然的涉及到一些加密和解密的技术,这就让我在了解CA的同时,也对加密和解密有了更进一步的认识和理解。
以下便是一个比较杂,但是似乎又有一定关联性的总结,我分了这样几个部分:
1.加密和签名
2.对称加密和非对称加密
3.密钥、公钥和私钥
4.图解签名和加密的必要性
5.CA证书转换
加密和签名
网络通信过程中,要保证通信的安全和数据的安全,就需要对交互双方的身份进行确认,并保证最终业务使用的数据是正确的、未被篡改的、被窃取而无法解析的。
要做到上述要求,就需要使用到加密和签名,通常交互双方的身份确认称作签名验签,而业务数据的安全措施称为加密解密。
就目前的理解来说,签名验签实际也是一种加解密。
对称加密和非对称加密
加解密一般都需要一个密钥,如果加密的密钥和解密的密钥一样,则称作对称加密。否则,若加密的密钥和解密的密钥不一样,则称作非对称加密。
密钥、公钥和私钥
无论公钥还是私钥,都是密钥。
密钥,理解为就是密文加密和解密的钥匙。
公钥,理解为公开的密钥。
私钥,理解为私有的密钥。
需要注意的是,密钥,不是秘钥。我刚接触的时候,就总是把这两个弄混淆,结果导致几个概念傻傻分不清。
因为秘钥和私钥似乎是一个意思,所以一旦密钥理解成秘钥,就会影响对公钥和私钥的理解。
公私钥一般成对出现,有自己的关联关系,可以互相加解密,即公钥加密则私钥解密,私钥加密则公钥解密。
图解签名和加密的必要性
最初的网络数据传输使用明文传输,那么通讯过程中完全无法确保数据不被窃取使用和篡改,如下图:
于是便出现了数据的加密机制,这样可以确保通信过程中被窃取的数据,在没有密钥的情况下难以被解析。即使遭到篡改,接收方也无法解析,而不会继续进行逻辑处理,如下图:
但是,这种情况下一旦窃取数据者也拥有了密钥,那么就一样的能够解析和篡改数据。对称加密的场景下,密钥相同,泄露的可能性很大,非对称加密的场景下,公钥是公开的,本身就被很多人持有。
那么数据窃取者有了密钥之后的情景就大致如下:
因此,在数据加密的基础上,就又引入了身份验证,这样就可以确保数据即使被篡改,也不会被正确验证和解析,进一步保证了业务安全,如下图:
以上所述应用到软件中,实际上是基于http请求,签名、加密等都发生在实际代码中。
于是后来有了更进一步的安全措施,即https,在这里边就引入了CA证书的概念和技术。
单从通信层面来讲,CA证书有根证书和通信证书的区分,实际上是为了进一步保证服务端和客户端之间的可信度,进一步保证了通信双方的身份合法性。
更多ca相关内容可参考我的另两篇博客:
https://blog.csdn.net/tuzongxun/article/details/88647172
https://blog.csdn.net/tuzongxun/article/details/89217001
CA证书转换
ca证书有各种格式和不同的文件结尾,很多都是可以相互进行转换的,也都有不同的使用场景。
例如java通常使用jks文件,安卓通常使用bks文件,而浏览器可能使用pfx文件等。
以下是部分转换的记录:
根证书链pem转jks
keytool -import -noprompt -file root.pem -keystore root.jks -storepass 123456
证书pfx转jks
keytool -importkeystore -srckeystore client.pfx -srcstoretype pkcs12 -destkeystore client.jks -deststoretype JKS
证书pfx转crt和key
openssl pkcs12 -in client.pfx -nodes -out client.pem openssl rsa -in client.pem -out client.key openssl x509 -in client.pem -out client.crt
根证书链pem转cer
openssl x509 -inform pem -in root.pem -outform der -out root.cer
证书jks转bks需要借助工具
参见
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0831/3393.html
加密解密和CA证书杂记相关推荐
- java加密解密与数字证书的操作
2019独角兽企业重金招聘Python工程师标准>>> 1 Java程序实现密钥库的维护 1.1 Java程序列出密钥库所有条目 import java.util.*; impo ...
- 使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数据(转)
转自:http://www.cnblogs.com/chnking/archive/2007/08/30/875947.html 使用X.509数字证书加密解密实务(二)-- 使用RSA证书加密敏感数 ...
- 常用加密解密算法【RSA、AES、DES、MD5】介绍和使用
为了防止我们的数据泄露,我们往往会对数据进行加密,特别是敏感数据,我们要求的安全性更高.下面将介绍几种常用的加密算法使用.这些算法的加密对象都是基于二进制数据,如果要加密字符串就使用统一编码(如:ut ...
- 加密解密概述及openssl应用及其创建CA和签发证书的实现
数据非常重要,这是大家的共识,为了保证数据的安全,就会涉及到加密及其解密,本文主要介绍加密 解密相关概念及其在Linux平台下加密解密的具体实现openssl基础,及openssl创建CA和签发证书: ...
- 学习笔记:公钥私钥 签名验签 加密解密 CA 证书
重点: 1.区分加密解密和签名验签(在非对称加密情景下) 加密解密:#A给B发消息# A用B的公钥进行运算(加密),B收到后用B自己的私钥进行逆向运算(解密) 签名验签:#A给B发消息# A用A自己的 ...
- Linux之加密及CA证书
加密方法的种类主要分为三种:单向加密,非对称加密,对称加密. 单向加密:不是加密,而是提取数据特征码,主要用于验证数据的完整性. 非对称加密:非对称加密也称公钥加密,密钥成对出现.主要用于密钥交换和数 ...
- linux加密解密基础、PKI及SSL、创建私有CA
linux加密解密基础.PKI及SSL.创建私有CA 1.加密解密基础: 数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡 ...
- 加密解密、Openssl、自建CA
一.三种加密方式 1.对称加密 工作机制:需要对加密和解密使用相同密钥的加密算法.密钥是控制加密及解密过程的指令.算法是一组规则,规定如何进行加密和解密.将原文分割成固定大小的数据块,对这些进行 ...
- **加密解密基础、PKI及SSL、创建私有CA**
进程间通信 socket通信 客户端-->请求--> 路由转发 --> 服务端,取出资源 --> 封装为可响应给客户端的请求报文从接收请求端口发出 SSL/TLS协议的实现 O ...
最新文章
- 截取前四位字符串_Python的字符串切片
- PHP下的浮点运算不准的解决办法
- 小米澄清传闻:不存在跨境转移利润及逃避缴纳税款行为
- C#学习 小知识_多态的简单实现_2018Oct
- c# 编写自定义异常类
- PCB上走100A电流的方法
- 图像处理 --- 一、认识图像处理
- 重温这几个屌爆的Python技巧!
- nginx静态文件服务器_Linux分享文件?快速创建静态文件服务器
- C++11 委托构造函数
- Mozilla推荐的CSS属性书写顺序及命名规则
- Microsoft Visio premium2010激活
- 规避VMware虚拟机检测
- IntelliJ IDEA中创建jsp项目
- 51单片机用三种方法实现流水灯(超详细)
- 动态IP和静态IP有什么区别
- 用鸽 计算机教案,幼儿园音乐教案《鸽子》
- 大漠穷秋:全面解读Angular 4.0核心特性
- 百度网盘下载资源太慢,教你一招,速度直接提升到10MB/s
- 使用GCD(转自唐巧的技术博客)