SSL,PKI,CA

             若互联网上面信息的传输信息不采取任何加密技术,那么所有的数据都是透明的,毫无隐私可言,于是加解密技术就应运而生了。古代的加密方式更容易被人记忆,比如早期古希腊采取的羊皮卷加密,战争时期密报采取的不同的数字替换技术,这些加密的方法一旦被猜到和识破,真是弹指可破,随着计算机的计算能力的不断提高,加密技术也伴随者越来越复杂的算法运算,有些甚至在理论上被认为是不可破解的,当然这是根据如今的计算能力来评估的。


加密技术分类

         加密技术主要分为:对称加密、非对称加密(公钥加密)、单向加密(不可逆加密)。               

         对称加密:加密和解密都使用同一个密钥          

                加密命令: openssl  enc  -e  -des3   -a    -salt    -in  file       -out      file.ciper    

                  说明:enc是openssl的子命令,是一个标准命令,-a  是指使用base64编码

                解密命令: openssl  enc   -d  -des3   -a    -salt    -in  file.ciper       -out      file.plain

                     说明:解密-in最好写在在-out的前面才行,因为我在cento6上面测试失败了。。。

         非对称加密:由公钥和私钥组成一对密钥对,由私钥加密的内容只能由配对的公钥解密,由公钥加密的内容只能由配对的私钥解密

                 生成私钥命令:(umask  077; openssl  genrsa  -out privatefile  4096)

                      说明:genrsa的gen即是generate生成之意,用()括起来表示只对子shell起作用,不会影响当前shell的umask

                 提取publickey: openssl  rsa    -in privatefile   -pubout 

                       说明:这里的子命令ras不再是生成,只是提取

                      

         单向加密:密钥一旦被加密,就不可破解,比如使用md5、sha等算法提取的特征码,这就是不可逆的

              

                 加密命令:  openssl  dgst    -md5   file.ciper   或   md5sum    file.ciper

                     说明:以上俩命名都行,只有加密,因为是不可逆的,采用的是md5消息摘要算法来提取特征码的,也可以用SHA系列来提取特征码


          扩展话题:对密码进行加密

                 使用命令: 

                              openssl  passwd  -1   -salt   987654

                              openssl  passwd  -2   -salt  `openssl   rand   -base64  4`

                              openssl  passwd  -4   -salt   $(openssl  rand  -hex  8)

                   说明: -1,-2,-4是使用md5还是sha之类的,之前在用户权限管理那篇博客里面有总结,-salt即是加盐,-salt后面即是盐(随机数),可以直接指定,也可以由命令生成随机数,-hex是基于16进制编码格式,反引号 ``和$()均是命令引用的用法,达到的目的都是一样的

                                    



PKI

  • 公钥设施

         涉及:CA,RA,CRL以及证书存取库,其中CA是证书颁发机构,RA是证书注册机构,CRL是证书注销列表


CA

           CA先得给自己颁发一个证书,这叫自签,然后才给别人颁发CA,就是给申请的人颁发或注销证书的,这主要应用于保证公钥的的可靠性,有效的制止了伪公钥的行为。

CA的自签和颁发:

  • 自签:提供相应的证书目录及文件——生成私钥——生成自签证书


   若公司的服务器要到专门的CA申请CA应该走这个流程;

        本地服务器生成私钥——给CA机构发出证书申请——CA机构签署证书,证书里面包含了公钥及证书过期等信息,由专属人员到公司交付证书

   若出现情况需要吊销证书:

       公司给CA机构发出自己的序列号——CA机构核对序列号,若能匹配,则予以注销。并更新注销列表


  • 自签证书:

   说明:证书的默认配置文档说明在/etc/pki/tls/openssl.cnf,查看里面关于[CA_default] 的内容可以大体了解CA相关信息的存放位置。

1.创建CA下相关目录和文档

   ~]# mkdir /etc/pki/CA/{certs,crl,newcerts}
       ~]# touch /etc/pki/CA/{serial,index.txt}

说明:certs目录是存放已签证书的,crl目录是存放吊销证书的,newcerts是存放以序列号命令的证书的,与certs目录里面的证书签署顺序应该是对应的

            而serial文档是存放序列号的,index.txt是存放证书数据库的地方,里面包含了证书的详细信息

2.生成私钥:

~]# (umask 077;openssl genrsa  -out /etc/pki/CA/private/cakey.pem  2048)

        说明,因为我们的证书除了我们自己不应该让其他任何人知道,因为用umask屏蔽掉除自己之外其他任何人的权限,而证书的签署加密方式用的是公钥加密里面的rsa非对称加密,创建的证书名称必须为cakey.pem,必须和配置文档里面的名称一样,而CA长度应该为2的整数次方,此处为2048,也可以为4096等。

3.生成自签证书

    ~# openssl   req   -new    -x509   -key   /etc/pki/CA/private/cakey.pem   -out   /etc/pki/CA/certs/cacert.pem   -days   1095   ,如图: 

                           


说明:req代表申请的意思,-new即新的证书,-x509则表示自签,生成的证书应放在/etc/pki/CA/certs目录下,-days表示CA的有效期,这里自定义为3年;由此,自签证书申请完成。


  • 服务器申请证书:

说明:这里以httpd服务为例

1.进入httpd服务器的配置文件目录/etc/httpd/conf/,创建ssl目录

