openssl总结及私有CA的搭建

一、前言

什么是openssl?讲openssl之前我们先了解一下什么是ssl?ssl是secure socket layer的简称,其使用对称加密,非对称加密(公钥加密解密),单向加密解密结合证书实现数据传输安全,openssl默认是在系统安装时就已经安装上去的。随着互联网的迅速发展,网络通信已经成为传递信息的主要途径。而通信时的数据传输大部分都是明文传输的,在网络不安全的环境下,如果没有一套数据加密机制,就会导致敏感信息和重要数据泄漏,从而引起不可估计的损失。而Openssl正好弥补了这一缺陷,那什么是OpenSSL呢?OpenSSL是一套强大的具有加密功能的组件,它包含libcrypto(公共加密库)、libssl(SSL协议的实现)和Openssl(多功能命令工具),因其开源思想,现已广泛应用与数据通信加密领域。Openssl还可以在局域网内构建私有CA,实现局域网内的证书认证和授权,保证数据传输的安全性。具体怎么实现,请看之后的演示。

在电子商务没有出现之前,我们基本上通过面对面的钱权交易,不存在加密解密问题;随着电子商务的兴起,我们现在很多的交易都是在互联网上完成的,银行转账,网上购物等等。早期的各种传输软件都没有考虑到安全的问题,都是以明文进行传输,信息被别人窃取,篡改等等;因此有很多群体靠网络发家!!犯罪!!但是网络交易确实给我们的生活带来了极大的方便,怎么解决这个问题呢;美国NIST,为了保证计算机的安全,提出了几个要求:

1、数据要有保密性:数据保密性和隐私性;确保信息不被别人获取,个人存储的信息不能被别人收集到;

2、完整性:包括数据完整性和系统完整性;数据完整性确保数据和程序只能以特定权限的进行授权和改变,只能授权之后才能改变或者被改变;确保系统以一种正常的方式执行预定的功能,不会因别人的介入改变方向;

3、可用性,工作迅速,可正常使用的情况并获取到信息;

二、基本概念

加密:我们将文字转换成不能直接阅读的形式(即密文)的过程称为加密。数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为"密文",使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。

解密:我们将密文转换成能够直接阅读的文字(即明文)的过程称为解密。

大多数计算机加密系统都属于以下两种类型之一:"对称式"和"非对称式"。

对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要加密大量数据时使用。对称性加密也称为密钥加密。

常用的对称加密:DES、3DES、AES、DH

因为对称式的加密方法如果是在网络上传输加密文件就很难把密钥告诉对方,不管用什么方法都有可能被别窃听到。且通信方如果比较多,秘钥过多,不便于管理,密钥传输和交换难以实现;因此产生了公钥加密(也叫非对称加密):

非对称式加密就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为"公钥"和"私钥",它们两个必需配对使用,否则不能打开加密文件。这里的"公钥"是指可以对外公布的,"私钥"则不能,只能由持有人一个人知道。"公钥"是可以公开的,也就不怕别人知道,收件人解密时只要用自己的私钥即可以,这样就很好地避免了密钥的传输安全性问题。

常用加密算法:RSA, DSA, EIGamal ;RSA:身份认证和加密;DSA:身份认证

单向加密 又称数据完整性校验加密方式,可以利用算法计算数据指纹信息,此种方式得出的数据指纹信息具有定长和雪崩效应(数据中的微小变化将会导致数据指纹信息的巨大变化)的特性,常用来实现数据完整性的验证。

公钥私钥的原则:

1. 一个公钥对应一个私钥。

2. 密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。

3. 如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。

4. 如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

三、加密传输原理

加密的各种算法只是对文件进行了加密,可是如何让其能在网络上进行安全的传输,而不被窃听,篡改呢?

用电子邮件的方式说明一下原理。

使用公钥与私钥的目的就是实现安全的电子邮件,必须实现如下目的:

1. 我发送给你的内容必须加密,在邮件的传输过程中不能被别人看到。

2. 必须保证是我发送的邮件,不是别人冒充我的。

要达到这样的目标必须发送邮件的两人都有公钥和私钥。

公钥,就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载,公钥其实是用来加密/验章用的。私钥,就是自己的,必须非常小心保存,最好加上 密码,私钥是用来解密/签章,首先就Key的所有权来说,私钥只有个人拥有。公钥与私钥的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能 用公钥解密。

