安全与加密-SSL交互与握手过程 创建CA和证书管理

上一篇章中我们讲了使用gpg和openssl加密公钥进行安全数据通讯的场景。可是,网络中总是有不怀好意的角色存在,别以为你以公钥加密了就是安全的,有没有想过,你得到的这个公钥是不是真正要跟你通讯的服务器公钥呢?万一被伪造了?那将会如下图,黑客能打开加密的文件,而真正的ServerB却无法解开密文。

所以,就如现实生活中,大家都要确认某样东西的真实性的时候,找第三方权威机构,把各自己的信息交回权威机构进行验证后,再由权威机构公布各自需要的信息。

如下图,CA证书机构就是用来做这事的。

既然有了第三方的权威机构颁发的证书,那么通讯的过程也需要加密保护以便防止过程被窃取篡改。

大家都知道,HTTP 协议都是明文传输内容,在早期只展示静态内容时没有问题。伴随着互联网的快速发展,人们对于网络传输安全性的要求也越来越高,HTTPS 协议因此出现。如下图所示

在 HTTPS协议中封装的加密方法其实是 SSL/TLS 协议。SSL/TLS 协议作用在 HTTP 协议之下,对于上层应用来说,原来的发送接收数据流程不变,这就很好地兼容了老的 HTTP 协议,这也是软件开发中分层实现的体现。

SSL/TLS 握手是为了安全地协商出一份对称加密的秘钥

SSL交互和握手过程

单向认证:

双向认证:

原理过程讲完了,那就开始实现SSL/TLS

证书管理

名词:

PKI :Public Key Infrastructure

包含:

CA:证书颁发机构

RA:证书注册机构

CRL:证书吊销列表

证书存取库

创建私有CA

openssl的配置文件,/etc/pki/tls/openssl.cnf

找到[ ca ]设置,下面为主要选项说明。文件名是有指定要求的。

[ ca ]

default_ca      = CA_default # 默认CA使用哪套配置文件

[ CA_default ] #配置文件名,以下为该套配置的设定

dir             = /etc/pki/CA           # 目录

certs           = $dir/certs            # 签发证书存放位置

crl_dir         = $dir/crl              # 存放 crl(证书吊销列表)位置

database        = $dir/index.txt        # 数据库索引文件

#unique_subject = no                    # 是否允许被颁发者有重复的描述信息

new_certs_dir   = $dir/newcerts         # 新证书的默认位置,颁发证书的时候,会copy一份到这

certificate     = $dir/cacert.pem       # CA自签名证书文件

serial          = $dir/serial           # 存放下一个颁发证书的编号

crlnumber       = $dir/crlnumber        # 当前crl数量

crl             = $dir/crl.pem          # 证书吊销列表文件

private_key     = $dir/private/cakey.pem # CA自己的私钥

RANDFILE        = $dir/private/.rand    # 私钥随机数文件

x509_extensions = usr_cert # The extentions to add to the cert

name_opt        = ca_default # Subject Name options

cert_opt        = ca_default # Certificate field options

default_days    = 365 # 默认证书有效期

default_crl_days= 30 # 默认crl下一次公布间隔

default_md      = default # 默认使用的公钥算法,在[req]指定

preserve        = no # keep passed DN ordering

policy          = policy_match #使用的策略。match为必须匹配,optional为可选,supplied需要 指定。可以参考pam章节

[ policy_match ] # 策略名,下面为设置

countryName             = match #国家

stateOrProvinceName     = match #省

organizationName        = match #组织名

organizationalUnitName  = optional #组织单位名

commonName              = supplied #证书颁发给哪个域名使用。非常重要

emailAddress            = optional #Email

[ req ]

default_bits            = 2048 #加密长度

default_md              = sha1 加密算法

1.创建所需要的文件

#cd /etc/pki/CA

生成证书索引数据库文件

#touch /etc/pki/CA/index.txt

指定第一个颁发证书的序列号

#echo 01 > /etc/pki/CA/serial

2.创建所需要的文件

生成私钥,如果不指定-des3 2048,在使用私钥时不会询问密码

#(umask 066;openssl genrsa -out /etc/pki/CA/private/cakey.pem -des3 2048)

3.生成签名证书

语法格式:

-new: 生成新证书签署请求

-x509: 专用于CA生成自签证书

-key: 生成请求时用到的私钥文件

-days n:证书的有效期限,以天为单位

-out /PATH/TO/SOMECERTFILE: 证书的保存路径

#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:GUANGDONG

Locality Name (eg, city) [Default City]:shenzhen

Organization Name (eg, company) [Default Company Ltd]:NEO

Organizational Unit Name (eg, section) []:opt