~]# mkdir      /etc/httpd/conf/ssl

2.生成服务器私钥:

[root@localhost ssl]# (umask 077;openssl genrsa -out httpd.key  4096)

3.生成证书请求书:

[root@localhost ssl]# openssl  req  -new   -key  httpd.key  -out   httpd.csr   ,如图:

                  

4.将证书发给CA,这里的CA颁发机构为自己公司,假设中间人工的证书来往流程走一遍。。。这里我们是自己公司,就不用找CA颁发机构了。

    ~]# openssl ca  in /tmp/httpd.csr   -out    /etc/pki/CA/certs/httpd.crt    -days   365


不过过程中出错了:

    ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Error opening CA certificate /etc/pki/CA/cacert.pem
140575814006688:error:02001002:system library:fopen:No such file or directory:bss_file.c:398:fopen('/etc/pki/CA/cacert.pem','r')
140575814006688:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:400:

根据错误解决办法:

1)CA]# cp certs/cacert.pem   .     将cacert.pem拷贝到/etc/pki/CA/下

        2)CA]# echo 01 > serial         为证书生成序列号

错误解决了,(*^__^*) ,命令可以成功运行了,过程会问及是否签署证书[y/n]:  根据情况回答就成了。如此我们的的证书申请就通过了,生成证书httpd.crt放置到/etc/httpd/conf/ssl目录下,查看此目录下的文件截图为:

        


    说明:httpd.csr已经没用了,此后若要在网页上认证,可通过浏览器导入证书

在客户端查看证书的信息:

[root@localhost /]# openssl x509 -in /etc/httpd/conf/ssl/httpd.crt -noout -serial -subject
serial=01
subject= /C=CN/ST=SiChuan/O=Think/OU=EB/CN=www.angrybeans.com/emailAddress=admin@think.com


说明:这里x509没有减号



  • 证书的吊销:

  1.先在服务器端查看看证书的信息和客户端发过来的是否匹配,

           ~]# cat    /etc/pki/CA/index.txt
V 170113085137Z01unknown/C=CN/ST=SiChuan/O=Think/OU=EB/CN=www.angrybeans.com/emailAddress=admin@think.com

说明:V表示此证书已经签署了,匹配没问题吧,接下来开始吊销证书

2.吊销证书

        ~]# openssl ca -revoke /etc/pki/CA/newcerts/01.pem 
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated

      ~]# cat /etc/pki/CA/index.txt
R 170113085137Z160114092630Z01unknown/C=CN/ST=SiChuan/O=Think/OU=EB/CN=www.angrybeans.com/emailAddress=admin@think.com

3.生成吊销序列号以及更新吊销证书列表

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

~]# openssl ca -gencrl -out  /etc/pki/CA/crl/httpd.crl
Using configuration from /etc/pki/tls/openssl.cnf

4.查看吊销证书的内容:

        ~]# openssl   crl   -in   /etc/pki/CA/crl/httpd.crl   -noout    -text
Certificate Revocation List (CRL):
        Version 2 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: /C=CN/ST=SiChuan/L=ChengDu/O=Think/OU=IT/CN=www.angrybeans.com/emailAddress=bean@think.com
        Last Update: Jan 14 09:32:35 2016 GMT
        Next Update: Feb 13 09:32:35 2016 GMT
        CRL extensions:
            X509v3 CRL Number: 
                2
Revoked Certificates:
    Serial Number: 01
        Revocation Date: Jan 14 09:26:30 2016 GMT
    Signature Algorithm: sha256WithRSAEncryption
         ad:77:c0:ae:28:6a:7b:b0:a4:b5:f8:ac:dc:68:ec:66:ac:1b:
         1a:c7:d2:a9:b9:e0:da:f1:f7:64:3a:cb:ea:43:6c:d3:ea:10:
         3b:bd:24:b3:6b:47:d1:cd:91:5a:b6:f0:d7:28:e3:44:19:b8:
         63:12:ae:6a:42:02:2c:b8:70:96:03:f3:29:14:05:e5:1a:30:
         25:9c:56:dd:e0:34:73:aa:f0:88:d7:fe:b5:f2:1c:25:c1:a5:
         54:74:b6:99:70:5f:dc:6c:7f:4f:a1:69:77:e1:d7:ca:03:0a:
         d2:88:92:df:3a:15:78:17:55:50:7d:9e:e1:4e:78:7d:f8:08:
         ad:26:bd:d4:53:8d:76:9c:2b:da:2e:f1:ff:41:0c:d6:f9:10:
         f7:1a:28:e7:e2:1e:2c:cb:2a:cc:b6:b6:98:1c:62:23:ab:d7:
         cb:a5:8d:c8:52:a2:59:46:17:a1:6a:c4:18:ec:7b:93:06:3e:
         ec:6e:c5:cf:fd:ff:ae:86:53:9e:62:97:c0:a8:d5:22:17:0c:
         d5:ed:ef:b7:20:63:72:4e:e0:91:1d:6f:8f:bd:a2:76:5f:7f:
         f0:31:95:5f:39:e0:ef:15:f9:fc:ed:63:89:31:5e:b4:3b:52:
         a6:16:be:c3:ee:b5:8f:ba:73:3b:46:76:42:5a:e0:3e:ae:2a:
         cf:3b:e8:1e




       


Logo

更多推荐