随着计算机网络技术的迅速发展和信息化建设的大力推广,越来越多的传统办公和业务处理模式开始走向电子化和网络化,从而极大地提高了效率、节约了成本。与传统的面对面的手工处理方式相比,基于网络的电子化业务处理系统必须解决以下问题:

1如何在网络上识别用户的真实身份;

2如何保证网络上传送的业务数据不被篡改;

3如何保证网络上传送的业务数据的机密性;

4如何使网络上的用户行为不可否认;———-如我们网上购物,东西到了,我们不承认,商家将遭受损失;

例如: 假设用户甲要寄信给用户乙,他们互相知道对方的公钥。甲就用乙的公钥加密邮件寄出,乙收到后就可以用自己的私钥解密出甲的原文。由于别人不知道乙的私钥,所以即使是甲本人也无法解密那封信,这就解决了信件保密的问题。另一方面,由于每个人都知道乙的公钥,他们都可以给乙发信,那么乙怎么确信是不是甲的来信呢?那就要用到基于加密技术的数字签名了。

基于公开密钥算法的数字签名技术和加密技术,为解决上述问题提供了理论依据和技术可行性;同时,《中华人民共和国电子签名法》的颁布和实施为数字签名的使用提供了法律依据,使得数字签名与传统的手工签字和盖章具有了同等的法律效力。

PKI(Public Key Infrastructure)是使用公开密钥密码技术来提供和实施安全服务的基础设施,其中CA(Certificate Authority)系统是PKI体系的核心,主要实现数字证书的发放和密钥管理等功能。数字证书由权威公正的CA中心签发,是网络用户的身份证明。使用数字证书,结合数字签名、数字信封等密码技术,可以实现对网上用户的身份认证,保障网上信息传送的真实性、完整性、保密性和不可否认性。

数字证书目前已广泛应用于安全电子邮件、网上商城、网上办公、网上签约、网上银行、网上证券、网上税务等行业和业务领域。

数字证书是一种数字标识,如同我们的身份证一样,是网络上的身份证明,它是由证书授权机构(CA)签名颁发的数字文件,该签名使得第三者不能伪造和篡改证书。

数字证书:  数字证书为实现双方安全通信提供了电子认证。在因特网、公司内部网或外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。

ITU-T的X..509国际标准定义了数字证书的格式,目前X .509v3数字证书的主要内容如图:

注册授权服务器(RA) :负责定期从数据库中提取已审核通过的证书申请/更新/作废信息,按既定格式打包提交到CA服务器,并接收和记录返回的结果。

证书签发服务器(CA):负责密钥对(公私钥对)的产生,可采用软件方式或硬件方式(加密机);接收RA服务器的请求,签发/更新/作废用户证书;定期签发CRL(证书撤销列表)。

CA是证书的签发机构,它是PKI的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

CA 也拥有一个证书(内含公钥)和私钥。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。

如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。

如果一个用户想鉴别另一个证书的真伪,他就用 CA 的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。

使用数字证书能做什么?  

数字证书在用户公钥后附加了用户信息及CA的签名。公钥是密钥对的一部分,另一部分是私钥。公钥公之于众,谁都可以使用。私钥只有自己知道。由公钥加密的信息只能由与之相对应的私钥解密。为确保只有某个人才能阅读自己的信件,发送者要用收件人的公钥加密信件;收件人便可用自己的私钥解密信件。同样,为证实发件人的身份,发送者要用自己的私钥对信件进行签名;收件人可使用发送者的公钥对签名进行验证,以确认发送者的身份。如此我们便可以安全的在网上进行各种交易,接下来我们实践操作一下此过程的实现。

四、Openssl 基本使用方法

1、OpenSSL 是一个强大的安全套接字层密码库, 在应用层和传输层之间加了一个半层,基于套接字传输时专用的;所以不是对所有的数据进行加密;Appache使用它加密HTTPS,http(80/tcp)->ssl—>https(443/tcp):两个完全不同的协议;OpenSSH使用它加密SSH,它不止是一个库,而且还是一个多用途、跨平台的密码加密工具。整个软件包有三部份构成:

密码算法库(7种分组加密算法、RC4的流加密算法)

SSL 协议库(SSLv2,v3、TLSv2,v3)

