Linux系统安全之CA证书的颁发

*********************************************

一、加密算法

二、Openssl 工具使用

三、建立本地CA

四、证书颁发

五、FTP客户端验证

*********************************************

理论讲解篇

一、加密算法

1、 对称加密(移位与置换完成的)

  • 对称加密算法简介

    在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。

  • 对称加密的特点:

 加密速度快,对称性加密通常在消息发送方需要加密大量数据时使用。

  • 常用的对称加密有:

DES: (Data Encryption Standard)   56位

  DES3: 3遍DNS加密

  AES (Advanced ): 128, 192, 256  高级加密标准  

注意:

       AES虽然位数增加了一倍,但是复杂度可不仅仅是一倍

2、 非对称加密 (数学函数实现的)

  • 非对称加密简介

   非对称加密算法需要两个密钥:公工密钥(publickey)和私有密钥(privatekey)公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法


  • 对称加密的特点:

   算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快

注意:

   公钥是从私钥提取而来;

  • 对称加密工作原理:

私钥加密的数据 --> 与之配对的公钥解密(同时完成了身份验证)

私钥加密数据,只有与之配对的私钥可以机密,此时由于公钥是公开的,所以所有人都可以解密了,那么此种加密方法还有什么意义呢?由于公钥与私钥是一一对应的,所以当我们能解密的时候,是不是验证了加密方的身份,这就是数子签名

公钥加密的数据 --> 与之配对的私钥解密(保证了数据的机密性)

发送方使用对方的公钥加密,这样只有对方有自己私钥,这样对方就可以解密了,此时保证了数据的机密性


对称加密与非对称加密配合使用

当数据量较大的时候,我们使用非对称加密,虽然能保证数据的安全性但是加密速度太慢;此时我们可以提取数据的特征码,然后使用对方的公钥加密特征码,使用对称加密加密数据,对方收到特征码与数据之后,使用自己的私钥解密特征码,并使用与发送方相同的算法解密数据,再次提取特征码,与收到的特征码做比较。如果完全相同,则说明数据是完整的,否则异然。


3、单向加密算法

  • 单向加密算法可以用与提取数据的特征码

  • 常用的单向算法有

    md5:128      sha1:160  sha256   sha512

  • 雪崩效应:

    输入数据的微小改变会引起输出结果的巨大变化;

理论知识说了这么多,是不是有点晕啊。不要紧的让我们实操一次,帮助你快速理解

操作应用篇


二、Openssl工具使用

  • 查看openssl版本信息

[root@localhost ~]# openssl version
OpenSSL 1.0.0-fips 29 Mar 2010
  • 使用Des3加密文件

