SSL、openSSL、CA
前言
上一篇文章 http://blog.csdn.net/hylexus/article/details/53048305、http://www.jianshu.com/p/c929ac2d9134 中,最终得到的安全通信的结论的前提都是基于CA及CA颁发的证书是可靠的基础上的,整个通信过程的安全性也都依赖于CA这个根源。本篇文章就来说说CA及与其相关的一些概念。
本文章中的诸多信息都是来自大牛 马哥 的linux视频教程。
1 X509
X509,简言之,也是个人理解:就是证书的元数据,也就是来约定证书格式的标准。
我们常见的证书的格式大都是基于X509的标准的。
1.1 X509证书格式
以下信息来源于百度百科:
所有的X.509证书包含以下数据:
- X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息。目前的版本是3。
- 证书持有人的公钥:包括证书持有人的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数。
- 证书的序列号:由CA给予每一个证书分配的唯一的数字型编号,当证书被取消时,实际上是将此证书序列号放入由CA签发的CRL(Certificate Revocation List证书作废表,或证书黑名单表)中。这也是序列号唯一的原因。
- 主题信息:证书持有人唯一的标识符(或称DN-distinguished name)这个名字在 Internet上应该是唯一的。DN由许多部分组成,看起来象这样:
CN=Bob Allen, OU=Total Network Security Division
O=Network Associates, Inc.
C=US
这些信息指出该科目的通用名、组织单位、组织和国家或者证书持有人的姓名、服务处所等信息。 - 书的有效期:证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效。
- 认证机构:证书发布者,是签发该证书的实体唯一的CA的X.509名字。使用该证书意味着信任签发证书的实体。(注意:在某些情况下,比如根或顶级CA证书,发布者自己签发证书)
- 发布者的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过。
- 签名算法标识符:用来指定CA签署证书时所使用的签名算法。算法标识符用来指定CA签发证书时所使用的公开密钥算法和HASH算法。
2 SSL/openSSL/TLS
2.1 简单介绍
先来看看这两张来自百度的OSI七层模型图和四层模型图:
我们常见的一些协议,比如 http、smtp、telnet、ftp本身默认是不支持数据传输加密的。
SSL(Secure Socket Layer)就是在应用层和TCP/IP层之间加的层,好像和这个快被历史遗忘了的牛逼的NetScape公司有关系。
有了SSL层,本来不支持加密传输的一些协议比如http就可以支持加密了即https,smtps,ftps等。
TLS(Transport Layer Security)安全传输层协议。TLS-v1相当于SSL-v3。
本文不加区别的使用SSL和TLS。
openSSL即是SSL的开源实现版本。
openSSL:
- libcrypto:通用加密库
- libssl:SSL/TLS的实现
- openssl:命令行工具
2.2 openSSL常用命令
2.2.1 基础命令
|
|
2.2.2 文件加密/解密
|
|
|
|
2.2.3 计算特征码
|
|
2.2.4 生成密码
|
|
2.2.5 生成伪随机数
|
|
2.2.6 生成秘钥
|
|
2.2.7 生成/查看X509证书
|
|
查看证书信息
|
|
3 HTTPS
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)即HTTP在SSL/TLS基础上的安全版本。
3.1 HTTP VS HTTPS
以下对比来自于百度百科:
- https协议需要到ca申请证书,一般免费证书很少,需要交费。
- http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
3.2 大致过程
- 三次握手当然是必不可少的了
既然是安全的,当然就得加密传输数据了。
怎么加密传输呢?
非对称加密代价太大,HTTPS使用的方式大致和上篇文章中所说的
第二种安全通信方式:http://blog.csdn.net/hylexus/article/details/53048305#72-方式二 类似。
客户端和服务端需要协商通信的对称加密的加密算法等信息。一般并不是基于IKE实现的。
4 openSSL实现私有CA
4.1 准备工作
先查看或按需修改/etc/pki/tls/openssl.cnf文件内容,其中有以下一些配置项:
|
|
为方便,此处直接cd至/etc/pki/CA目录进行后续操作
4.2 生成秘钥
|
|
4.3 生成自签署的证书
注意此处的证书是CA自己的证书。
|
|
4.4 其他配置
|
|
4.5 为应用程序配置SSL
此处本人在/etc/nginx/ssl目录下操作,只是示例而已:
生成私钥(应用程序自己的私钥,不要和上面的CA的私钥混了)
|
|
生成证书颁发请求
|
|
将证书颁发请求发送给CA,让CA签署(CA签名认证)
此处CA和应用都在同一台主机上,直接操作即可
|
|