一、加密解密过程描述:
互联网数据传输需要实现:数据隐秘性,数据完整性,身份认证和密钥交换;
例如:Alice向Bob传输数据;
数据加密过程:
1、Alice生成原数据,用单向加密算法计算出原数据的特征码;
2、用自己的私钥加密原数据特征码并附加在原数据的后面;
3、用对称加密算法为整个数据加密生成对称加密密匙;
4、用Bob提供的公钥加密对称加密密匙,并附加在加密的数据后面一并发送给Bob。
数据解密过程:
1、Bob接收到数据,用自己的私钥解密对称加密密匙;确定数据接收方Bob的身份;
2、用解密后的密匙解密加密的数据;保证数据隐秘性;
3、用Alice提供的公钥解密原数据的特征码;验证数据发送方Alice的身份;
4、用相同的单向加密算法计算出原数据的特征码与解密后的特征码作比较;保证数据完整性。
在上述数据数据传输过程中,要双方要进行身份认证需要获取对方的公钥,即密钥交换,公钥在网络传输过程中很容易被窃取或篡改,无法保证可信度,而这个过程需要一个可信任的第三方机构,即CA。
基于CA完成密钥交换工作流程:
申请证书:
1、Alice生成密钥和签署请求,向CA申请证书;
2、CA接收到请求,验证证书中的信息;
3、CA签署证书,CA用单向加密算法生成证书的特征码;
4、CA的自签证书的私钥加密证书的特征码附加在证书后面,一并发送给Alice。
身份验证:
1、Alice获取证书与Bob通信,Alice携带证书向Bob发送访问请求;
2、Bob接收到请求,Bob使用CA的自签证书的公钥解密证书的特征码,完成CA的身份验证;
3、用相同的单向加密算法计算出证书的的特征码与解密后的特征码作比较;保证证书的完整性;
4、Bob提取Alice的公钥信息,然后将自己的证书发送给Alice。
二、CA的概念:
PKI:Public Key Infrastructure,公钥基础设施;是提供公钥加密和数字证书签名的平台。
PKI的实现过程:
鉴定证书是否合法
验证证书的完整性
验证主机的名称和申请者名称是否相同
检查证书的有效期
检查证书是否已经被吊销
PKI由以下及部分组成:
CA:签证机构
RA:注册机构
CRL:证书吊销列表
证书存取库
CA是PKI的核心,负责颁发、认证证书,管理已颁发证书;
目前通用证书格式标准为x.509,定义了证书结构和认证协议标准:
认证协议标准为:IP安全、TLS/SSL和S/MIME
证书结构为:
证书版本号
证书序列号
算法参数
颁发者名称
有效期限
主体名称
主体公钥
颁发者ID
主体ID
三、Openssl构建私有CA:
在企业内部,不涉及外网通信的情况下,可以在Linux服务器上基于Openssl构建私有CA。
# rpm –ql openssl
# /etc/pki/tls/openssl.cnf :openssl主配置文件; # /etc/pki/CA # /etc/pki/CA/certs :证书存放位置; # /etc/pki/CA/private :根证书存放位置: # /etc/pki/CA/newcerts :新证书存放位置; # /etc/pki/CA/crl :已吊销证书存放位置;
实验环境:
CA服务器,IP:192.168.1.10,系统版本:CentOS6.6 x86_64;
通信节点,IP:192.168.1.11,系统版本:CentOS6.6 x86_64;
实验拓扑:
三、实验过程:
(一)、建立CA服务器:
1、生成密钥:
# (umask 077 ; opensslgenrsa -out /etc/pki/CA/private/cakey.pem 2048) genrsa:生成密钥; umask 077:保证密钥文件的权限,在()内执行,表示在子shell中运行,不影响当前shell的umask值; -out:指明密钥文件保存位置; 2048:表示密钥长度,可自定义;
密钥文件权限为600,umask值没有发生改变:
2、自签证书;
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem-days 3650 req:生成证书签署请求; -new:为新的请求,会要求用户填写证书相关信息; -x509:生成自签署证书; -key:指定私钥文件; -out:指定生成证书位置; -days:证书有效天数;
# Country Name (2 letter code) [XX]:CN //国家 # State or Province Name (full name) []:HeNan //省份(洲) # Locality Name (eg, city) [Default City]:NanYang //城市 # Organization Name (eg, company) [Default Company Ltd]:Chencer //公司 # Organizational Unit Name (eg, section) []:Ops //部门 # Common Name (eg, your name or your server‘s hostname) []:ca.chencer.org //CA服务器主机名 # Email Address []:ca@chencer.org //CA管理员邮箱;
3、初始化工作环境;
# touch /etc/pki/CA/{index.txt,serial} index.txt:证书缩影数据库; serial:签署证书编号文件; # echo 01 > /etc/pki/CA/serial :导入编号初始值,表示从01开始;
(二)、通信节点生成证书:
假设:CA服务器为httpd服务用于实现https而专用;
1、通信节点生成请求;
# (umask 077; openssl genrsa -out /etc/httpd/httpd.key 2048) :生成密钥对儿; # openssl req -new -key /etc/httpd/httpd.key -out /etc/httpd/httpd.csr :生成证书签署请求
除以下选项,其他必须与CA服务器证书选项相同;
# Common Name (eg, your name or your server‘s hostname)[]:www.chencer.org //通信节点主机名; # Email Address []:web@chencer.org //通信节点管理员邮箱; # A challenge password []: //设置密码;如果设置密码,需要将密码提供给CA服务器; # An optional company name []:
# scp /etc/httpd/httpd.csr 192.168.1.10:/etc/pki/CA/ :把签署请求文件发送给CA服务器;
(三)、CA服务器签署证书;
# openssl ca -in /etc/pki/CA/httpd.csr -out /etc/pki/CA/httpd.crt-days 3650 :签署证书;
验证信息,确认签署:
# scp /etc/pki/CA/httpd.crt 192.168.1.11:/etc/httpd/ :发送给请求者;
# cat /etc/pki/CA/serial :查看签署证书编号文件; # cat /etc/pki/CA/ index.txt :查看证书缩影数据库
证书编号每签一次数值加1,证书缩影数据库记录信息,前面有V标识:
(四)、吊销证书:
1、通信节点请求吊销;
# openssl x509 -in /etc/httpd/httpd.crt -noout -serial -subject :获取证书serial;
CA服务器根据通信节点提交的serial和subject信息来验正与index.txt文件中的信息是否一致;
2、CA吊销证书;
# openssl ca -revoke /etc/pki/CA/newcerts/01.pem :吊销证书
# cat /etc/pki/CA/index.txt :查看证书缩影数据库;
V标识变为R:
# echo 00 > /etc/pki/CA/crlnumber :生成吊销证书的编号(如果是第一次吊销);
# openssl ca -gencrl -out /etc/pki/CA/crl/thisca.crl :更新证书吊销列表; # openssl crl -in /etc/pki/CA/crl/thisca.crl -noout –text :如果需要,查看crl文件的内容:
以上仅为openssl构建自有CA的基本操作,接下来完成httpd服务学习之后,我们将继续完成实现https协议时httpd服务端配置。
本文出自 “小马的学习记录” 博客,请务必保留此出处http://masachencer.blog.51cto.com/8683770/1680616
原文地址:http://masachencer.blog.51cto.com/8683770/1680616