Common Name (eg, your name or your server's hostname) []:ca.hunk.teh

Email Address []:[email protected]

查看证书命令

#openssl x509 -in /etc/pki/CA/cacert.pem -noout -text   还有很多参数,可以输错命令将会列出

4.在客户端生成密钥文件

#(umask 066;openssl genrsa -out http.key -des3 2048)

5.在客户端生成证收请求文件

#openssl req -new -key http.key -out http.req   建议生成.req结尾的

查看请求文件命令

#openssl req -in http.req -noout -text

6.将客户端的请求文件传输至CA服务器

7.在CA服务器为指定请求文件生成证书

#openssl ca -in http.req -days 730 -out http.crt

下图为生成的证书信息

8.将生成的证书传输给申请者

另外,当index.txt.attr文件内容unique_subject = yes时,

申请文件中的Subject相同时,将会报以下问题,唯一性检查

Sign the certificate? [y/n]:y

failed to update database

TXT_DB error number 2

如果后面报以下错误,请检查这里的设置

error creating name index:(2,0,1)

证书状态管理

#cat index.txt  V 代表证书是有效的,R 是吊销状态

V 200114153136Z 01 unknown

R 200114155454Z 180114162948Z 02

#openssl ca -status 01

Using configuration from /etc/pki/tls/openssl.cnf

01=Valid (V)

吊销证书

#openssl ca -revoke /etc/pki/CA/newcerts/02.pem

更新吊销列表

1.创建吊销证书的编号文件

#touch /etc/pki/CA/crlnumber

#echo 01 > /etc/pki/CA/crlnumber

2.更新证书吊销列表

#openssl ca -gencrl -out /etc/pki/CA/crl.pem

原文地址:http://blog.51cto.com/191226139/2060913

时间: 2024-11-15 08:19:50

安全与加密-SSL交互与握手过程 创建CA和证书管理的相关文章

SSL交互和握手过程

SSL消息按如下顺序发送:  1.Client Hello  客户发送服务器信息,包括它所支持的密码组.密码组中有密码算法和钥匙大小: 2.Server Hello  服务器选择客户和服务器都支持的密码组到客户. 3.Certificate  服务器发送一个证书或一个证书链到客户端,一个证书链开始于服务器公共钥匙证书并结束于证明权威的根证书.这个消息是可选的,但服务器证书需要时,必须使用它. 4.Certificate request  当服务器需要鉴别客户时,它发送一个证书请求到客户端.在网络

SSL协议的握手过程

SSL协议的握手过程SSL协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密.SSL的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下: ①客户端的浏览器向服务器传送客户端SSL协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息. ②服务器向客户端传送SSL协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己

SSL协议的握手过程(摘录)

SSL协议的握手过程 为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议.SSL 协议既用到了公钥加密技术(非对称加密)又用到了对称加密技术,SSL对传输内容的加密是采用的对称加密,然后对对称加密的密钥使用公钥进行非对称加密.这样做的好处是,对称加密技术比公钥加密技术的速度快,可用来加密较大的传输内容, 公钥加密技术相对较慢,提供了更好的身份认证技术,可用来加密对称加密过程使用的密钥.       SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其

SSL 握手过程

SSL协议的握手过程 SSL 协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术.SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份认证,其主要过程如下: ①客户端的浏览器向服务器传送客户端SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息. ②服务器向客户端传送SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书

SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)

SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接:2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息:3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器:4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器.      用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证

SSL交互过程

SSL交互过程 HTTPS将HTTP和SSL结合,即加了SSL隧道封装的HTTP,通过SSL对客户端身份和服务器进行验证,对传输的数据进行加密.不同情况下SSL的协商过程存在差异,本节以只验证服务器为例介绍.SSL的协商过程如图1所示. 图1 SSL协商过程  客户端发送的第一条消息为ClientHello,其中包含了客户端所推荐的加密参数和准备使用的加密算法. 服务器以三条消息进行响应: 发送选择加密算法的ServerHello. 服务器发送携带自己公钥的Certificate消息. 服务器发

SSL握手过程

一.SSL握手有三个目的:1. 客户端与服务器需要就一组用于保护数据的算法达成一致:2. 它们需要确立一组由那些算法所使用的加密密钥:3. 握手还可以选择对客户端进行认证. 二.SSL握手过程:1. 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器:2. 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端:该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数:3. 客户端对服务器的证书进行验证(有关验证证书,可以参考

HTTPS详解二:SSL / TLS 工作原理和详细握手过程

HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流程,但总感觉少了点什么,应该是少了对安全层的针对性介绍,那么这篇文章就算是对HTTPS 详解一的补充吧.还记得这张图吧. HTTPS 和 HTTP的区别 显然,HTTPS 相比 HTTP最大的不同就是多了一层 SSL (Secure Sockets Layer 安全套接层)或 TLS (Transp

SSL握手过程详解

转载自http://xeseo.blog.163.com/blog/static/5632431620132843532672/ 1. 客户端发送一个Hello消息给服务器,该消息包含以下参数: * 客户端支持的SSL的版本列表 * 客户端所支持的加密算法列表 * 随机数 ClientHello.random 2.1 服务器端回应一个Hello消息给客户端,该消息包含以下内容: * 握手期间使用的SSL的版本 * 握手期间将使用的密钥交换算法 (Deffie-Hellman算法,基于RSA的密钥