加密解密技术基础:
安全的目标:
保密性:confidentiality
确保通信信息不被任何无关的人看到
完整性:integrity
实现通信双方的报文不会产生信息丢失
数据完整性
系统完整性
可用性:availability
通信任何一方产生的信息应当对授权实体可用
攻击类型:
威胁保密性的攻击:窃听、通信量分析
威胁完整性的攻击:更改、伪装、重放、否认
重放:攻击者能截获双方通信的报文,并开始一遍遍发送
否认:通信的双方的某一方发送的,下订单说没下
威胁可用性的攻击:拒绝服务(DoS)
解决方案
技术(加密和解密)
加密和解密:
传统加密方法:替代加密方法、置换加密方法
现代加密方法:现代块加密方法
现代块加密:把发送的整个数据切割固定成块,每块单独加密,前后两个块建立关联关系
服务(用于抵御攻击的服务,也即是为了上述安全目标而特地设计的安全服务)
服务:
认证机制
访问控制机制
密钥算法和协议
对称加密
公钥加密
单向加密
认证协议
加密数据依赖与算法和密钥,安全性依赖于密钥。因为算法是公开的人人都可以得到,但是密钥只有通信的主机才有
Linux系统上述功能解决方案:
OpenSSL(ssl):OpenSSL是ssl协议和加密库的实现
GPG(pgp):GPG是gpg协议的实现
对称加密算法:
对称加密(私钥加密):加密和解密使用同一个密钥
DES:Data Encryption Standard(数据加密标准)
IBM实验室研发;加密端64位明文产生64为密文,解密端64位密文还原64位明文,8个字节为一块,加密和解密使用56位密钥,DES使用16个迭代块实现,是现代加密算法
3DES: Triple DES(三重数据加密标准)
DES的增强版,比DES多3个数量级
AES: Advanced Data Encryption Standard(高级数据加密标准);(128bits, 192bits, 256bits, 384bits)
AES算法欲取待3DES算法,支持128,192和256位密钥长度,有效的密钥长度可达上千位。AES算法采用了更为高效的编写方法,对CPU的占用率较少,目前广泛使用。
特性:
1.加密、解密使用同一个密钥,效率高
2.将原始数据分割成固定大小的块,逐个进行加密
缺陷:
1.密钥过多
2.密钥分发困难
3.数据来源无法确认
非对称加密算法:
公钥加密:密钥是成对出现
公钥(public key):从私钥中提取产生,公开给所有人
私钥(secret key):通过工具创建,自己留存,必须保证其私密性
特点:
用公钥加密的数据,只有私钥能解密,其保密性能到了保障;性能较差,用私钥加密的数据,只能用公钥解密,任何人都何以获得公钥,可以确认发送方身份(身份认证)
功能:
数字签名:主要在于让接收方确认发送方身份,完成身份验证
对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
数据加密:适合加密较小数据
缺点:
密钥长,加密解密效率低下
算法:
RSA:只能实现签名,加密和解密
DSA:只能加密,只能做数字签名
ELGamal:商业算法
就算法本身的实现来讲,公钥加密技术比对称加密技术的速度慢上差不多3个数量级,一个数量级就是10倍,所以3个数量级不是30倍,而是1000倍。因此,在加密数据时是很少用到公钥去加密的。
非对称加密:
基于一对公钥/密钥对
用密钥对中的一个加密,另一个解密
实现加密:
接收者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S
发送者
使用接收者的公钥来加密消息M
将P(M)发送给接收者
接收者
使用密钥S来解密:M=S(P(M)
实现数字签名:
发送者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S
使用密钥S 来加密消息M
发送给接收者S(M)
接收者
使用发送者的公钥来解密M=P(S(M))
结合签名和加密
分离签名
单向加密:
即提出数据指纹;只能加密,不能解密
特性:
定长输出:无论原来的数据是多大级别,其加密结果长度一样
雪崩效应:只要数据有一点不同,结果就会有巨大的不同
不可逆:不能通过特征码还原数据
算法:
md5:Message Digest 5, 128bits
sha1(Secure Hash Algorithm安全散列算法):160bits,sha224,sha256,sha384,sha512
功能:确保数据完整性
如在一个网站下载软件,为了验证软件在下载过程中没有被第三方修改,网站会提供一个MD5和软件的特征码,只要把MD5码下载下来和我们下载的软件进行运算就可以得到软件的特征码,只要这个特征码和网站提供的一样,说明软件没有被修改,如果不一样,百分之百是被修改了。
密钥交换:
密钥交换:IKE(Internet Key Exchange)
公钥加密:通过非对称加密算法,加密对称加密算法的密钥,在用对称加密算法实际要传输的数据
DH (Deffie-Hellman) :生成会话密钥
前提发送方和接受方协商使用同一个大素数p和生成数g,各自产生的随机数X和Y。发送方将g的X次方mod P产生的数值发送给接收方,接受方将g的Y次方mod P产生的数值发送给发送方,发送方再对接收的结果做X次方运算,接受方对接收的结果做Y次方运算,最终密码形成,密钥交换完成。
DH:
A: p,g
B: p,g
A: 生成隐私数据 :x (x<p)计算得出 p^x%g ,发送给B
B: 生成隐私数据 :y, 计算得出 p^y%g,发送给A
A:计算得出 [(p^y%g)^x] %p = p^xy%g,生成为密钥
B:计算得出 [(p^x%g)^y] %p = p^xy%g,生成为密钥
安全协议:
SSL: Secure Socket Layer
功能:机密性,认证,完整性,重放保护
两阶段协议,分为握手阶段和应用阶段
握手阶段(协商阶段): 客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。 后续通信使用的所有密钥都是通过MasterSecret 生成。
应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信。
分层设计:
1、最底层:基础算法原语的实现,aes, rsa, md5
2、向上一层:各种算法的实现
3、再向上一层:组合算法实现的半成品
4、用各种组件拼装而成的各种成品密码学协议软件
SSL/TLS
SSL:Secure sockets Layer
版本:V1.0, V2.0, V3.0
TLS:transport layer Security
版本:V1.0, V1.1, V1.2, V1.3
SSL(Secure Sockets Layer,安全套接层),及其继任者TLS(Transport Layer Security,传输层安全)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。
Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
ChangeCipherSpec协议:一条消息表明握手协议已经完成Alert协议:对握手协议中一些异常的错误提醒,分为fatal和warning 两个级别,fatal 类型错误会直接中断SSL 链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
Record协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
HTTPS协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL” 或“HTTP over TLS”,对http 协议的文本数据进行加密处理后,成为二进制形式传输
OpenSSL简介:
OpenSSL由三部分组成:libencrypto库,libssl库,openssl多用途命令行工具。
OpenSSL是网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
OpenSSL是一个强大的安全套接字层密码库,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,它还是一个多用途的、跨平台的密码工具。
SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已成为Internet上保密通讯的工业标准。安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。
SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上。
SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。
通过以上叙述,SSL协议提供的安全信道有以下三个特性:
1、数据的保密性信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。
2、数据的完整性加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。
3、安全验证加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。
基本功能:
OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序。OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的。
作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用。
OpenSSL的应用程序已经成为了OpenSSL重要的一个组成部分。如OpenCA,就是完全使用OpenSSL的应用程序实现的。OpenSSL的应用程序是基于OpenSSL的密码算法库和SSL协议库写成的。
OpenSSL的应用程序主要包括密钥生成、证书管理、格式转换、数据加密和签名、SSL测试以及其它辅助配置功能。
辅助功能:
BIO机制是OpenSSL提供的一种高层IO接口,该接口封装了几乎所有类型的IO接口,如内存访问、文件访问以及Socket等。这使得代码的重用性大幅度提高,OpenSSL提供API的复杂性也降低了很多。
OpenSSL对于随机数的生成和管理也提供了一整套的解决方法和支持API函数。随机数的好坏是决定一个密钥是否安全的重要前提。
OpenSSL还提供了其它的一些辅助功能,如从口令生成密钥的API,证书签发和管理中的配置文件机制等等。
特点:
OpenSSL采用C语言作为开发语言,这使得OpenSSL具有优秀的跨平台性能,这对于广大技术人员来说是一件非常美妙的事情,可以在不同的平台使用同样熟悉的东西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平台,这使得OpenSSL具有广泛的适用性。
(1)在通信之前,服务器端通过加密算法生成一对密钥,并把其公钥发给CA申请数字证书。
(2)CA审核后,结合服务端发来的相关信息生成数字证书,并把该数字证书发回给服务器端。
(3)客户端和服务器端经tcp三次握手,建立初步连接。
(4)客户端发送http报文请求并协商使用哪种加密算法。
(5)服务端响应报文并把自身的数字签名发给服务端。
(6)客服端下载CA的公钥,验证其数字证书的拥有者是否是服务器端(这个过程可以得到服务器端的公钥)。(一般是客户端验证服务端的身份,服务端不用验证客户端的身份。)
(7)如果验证通过,客户端生成一个随机对称密钥,用该密钥加密要发送的URL链接申请,再用服务器端的公钥加密该密钥.
(8)把加密的密钥和加密的URL链接一起发送到服务器。
(9)服务器端使用自身的私钥解密,获得一个对称密钥,再用该对称密钥解密经加密的URL链接,获得URL链接申请。
(10)服务器端根据获得的URL链接取得该链接的网页,并用客户端发来的对称密钥把该网页加密后发给客户端。
(11)客户端收到加密的网页,用自身的对称密钥解密,就能获得网页的内容了。
(12)TCP四次挥手,通信结束。
以上可概括为:
客户端向服务器端索要并验证证书
双方协商生成“会话秘钥”
双方采用“会话秘钥”并进行加密通信
第一阶段:
支持的协议版本,如tls1.2
客户端生成一个随机数,稍后用户会生成“会话密匙”
支持的加密算法,如AES 3DES RSA
支持的压缩算法
第二阶段:
确认使用的加密通信协议版本,如tls1.2
服务器端生成一个随机数,稍后用于生成“会话密匙”
确认使用的加密算法
服务器证书
第三阶段:
验证服务器证书,在确认无误后取其公钥(发证机构 证书完整性 证书持有者 证书有效期 吊销列表)
发送以下信息给服务器端
一个随机数
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
客户端握手结束通知
第四阶段:
收到客户端发来的第三个随机数后,计算生成本次会话所有的“会话密匙”
向客户端发送如下信息
编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送
服务端握手结束通知
OpenSSL:开源项目
三个组件:
openssl:多用途的命令行工具,包openssl
libcrypto:加密算法库,包openssl-libs
libssl:加密模块应用库,实现了ssl及tls,包nss
openssl 命令:
两种运行模式:交互模式和批处理模式
openssl version :程序版本号
标准命令、消息摘要命令、加密命令
标准命令:enc, ca, req, …
对称加密:
工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
enc命令
加密:openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
-out the output filename, standard output by default. (默认输出文件名)
[root@localhost ~]#cp /etc/fstab ./ [root@localhost ~]#openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext enter des-ede3-cbc encryption password: Verifying - enter des-ede3-cbc encryption password: [root@localhost ~]#cat fstab.ciphertext U2FsdGVkX1/hU0jm/EPlZbiQUmAIsjgHV7GfvQ04usIvPq/xgCN/xtBC0tr2Agk6 Q04cXS+5wreXMHMckBd/4infdJfivJQrAyIDmGBmneI6miMp7Hrks+L4HNfYJego ZquUJ37uXI3BkStSdOI8d7AWYItK7sobT+vgDgwCg/BB7Le+dXEIl5+zxpaMv4Fs yD92SVs7JAqbHxELtFMAPcn9d3CwRqg4wOBHNnvk3Fnvy9VtBu4M613OFFwiswOJ YPSNVCyO+tSLxTr9ckdqwgiQrtUmiKK0gHQ4q3BZt78m778Twe7sOk9q2tOjjTUL eOHVHrkmyYRnsagdp690j95FSqytFhQEB2itZQRFFKZ88Ul2ph8KnLo0wwkzRspN SLtXHh0uAxWbKAEHlm37xo/3SL67J65FHBB1Pooao+O5PURr42nnSfauSBefVgNd 37/+i4VOlJJUXz4kRhtrbHYGvH6zpAjRhoKza53+MiuQVe/I0QYnRwWH8UVaTBKw mRk1+IjynAkvGGz7eJtpQxgCbW3WQxjGth/LgAoMh/ptQHDk77oPO4PJiUH/GZJR FM4yztHfwnJF4m/nif/IXsrhk1mbh30UxS5Es5UU4AMoQK61J+815a8UD3B323Bg 0FkXYWBJe/H2rbEcGGCd8Ca15HsMjoTFxls+rbLTR3Af7VH1viiBIkpIuthaujln kcxsVlE2cbBdNlvWxwe2MzEilZ9C66vnH4DXPJ081nA=
解密:openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile
[root@localhost ~]#rm fstab [root@localhost ~]#openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab enter des-ede3-cbc decryption password:
单向加密:
工具:md5sum, sha1sum, sha224sum,sha256sum…
openssl dgst
dgst命令:
openssl dgst -md5 [-hex 默认] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
[root@localhost ~]#sha Tab键补全 sha1sum sha224sum sha256sum sha384sum sha512sum sharesec shasum [root@localhost ~]#md5sum /etc/fstab 6fa166c9a97af6551d8ccf19b6f3136d /etc/fstab [root@localhost ~]#openssl dgst -md5 /etc/fstab MD5(/etc/fstab)= 6fa166c9a97af6551d8ccf19b6f3136d [root@localhost ~]#sha1sum /etc/fstab d5284c0cb1d454bbab115614bcee5ef3902b0566 /etc/fstab
生成用户密码
passwd 命令:
openssl passwd -1 -salt SALT(最多8 位)
openssl passwd -1 -salt centos
[root@localhost ~]#openssl passwd -1 -salt 12345678 qwertyui (最多8 位) $1$12345678$FpVa9qyl5GiVNtY//kUDV. [root@localhost ~]#openssl passwd -1 -salt 123458 qwertyui $1$123458$4zZbsxMC2gTRwvXxBbleu/
生成随机数:
openssl rand -base64 | -hex NUM
NUM: 表示字节数;-hex 时,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2
-base64 Perform base64 encoding on the output. (进行base64编码输出)
-hex Show the output as a hex string. (将输出显示为十六进制字符串)
[root@localhost ~]#openssl rand -base64 2 r5A= [root@localhost ~]#openssl rand -base64 5 /q8vsB8= [root@localhost ~]#openssl rand -hex 2 94bf [root@localhost ~]#openssl rand -hex 5 f367c5f44d [root@localhost ~]#openssl passwd -1 -salt $(openssl rand -hex 4) Password: $1$02ce1958$TFFQ8O5igytGd4G/4Q2Bv1 [root@localhost ~]#openssl passwd -1 -salt $(openssl rand -hex 4) Password: $1$3d60e8e5$1RfGtyBRV.3patznOzD.B/ [root@localhost ~]#openssl passwd -1 -salt 3d60e8e5 Password: $1$3d60e8e5$1RfGtyBRV.3patznOzD.B/
公钥加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
数字签名:
算法:RSA, DSA, ELGamal
密钥交换:
算法:dh
DSA: Digital Signature Algorithm (数字信号运算法则)
DSS:Digital Signature Standard (数字签名标准)
RSA:
生成私钥:
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS(umask 077; openssl genrsa -out test.key -des 2048)
[root@localhost ~]#openssl genrsa -out mytest.key 1024 Generating RSA private key, 1024 bit long modulus .........................++++++ ........++++++ e is 65537 (0x10001) [root@localhost ~]#openssl genrsa 1024 > mytest.key Generating RSA private key, 1024 bit long modulus ..............................................................................++++++ ..............++++++ e is 65537 (0x10001) [root@localhost ~]#(umask 0077;openssl genrsa -out test.key 2048) Generating RSA private key, 2048 bit long modulus .........................+++ ........+++ e is 65537 (0x10001) [root@localhost ~]#openssl genrsa 2048 Generating RSA private key, 2048 bit long modulus .........................................................................................+++ ..............................................................+++ e is 65537 (0x10001) -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAr1tusenHPi35gxLJj2QZRh5M13RvGnUB43LzhbsnoHpBBckp Q8tbYUSmTnv3hLWgSpsP6vte/H2M0klDAl3Y47KhX2+yTodxgLlVCbrgEg0nHvD3 BM+pWqV4vuul9SQNojvHnoCHTwMHZgnr54FAIOCJWCU1JVsl5ZUcMcDef8i9nyMr Q8a+N6hps17OTchPpOtNV5jWPO2oIJ22qdGbbUWVqx+9ev5A5BS...... [root@localhost ~]#openssl genrsa 1024 -out mytest.key Generating RSA private key, 1024 bit long modulus .....................++++++ .................................................++++++ e is 65537 (0x10001) -----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQC9aqa1x79G6fNmD5j9RbivLC6g50YUxk+empC7LCDTbpKnbqox /Ik7K2FBUEgySQBNP/gJrinF2X6RNMe7cuwhGgRc0b+1LYgkknUPm+t/1eJTRjvI dPvX9ghP/ZPh9spuIbh1Aw6f/6b/0Js3lqrZGn8GN/EW8Ou+fbWtF3Q8XQIDAQAB AoGAE/CNOieb4CgyojTUIx1a0r3w7qlJ/Fff+89DmyCLGBbUw2Fn8zklbSAk7c44 ......
从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE
Openssl rsa -in test.key -pubout -out test.key.pub
[root@localhost ~]#openssl rsa -in test.key -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4vlRcw/3eGs5hsg2zph1 Y8GSoOTf3HSC+E8hOm9SUOjrm58jZMnv/+u6mJv6NJPf2xavDLstG+X9oqwztuJU gKdN13pJ9BzfOOK2GTB2nDQXq+nNp9DQLtCu/i+CDRKsHFnnLEGapFRwQvCGz/af 8aI3a7U2Hhllz78VvdYY7U3Kfk5AR7/kbADwS1W0Tyqg3GX7BbAUI34W03igpmCC C37dTEolRUpYNsLTZH8g7RsocJHVqIWH1GxcfctJyJ91+qtGT6NsAonypbVhBwkv D31HAaWKQKSdOYaxrOp1T7iWjfwUAykcXkEsgzmAbx7IRnrvPL6iEDI58xzX62FV 5wIDAQAB -----END PUBLIC KEY-----
随机数生成器:伪随机数字
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
CA和证书:
PKI: Public Key Infrastructure(公钥基础设施)
是一种遵循既定标准的秘钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必须的密钥和证书管理体系,PKI就是利用公钥理论和技术建立的提供安全服务的基础设施。PKI技术是信息安全技术的核心,也是电子商务的关键和基础技术。
完整的PKI系统必须具有权威认证机构(CA)、数字证书库、密钥备份及恢复系统、证书作废系统、应用接口(API)等基本构成部分,构建PKI也将围绕着这五大系统来着手构建。
PKI的基础技术包括加密,数字签名,数据完整机制,数字信封,双重数字签名等。
签证机构:CA (Certification Authority)
用户在注册机构注册证书,CA就会签发用户的公钥认证,并且和申请者的信息绑定在一起并且签名后,以证书形式发给申请者,然后在本地的证书存取库备份。
注册机构:RA (Registration Authority)
一般用户都是在这里注册证书。
证书吊销列表:CRL (Certificate Revocation List)
如果用户私钥丢失,必须要申请吊销证书,否则可能会被别人冒名顶替。
证书存取库:
所有发出的证书都会在这里存一份,如果丢失证书可以在这里得到,如果丢失私钥那么只能申请证书撤销。
X.509 :定义了证书的结构以及认证协议标准
版本号:标识证书的版本
序列号:标识证书的唯一证书,类似于身份证
签名算法ID:证书的算法标识
发行者名称:证书颁发这的可识别名
有效期限:证书有效的时间段
主体名称:证书拥有着的可识别名
主体公钥:关键部分
发行者的唯一标识:证书颁发者的唯一标识符
主体的唯一标识:证书拥有者的唯一标识符
扩展信息
发行者的签名:证书颁发者对证书的签名,上述整个内容做单向加密,得到的特征码用自己私钥加密,并附加到后面,用来生产发行者的签名
证书获取:
证书类型:
证书授权机构的证书
服务器
用户证书
获取证书两种方法:
使用证书授权机构
生成签名请求(csr)
将csr 发送给CA
从CA 处接收签名
自签名的证书
自已签发自己的公钥
创建CA和申请证书
1.创建私有CA:
在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可
三种策略:
匹配:申请填写的信息必须和CA设置信息一致
支持:必须填写这项申请信息
可选:可写可不写
(1) 自签证书,生成私钥
[root@localhost /etc/pki/CA/private]#(umask 0077;openssl genrsa -out cakey.pem 2048) Generating RSA private key, 2048 bit long modulus ...............................+++ ....................................................................+++ e is 65537 (0x10001)
(2) 生成自签名证书
-new:生成新证书签署请求
-x509:生成自签格式证书,专用于创建私有CA时
-key:生成请求时用到的私有文件路径
-out:生成的请求文件路径;如果自签操作将直接生成签署过的证书
-days:证书的有效时长,单位是天 (不写默认为365天)
[root@localhost ~]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN (国家) State or Province Name (full name) []:BeiJing (省份) Locality Name (eg, city) [Default City]:BeiJing (城市) Organization Name (eg, company) [Default Company Ltd]:Tencent (公司) Organizational Unit Name (eg, section) []:Ops (部门) Common Name (eg, your name or your server's hostname) []:ca.tencent.com (个人或主机名) Email Address []:caadmin@Rookie.com (邮箱地址) [root@localhost /etc/pki/CA]#ll total 4 -rw-r--r-- 1 root root 1424 May 29 20:42 cacert.pem (生成的自签证书)
(3)为CA提供所需的文件
[root@localhost /etc/pki/CA]#touch index.txt 生成证书索引数据库文件 [root@localhost /etc/pki/CA]#echo 01 > /etc/pki/CA/serial 制定第一个颁发证书的序列号
2.要用到证书进行安全通信的服务器,需要向CA请求签署证书
(以httpd为例) [root@localhost /etc/pki/CA]#yum install httpd -y [root@localhost ~]#vim /var/www/html/index.html Test Page [root@localhost ~]#systemctl start httpd.service [root@localhost ~]#ss -tnl LISTEN 0 128 :::80 :::* [root@localhost ~]#mkdir /web/ssl -pv (用来保存证书和私钥)
(1)生成私钥
[root@localhost /web/ssl]#(umask 0077;openssl genrsa -out httpd_ key.pem) Generating RSA private key, 1024 bit long modulus ..........................++++++ ......................++++++ e is 65537 (0x10001)
(2)生成证书签署请求
[root@localhost /web/ssl]#openssl req -new -key httpd_key.pem -out httpd.csr Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:BeiJing Locality Name (eg, city) [Default City]:BeiJing Organization Name (eg, company) [Default Company Ltd]:Tencent Organizational Unit Name (eg, section) []:Ops Common Name (eg, your name or your server's hostname) []:www.tencent.com Email Address []:www.admin@Rookie.com 注意:默认国家,省,公司名称三项必须和CA一致 Please enter the following 'extra' attributes 可输入以下额外属性(可省略) to be sent with your certificate request A challenge password []: An optional company name []:
(3)将请求通过可靠方式发送给CA主机
(4)在CA主机上签署证书
[root@localhost /web/ssl]#openssl ca -in httpd.csr -out httpd.crt Certificate is to be certified until May 29 14:04:18 2018 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
[root@localhost ~]#yum -y install mod_ssl [root@localhost ~]#vim /etc/httpd/conf.d/ssl.conf
[root@localhost /web/ssl]#systemctl restart httpd.service
将其传到桌面,并修改后缀为crt(Windows可识别)
吊销证书
(1) 客户端获取要吊销的证书的serial(在使用证书的主机执行):
[root@localhost ~]#openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
(2) CA主机吊销证书
先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致
吊销:
[root@localhost ~]#openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem其中的SERIAL要换成证书真正的序列号;
(3) 生成吊销证书的吊销编号(第一次吊销证书时执行)
[root@localhost ~]#echo 01 > /etc/pki/CA/crlnumber
(4) 更新证书吊销列表
[root@localhost ~]## openssl ca -gencrl -out thisca.crl
参考链接:
http://httpd.apache.org/docs/2.2/ssl/
http://3y.uu456.com/bp_4fcga9ntip2mdyx42w3q_1.html
http://www.360doc.com/content/12/0908/00/699489_234931198.shtml
原创文章,作者:Linux.rookie,如若转载,请注明出处:http://www.178linux.com/77188