应用程序(密码生成、证书管理、格式转换、数据加密签名)

2、openssl基本用法

#查看是否安装;
[root@zabbix ~]# rpm -ql openssl
/etc/pki/CA            #所有CA服务器相关内容的默认存储位置(此路径在主配置文件中定义)
/etc/pki/CA/certs      #证书存放位置
/etc/pki/CA/crl        #已吊销证书存放路径
/etc/pki/CA/newcerts   #新证书存放路径
/etc/pki/CA/private    #根证书私钥存放路径
/etc/pki/tls
/etc/pki/tls/certs
/etc/pki/tls/certs/Makefile
/etc/pki/tls/certs/make-dummy-cert
/etc/pki/tls/certs/renew-dummy-cert
/etc/pki/tls/misc
/etc/pki/tls/misc/CA
/etc/pki/tls/misc/c_hash
/etc/pki/tls/misc/c_info
/etc/pki/tls/misc/c_issuer
/etc/pki/tls/misc/c_name
/etc/pki/tls/openssl.cnf                  #主配置文件
/etc/pki/tls/private                      
/usr/bin/openssl                          #二进制运行程序
/usr/lib64/.libcrypto.so.1.0.1e.hmac      #公共加密库
/usr/lib64/.libcrypto.so.10.hmac          #公共加密库
/usr/lib64/.libssl.so.1.0.1e.hmac         #ssl协议实现共享库
/usr/lib64/.libssl.so.10.hmac             #ssl协议实现共享库
/usr/lib64/libcrypto.so.1.0.1e            #公共加密库
/usr/lib64/libcrypto.so.10                #公共加密库
/usr/lib64/libssl.so.1.0.1e               #ssl协议实现共享库
/usr/lib64/libssl.so.10                   #ssl协议实现共享库
/usr/lib64/openssl
/usr/lib64/openssl/engines



[root@zabbix ~]# openssl ?          #可以显示帮助信息
openssl:Error: '?' is an invalid command.

Standard commands
asn1parse             ca #CA证书相关子命令  ciphers               cms               
crl#吊销证书相关操作  crl2pkcs7             dgst#提取特征码命令   dh                
dhparam               dsa                   dsaparam              ec                
ecparam               enc                   engine                errstr            
gendh                 gendsa                genpkey               genrsa#生成私钥            
nseq                  ocsp                  passwd#用户密码加密   pkcs12            
pkcs7                 pkcs8                 pkey                  pkeyparam         
pkeyutl               prime                 rand#字符串随机生成   req#证书申请相关操作               
rsa#提取公钥          rsautl                s_client              s_server          
s_time                sess_id               smime                 speed#测试算法的加密性能             
spkac                 ts                    verify                version#查看openssl版本           
x509#指定证书类型              