[root@localhost tmp]# cp /etc/fstab ./
[root@localhost tmp]# openssl enc -des3 -in fstab  -e -out fstab.des3
enter des-ede3-cbc encryption password:                   #输入加密密码此处为redhat
Verifying - enter des-ede3-cbc encryption password:
[root@localhost tmp]# ls
fstab  fstab.des3
[root@localhost tmp]# cat fstab.des3  #查看加密之后文件显示乱码
Salted__?.?�7.x?.<pk5]x�`..朝.戤.??T.aW??w.3I?m.?.|宁<u?%?h2I2..湟>.>.?Cm酋nJ+<R困?5.?u�┦U..?吨nХq方{?耆?鲽9t.?.9(?lSD?7Z o.jO?呷?DS.ZAO3Fr>?W5?.
.?陆a?╂.).b?j.??
                          ?T?..??.,林.罂g(*奄E&}fTEp^苜?
                                                                   g
                                                                    .R??qxk.`h?0.?-rg.逢.?Fr.`XA
                                                                                                           .L*?7.j?..?魂<?腩?t民B,?K?..?R.]?1?~T%L??Y詹q?慝?K缜.4.淝CG?沪9.??-
                陪.仙.?哈'f?.??..?..gd.   dS逛钓.e..    .?筵.?.r*?.L?祗?6?F锵??dǔ#冯M?/?;Xd.羝.熏J???.L??w?
攵0z?.nyo蜚鲲`写ia.Hbe?凿.?.?9..9骄..???
               D?涛~?s.@.ё[=8{?.    %UO`?<.T.O. '.Hc    i.悃.幔せ7?r?9.x5.祥峁抖1|.????:??[root@localhost tmp]# XshellXshellXshellXshellXshellXshellXshell
-bash: XshellXshellXshellXshellXshellXshellXshell: command not found
[root@localhost tmp]#

注释:

       -des3指定加密算法

       -e 代表加密 与之对应的-d代表解密

       -in 指定加密文件

       -out 指定输入文件

  • 获取文件特征码

[root@localhost tmp]# openssl dgst -md5 fstab
MD5(fstab)= c9f4e510c6ee08857b2fee224fdbfdcd
[root@localhost tmp]#
  • 修改fastab文件,在此查看特征码

[root@localhost tmp]# echo "123" >> fstab
[root@localhost tmp]# openssl dgst -md5 fstab   #此时有巨大变化,是不是验证了雪崩效益
MD5(fstab)= 739fac6132b9d7178f898cb004457250
  • 生成随机数

[root@localhost tmp]# openssl rand -hex 4    #生成8位随机数
034a06cc
[root@localhost tmp]# openssl rand -base64 4
T1+z2g==
[root@localhost tmp]#
  • 生成私钥

[root@localhost tmp]# openssl genrsa 2048 > mykey.pri   #生成2048位的私钥并保存为mykey.pri
Generating RSA private key, 2048 bit long modulus
...........................................+++
.........................+++
e is 65537 (0x10001)
[root@localhost tmp]# ll
总用量 12
-rw-r--r--. 1 root root  783 8月  15 18:42 fstab
-rw-r--r--. 1 root root  800 8月  15 18:28 fstab.des3
-rw-r--r--. 1 root root 1679 8月  15 19:12 mykey.pri
[root@localhost tmp]#
  • 为了保证私钥的安全性,我们修改私钥的权限为700,在创建私钥的时候指定权限

[root@localhost tmp]# (umask 077; openssl genrsa -out mykey2.pri   1024)
Generating RSA private key, 1024 bit long modulus
......++++++
.......................................++++++
e is 65537 (0x10001)
[root@localhost tmp]# ll
总用量 16
-rw-r--r--. 1 root root  783 8月  15 18:42 fstab
-rw-r--r--. 1 root root  800 8月  15 18:28 fstab.des3
-rw-------. 1 root root  887 8月  15 19:19 mykey2.pri   #权限700
-rw-r--r--. 1 root root 1679 8月  15 19:12 mykey.pri
[root@localhost tmp]#
  • 通过私钥生成公钥

[root@localhost tmp]# openssl rsa -in mykey2.pri -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRvjEY+fKwIDny+g5ukY3RUd0S
0UlnS4Df3U5//T9xRYdRZizE/HlFKbGXzxtyGkuahkrVPDV9TVmaLnXsCl95smQc
w9Qv9K25KdH3ac/wIUfjwJG7qfdjZ/HR5RKXCCO+GejJ+0rQYwhgBVCzuN6Vokn/
XXcCP5I/CTgP8cFAZQIDAQAB
-----END PUBLIC KEY-----

此处说明了公钥是通过私钥生成的。。


三、自建立本地CA(证书颁发)

  • 生成CA自己的私钥

[root@localhost ~]# cd /etc/pki/tls/
[root@localhost tls]# ls
cert.pem  certs  misc  openssl.cnf  private     #openssl.cnf为主配置文件
[root@localhost tls]# cd ../CA/
[root@localhost CA]# ls
cacert.pem  certs  crl  index.txt  index.txt.attr  index.txt.old  newcerts  private  serial  serial.old
[root@localhost CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
......................................................................+++
..+++
e is 65537 (0x10001)
[root@localhost CA]#
  • 为CA生成自签证书

  • 建立序列号文件和数据库文件  

[root@localhost CA]# touch serial index.txt
[root@localhost CA]# echo 01 > serial
[root@localhost CA]#

至此CA创建完成,我们就可以为客户端颁发证书了


四、证书颁发

客户端(ftp)提交证书申请(IP:172.16.10.2)

  • 生成私钥

    [root@stu10 ~]# (umask 077; openssl genrsa -out vstpd.key  2048)
    Generating RSA private key, 2048 bit long modulus
    ....+++
    ...+++
    e is 65537 (0x10001)
    [root@stu10 ~]# ls


  • 制作一个证书签署请求:

  • 将签署请求文件copy到CA服务器上,CA签署(使用scp命令)

[root@stu10 ~]# openssl ca -in vsftpd.csr -out vstpd.crt -days 365
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: Aug 15 06:01:00 2013 GMT
            Not After : Aug 15 06:01:00 2014 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = Beijing
            organizationName          = xiaodong
            organizationalUnitName    = Tech
            commonName                = 172.16.10.1
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                CA:39:D6:37:3B:E0:EF:70:6A:01:0B:DF:A1:2A:DC:7D:54:1E:0D:D7
            X509v3 Authority Key Identifier:
                keyid:33:1F:53:F8:CB:40:03:E2:DB:38:FF:6A:40:08:68:D9:91:25:89:BA
Certificate is to be certified until Aug 15 06:01:00 2014 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@stu10 ~]#

到此证书签署完成!!!


五、FTP客户端验证

  • IP:172.16.10.2 为vsftp服务器

[root@stu10 ~]# vim /etc/vsftpd/vsftpd.conf  #vsftpd配置

ssl_enable=YES                                #是否启用SSL
ssl_tlsv1=YES                                 #是否使用TLS v1
ssl_sslv2=YES                                 #是否使用SSl v2
ssl_sslv3=YES                                 #是否使用SSL v3
allow_anon_ssl=NO                             #是否允许匿名用户使用SSL
force_local_data_ssl=YES                      #百匿名用户传输数据是否加密
force_local_logins_ssl=YES                    #非匿名用户登录时是否加密
rsa_cert_file/root/vstpd.crt                  #rsa证书文件位置
rsa_private_key_file=/root/vstpd.key          #ftp私钥文件位置
[root@localhost ~]# service vsftpd restart    #重启Ftp服务器


  • 此时使用客户端验证证书是否生效


本博文至此总结结束,由于多数内容都是个人理解,有不足之处,望广大博友多提宝贵意见。。。。。


你可能感兴趣的:(OpenSSL,ca)