知识积累:CA详解
所有证书有多种文件编码格式,主要包括:
CER编码(规范编码格式):是BER(基本编码格式)的一个变种,比BER规定得更严格
DER编码(卓越编码格式):是BER(基本编码格式)的一个变种, 比BER规定得更严格
*CER的不同在于,DER使用定长模式,而CER使用变长模式。
所有证书都符合公钥基础设施(PKI)制定的ITU-T X509国际标准,PKCS(公钥加密标准)由RSA实验室和其他安全系统开发商为促进公钥密码的发展而制定的一系列标准
比如:
PKCS#7(密码消息语法标准----文件后缀名:.p7b、.p7c、.spc)
PKCS#10(证书请求语法标准----文件后缀名:.p10、.csr)
PKCS#12(个人信息交换语法标准----文件后缀名:.p12、.pfx)等
在获得数字证书后,可以将其保存在电脑中,也可以保存在USB Key等相应的设备中。
简单的证书机构签发的流程:
数字证书的应用环境是在https安全协议中,使用流程远比上述加密交互流程复杂
但是相关操作封装在传输层,对于应用层透明,在https安全协议中使用非对称加密算法交换密钥,使用对称加密算法对数据进行加密/解密操作,提高加密/解密效率
数字证书管理工具:KeyTool和OpenSSL构建CSR(数字证书签发申请),交由CA机构签发,形成最终的数字证书
这里我们不对KeyTool做讲解(KeyTool不含有根证书,因此KeyTool没有办法作为CA),网上资料对keytool讲解的也挺多的,我们下面针对OpenSSL进行讲解。
在我们搭建OPEN SSL环境前,我们要知道HTTPS协议和SSL/TLS协议,简单的说,HTTPS就是HTTP+SSL(secure socket layer)/TLS(Transport Layer Security)协议,HTTPS协议为数字证书提供了最佳的应用环境,HTTPS协议一般在服务器中配置,如HTTP服务器APACHE、TOMCAT等。
SSL:位于TCP/IP中的网络传输层,作为网络通讯提供安全以及数据完整性的一种安全协议
TLS:作为SSL协议的继承者,成为下一代网络安全性和数据完整性安全协议
SSL共有3个版本:1.0、2.0、3.0,TLS也有1.0、2.0、3.0,通常我们说的SSL/TLS协议指的是SSL3.0/TLS1.0的网络传输层安全协议
SSL/TLS协议分为两层:
记录协议:建议在可靠的传输协议之上,为高层协议提供数据封装、压缩、加密等基本功能的支持
握手协议:建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等
协商算法 验证算法 客户端验证服务器端证书 服务器端验证客户端证书: 产生密钥
会话密钥 加密交互
- 随机数为后续构建密钥准备
- 其他信息包括服务器证书、甚至包含获取客户端证书的请求
- 如果服务器端回复客户端时带有其他信息,则进入数字证书验证阶段
- 当服务器端和客户端经过上述流程后,就开始密钥构建交互了,服务器端和客户端最初需要主密钥为构建会话密钥做准备:
- 完成上述主密钥构建操作后,服务器端和客户端将建立会话密钥,完成握手协议:
- 上述服务器端和客户端完成了握手协议以后就进入正式会话阶段,如果上述流程中有任何一端受到外界因素干扰发生异常,则重新进入协商算法阶段,下面流程表现进入会话阶段后,服务器端和客户端将使用会话密钥进行加密交互:
OPEN SSL 环境搭建
基础原理中我们提到了两种认证服务,单项认证服务和双向认证服务,我们就以双向认证服务举例说明。
OpenSSL是一个开放源代码软件包,实现了SSL以及相关加密技术,是最常用的证书管理工具,OpenSSL功能远胜于KeyTool,可用于根证书(KeyTool不含有,因此KeyTool没有办法作为CA)、服务器证书、客户证书的管理。
知识积累:CA详解的更多相关文章
- Linux基础知识之挂载详解(mount,umount及开机自动挂载)
Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件 ...
- Httpd服务进阶知识-HTTP协议详解
Httpd服务进阶知识-HTTP协议详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.WEB开发概述 1>.C/S编程 CS即客户端.服务器编程. 客户端.服务端之间需 ...
- Java程序员的必备知识-类加载机制详解
类加载器的概念 类加载器是一个用来加载类文件的类. Java源代码通过javac编译器编译成类文件.然后JVM来执行类文件中的字节码来执行程序.类加载器负责加载文件系统.网络或其他来源的类文件. JV ...
- [Spring学习笔记 1 ] Spring 简介,初步知识--Ioc容器详解 基本原理。
一.Spring Ioc容器详解(1) 20131105 1.一切都是Bean Bean可是一个字符串或者是数字,一般是一些业务组件. 粒度一般比较粗. 2.Bean的名称 xml配置文件中,id属性 ...
- OpenStack基础知识-tox的详解介绍
1.tox简介 tox是通用的虚拟环境管理和测试命令行工具.tox能够让我们在同一个Host上自定义出多套相互独立且隔离的python环境,每套虚拟环境中可能使用了不同的 Python 拦截器/环境变 ...
- 计算机基础知识和tcp详解
计算机基础知识 作为应用软件开发程序员是写应用软件的,而应用软件必须应用在操作系统之上,调用操作系统接口,由操作系统控制硬件 比如客户端软件想要基于网络发送一条消息给服务端软件,流程是: 1.客户端软 ...
- OpenStack基础知识-virtualenv工具详解
1.virtualenv介绍 virtualenv通过创建一个单独的虚拟化python运行环境,将我们所需的依赖安装进去,不同项目之间相互不干扰,从而解决不同的项目之间依赖不同,造成的冲突问题 2.安 ...
- 线程知识-ThreadLocal使用详解
最近在看Spring的时候回顾了一下ThreadLocal,下面是ThreadLocal的使用说明. 概述 首先,谈到ThreadLocal的使用,我们先来了解一下ThreadLocal是什么?Thr ...
- java线程基础知识----SecurityManager类详解
在查看java Thread源码的时候发现一个类----securityManager,虽然很早就知道存在这样一个类但是都没有深究,今天查看了它的api和源码,发现这个类功能强大,可以做很多权限控制策 ...
随机推荐
- a primary example for Functional programming in javascript
background In pursuit of a real-world application, let’s say we need an e-commerce web applicationfo ...
- JavaScript Module Pattern: In-Depth
2010-03-12 JavaScript Module Pattern: In-Depth The module pattern is a common JavaScript coding patt ...
- UIkit框架之uiUIapplication
1.继承链:uiresponder:NSObject 2.使用 sharedApplication方法来存取对象 3.这个类可以遵守协议是UIApplicationDelegate 4.获取app的实 ...
- 新建jfinal2.2项目并连接mysql
一新建项目 1. new→Dynamic Web Project 2修改Default Output Folder.一般用WebRoot\WEB-INF\class,然后下一步(注意路径要写对,不然 ...
- http://zh.lucida.me/
一个很厉害的在美国Google的学长的博客
- 如何执行字符串的PHP代码
如何执行字符串的PHP代码 最近因项目需要,引出一个议题:如何执行字符串的php代码(php和html混写). 注:传统情况下,php代码存储在文件中,直接运行文件即可.以下讨论的情况是,如果php代 ...
- [GodLove]Wine93 Tarining Round #4
比赛链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=44903#overview 题目来源: 2011 Asia ChengDu R ...
- magento的url中 去掉多余的目录层级
有时我们需要仅仅显示一层目录的URL路径.而不要出现多个路径的现实,我们可以用以下方法修改: Edit /app/code/core/Mage/Catalog/Model/Url.php 找到632 ...
- jenkins之安装篇
自动化学习过程中老师介绍了一个工具jenkins,感觉很不错,学习ingjenkins的war包下载地址http://mirrors.jenkins-ci.org/war/Hudson的war包下载地 ...
- Android使用ListView应该注意的地方
在ListView中设置Selector为null会报空指针? mListView.setSelector(null);//空指针 试试下面这种: mListView.setSelector(new ...