Message Digest commands (see the `dgst' command for more details)
md2               md4               md5               rmd160            
sha               sha1              
##通过openssl dgst来调用上面的算法,完成单向加密,提取数据指纹信息

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       base64            bf                
bf-cbc            bf-cfb            bf-ecb            bf-ofb            
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc          
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb         
des               des-cbc           des-cfb           des-ecb           
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb       
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb      
des-ofb           des3              desx              idea              
idea-cbc          idea-cfb          idea-ecb          idea-ofb          
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc           
rc2-cfb           rc2-ecb           rc2-ofb           rc4               
rc4-40            seed              seed-cbc          seed-cfb          
seed-ecb          seed-ofb          zlib              
##通过openssl enc字母令指定上面的加密算法来执行加密解密操作


#查看openssl的版本
[root@zabbix ~]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

#对称加密
openssl enc -ciphername [-in filename] [-out filename] [-pass arg]
       [-e] [-d] [-a/-base64] [-A] [-k password] [-kfile filename] [-K key]
       [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md] [-p] [-P] [-bufsize
       number] [-nopad] [-debug] [-none] [-engine id]
-e:指定为加密,可以不写默认为加密
 
-des3:指定加密算法

-salt:默认设置,生成一段字符串放在密码最前面进行加密,提高加密难度。  (加点盐)

-a:基于base64处理数据。加密结果进行base64编码处理

-in:读取那个文件进行加密

-out:输出到那里

-d:指定为解密     

例如:
[root@zabbix tmp]# openssl enc -e -des3 -a -salt -in /etc/fstab -out /u01/tmp/fstab.her
enter des-ede3-cbc encryption password:                  #输入密码
Verifying - enter des-ede3-cbc encryption password:      #再次输入
[root@zabbix tmp]# ll
-rw-r--r-- 1 root root 1118 Dec 30 11:32 fstab.her
[root@zabbix tmp]# cat fstab.her 
U2FsdGVkX18OoBR7PjBbWlafsIKQ1Qe4+pivi/eblW7Ql9r4F4uHlT13Pe+Hse1V
Qw2KmgXj6DZorcBu4D4RyHaq13l1wamMZCoIJABEcqm+uFZgqcVDS3vm6L2rpLR3
FH8yX4fdTQA52ZwmmOU8zHxzfGpPvhSuqM9yL1wVbGgOq59Hp7i+Vfb6VbITPU3A
R7LF46VUOs90RHpl2g5rIJnh0CXkFw40Um5wbc+oF26JTxDhMSJEeDJpdOwhH/8F
IBiD2o8VCyxMfQt23JhEw1wuveEGELtQsfXZXtmXVmAMbigrOwdFd5llLdMwZX0W
hmlYDISkzh565UHv8JzAZbw17tStakOp0UEUwYX+SuaPbDyeI8c0B/aF6NuNtcd4
6C3fLqJ41M9FyqbSiBXqBeBt284FXz2IKMx1wI1CI5StABv0bRH0QjfJI5Hyf196
F0NGZAjyrm7L9yKJ354ltLHrZKPkb3Xbn0OvoqPApeMsGnu+utW1oUM/7RbpkEGm
w6fIvSUf09OxnIJQ62SQMKNwnHBojA4MPk2gCrb2YYg6WIXO1XmYF90H52uR1gBQ
/OU4Epk1R6hhWPGnOrOMWXOQIB17PDM9jRQ9BjtCWNfUTNoaj9D4+6XovlPp/e1Y
ECiuJLYmQvEi+X8ejHJjlqT5NH+KqL+kmc1zphHQxqV7UEBVU8014hp0F6KIo5O6
LLgMhQJxlNXi0zNRhIMe7Swag2Bhj1uBswDTYV+HYIy+bXMQ4ctvAh3NyHqRrd4n
emgF5gcLOFBdetn3BCZR0lPu1vmVCWWtZSwowBBq9FF4bgVP2Nb8fXdCpcLL4wJF
a3C7PpMzgSkC3XYAb2ZDjta0bQDvtiHOB7WWkiLdZvpJI5qOsDQj0pc6A+JGchWQ
Zk1/BKHhMWHuID2ozoU8mvjRdCFUb5lTMmx23qdqvWUdTh/Cny/ksZmngYdzLlWF
1LV8SSXN5yiSblezD/wJ67OJ/yhcdSGluOP6P9xFMqAxtGph/sZTJAATrPrCdGOP
+3r24oiMxzxa0MKSmpd5KPhoXDvnM1djkmpwCeLSScXIOTYHUEbyyNY5hnRtLQnK
WdreRAluGmc=
##对fstab.her进行解密
[root@zabbix tmp]# openssl enc -d -des3 -a -salt -in fstab.her -out fstab
enter des-ede3-cbc decryption password:    #输入加密时的密码
[root@zabbix tmp]# ls    
fstab  fstab.her     ###已经解密出来
       
       
##单项加密:openssl dgst 用于实现在网络通信中保证所传输的数据的完整性
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c]
       [-d] [-hex] [-binary] [-out filename] [-sign filename] [-keyform
       arg] [-passin arg] [-verify filename] [-prverify filename]
       [-signature filename] [-hmac key] [file...]
       
       
-md5:用md5的方式进行加密

-sha1:用sha1方式加密

-out:加密后密码保存到哪里

例如:md5sum fstab  或者 openssl dgst -md5 fstab 提取的特征码相同
[root@zabbix tmp]# md5sum fstab
e784c8bb3dde9df0e8248941def7ac7f  fstab

[root@zabbix tmp]# openssl dgst -md5 fstab
MD5(fstab)= e784c8bb3dde9df0e8248941def7ac7f


生成用户密码:openssl passwd -1 [-salt string] password

-1:md5加密

-salt:加点盐

生成随机数:openssl rand -base64 4 或 openssl rand -hex4  生成8位随机数

[root@zabbix tmp]# openssl passwd -1 -salt 12345678
Password: 
$1$12345678$0ME5N6oDyoEAwUp7b5UDM/
[root@zabbix tmp]# openssl passwd -1 -salt 12345678 123
$1$12345678$tRy4cXc3kmcfRZVj4iFXr/       #指定salt是12345678对123加密
[root@zabbix tmp]# openssl passwd -1 -salt 12345678 1234
$1$12345678$g4kuC1.5wVcZ0Y5XnhARm1       #指定salt是12345678对1234加密
[root@zabbix tmp]# openssl passwd -1 -salt `openssl rand -hex 4`
Password: 
$1$c3e4a371$h2oSsBHRWUrNEimT06ZIA0
[root@zabbix tmp]# openssl rand -hex 4   #生成8位随机salt
9ce23611

#自签证书

[root@zabbix tmp]# cp cakey.pem /etc/pki/CA/private/
[root@zabbix private]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
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]:hzcf               #公司
Organizational Unit Name (eg, section) []:linux                          #部门    
Common Name (eg, your name or your server's hostname) []:ca.hzcf.com     #主机(必须与证书所有者能解析到的名字保持一致,否则将无法通过验证)
Email Address []:                                                        #邮箱(可以不填)
###以上操作默认选项可通过修改配置文件(/etc/pki/tls/openssl.cnf)修改

[root@zabbix private]# cd ..
[root@zabbix CA]# ll
-rw-r--r--  1 root root 1318 Dec 30 15:57 cacert.pem
drwxr-xr-x. 2 root root 4096 Nov 22  2013 certs
drwxr-xr-x. 2 root root 4096 Nov 22  2013 crl
drwxr-xr-x. 2 root root 4096 Nov 22  2013 newcerts
drwx------. 2 root root 4096 Dec 28 14:39 private

命令详解:
req: 生成证书签署请求
     -news: 新请求
     -key /path/to/keyfile: 指定私钥文件
     -out /path/to/somefile: 指定生成证书位置
     -x509: 生成自签署证书
     -days n: 有效天数

初始化工作环境

[root@zabbix CA]# touch index.txt serial
[root@zabbix CA]# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial
[root@zabbix CA]# echo 01 >serial 
[root@zabbix CA]# cat serial 
01

#命令详解:
index.txt:证书缩影数据库
serial:签署证书编号文件
echo 01 > serial #设定编号初始值

客户端申请证书

#生成密钥
#我们给web服务生成请求用于https,在其配置文件目录创建用于保存私钥和证书的目录
[root@www ~]# mkdir /etc/httpd/ssl 
[root@www ~]# cd /etc/httpd/ssl
[root@www ssl]# ls
[root@www ssl]# (umask 077;openssl genrsa -out httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
..........................................................................+++
....+++
e is 65537 (0x10001)
[root@www ssl]# ll
-rw------- 1 root root 1679 Dec 30 16:36 httpd.key

#生成证书签署请求
[root@lab01 ssl]# openssl req -new -key httpd.key -out httpd.csr
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]:hzcf
Organizational Unit Name (eg, section) []:linux
Common Name (eg, your name or your server's hostname) []:www.hzcf.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:                                 #证书请求需要加密存放,如果添加密码,需要将密码一同给CA
An optional company name []:

###将签署请求文件发送给CA服务器
##CA服务器工作目录下,手动创建了一个存放证书请求的目录(存放目录请随意)
[root@lab01 ssl]# scp httpd.csr 192.168.9.9:/u01/tmp
The authenticity of host '192.168.9.9 (192.168.9.9)' can't be established.
RSA key fingerprint is 36:17:6b:58:68:f2:cc:9e:af:0d:e8:84:a5:83:4c:9c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.9.9' (RSA) to the list of known hosts.
root@192.168.9.9's password: 
httpd.csr                                     100% 1005     1.0KB/s   00:00    


CA签署证书
[root@zabbix ~]# cd tmp
[root@zabbix tmp]# ls
httpd.csr
[root@zabbix tmp]# openssl ca -in httpd.csr -out httpd.crt -days 3650
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Dec 30 08:49:17 2015 GMT
            Not After : Dec 27 08:49:17 2025 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = Beijing
            organizationName          = hzcf
            organizationalUnitName    = linux
            commonName                = www.hzcf.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                D4:83:D5:B4:54:00:C2:FD:BC:70:52:FD:CF:74:0A:69:56:7E:54:02
            X509v3 Authority Key Identifier: 
                keyid:1B:DB:DC:36:5A:82:A5:AF:1A:A9:9C:7B:71:51:54:44:10:31:C3:4B

Certificate is to be certified until Dec 27 08:49:17 2025 GMT (3650 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@zabbix tmp]# scp httpd.crt 192.168.9.208:/etc/httpd/ssl
The authenticity of host '192.168.9.208 (192.168.9.208)' can't be established.
RSA key fingerprint is 57:ea:c0:ae:84:98:d8:63:01:b0:65:85:ef:4b:46:88.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.9.208' (RSA) to the list of known hosts.
root@192.168.9.208's password: 
httpd.crt                                     100% 4446     4.3KB/s   00:0

#这样客户端就可以配置使用CA签署的证书,进行加密通信了。
但是如果客户端的私钥不慎丢失,或者证书过期了该怎么办呢?接下来我们看一下证书怎么吊销吧。

吊销证书

客户端获取证书serial

[root@lab01 ssl]# openssl x509 -in httpd.crt -noout -serial -subject
serial=01
subject= /C=CN/ST=Beijing/O=hzcf/OU=linux/CN=www.hzcf.com


#CA验证信息
根据节点提交的serial和subject信息来验证与index.txt文件中的信息是否一致
[root@zabbix CA]# cat index.txt
V	251227084917Z		01	unknown	/C=CN/ST=Beijing/O=hzcf/OU=linux/CN=www.hzcf.com


#CA吊销证书
[root@zabbix CA]# ls newcerts/
01.pem
[root@zabbix CA]# openssl ca -revoke newcerts/01.pem 
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated
[root@zabbix CA]# cat index.txt
R	251227084917Z	151230090339Z	01	unknown	/C=CN/ST=Beijing/O=hzcf/OU=linux/CN=www.hzcf.com


CA生成吊销证书编号(第一次吊销)
[root@zabbix CA]# echo 01 > crlnumber

CA更新证书吊销列表
[root@zabbix CA]# cd crl
[root@zabbix crl]# openssl ca -gencrl -out ca.crl
Using configuration from /etc/pki/tls/openssl.cnf
#如果有需要,可查看crl文件的内容
#openssl crl -in /path/to/crlfile.crl -noout -text

好了,证书成功吊销,可以重新申请了。

原创文章,作者:oranix,如若转载,请注明出处:http://www.178linux.com/10705

(0)
oranixoranix
上一篇 2016-01-05
下一篇 2016-01-05

相关推荐

  • 搭建简单的svn服务器

        svn在版本控制方面还是挺有用的。坑运维的人中就有研发,出补丁或版本的时候很坚定的说“升吧,没问题”,结果升上去后就会狂报错。所以运维的要在打补丁,尤其是改动很大的时候一定要把后路想好。否则会长时间的影响业务。svn就有一个很好的机制–回退(当然你也可以事先备份下),可以回退到之前的某个时间节点,操作很方便的。当然sv…

    Linux干货 2015-11-18
  • 走进Linux(二)

    Linux基础知识 1、文件管理类命令 mkdir:创建空目录 格式 mkdir [选项](可跟多个选项) 要创建的目录名 选项 -p:递归创建多个目录                             &nbsp…

    Linux干货 2016-09-26
  • mysql进阶篇(三种备份方法总结:lvm, mysqldump, xtrabackup)

    二进制日志详解:     二进制日志通常作为备份的重要资源,所以再说备份之前先总结一下二进制日志的相关内容      1. 二进制日志的内容         引起mysql服务器改变的任何操…

    Linux干货 2015-12-10
  • 安装RPM包 rpm与yum工具的使用

    1.认识yum与rpm工具.                 在windows下安装一个软件很轻松,只要双击.exe的文件,安装提示连续 “下一步” 即可,然而linux系统下安装一个软件似乎并不那么轻松了,因为我们不是在图形界面下。所以你要学会如何在linux下安装一…

    Linux干货 2016-08-26
  • mkdir练习

    课外资料 mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。 注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它…

    Linux干货 2016-08-08

评论列表(1条)