Linux学习笔记之 加密解密介绍,以及运用Openssl创建私有CA

互联网高速发展的今天,确保通信数据能够在互联网上安全可靠的传输是极为重要的。为此,各种安全算法,协议纷纷诞生。Openssl只是其中之一,Openssl为网络通信提供安全及数据完整性的一种安全协议,包括了主要的密码算法、常用的密钥和证书封装管理功能(CA)以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用


美国NIST给出了数据安全可靠传输的明确标准:

    保密性:

        数据保密性

        隐私性

    完整性:

    可用性:

加密:使用加密算法对明文加工处理,转换成不可识别的代码信息,确保信息安全。

解密:运用对应的解密算法对加密过的信息,进行反向解码,还原原始数据。


常见加密算法和协议有:

    对称加密

    公钥加密(非对称加密)

    单向加密

    认证协议


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

常见的对称加密算法有:DES(Data Encryption Standard) ,3DES,AES,Blowfish,Twofish,IDEA,RC6 ...

    特性有:

    1.加密,解密使用同一个密钥

    2.将原始数据分割成块,逐个加密(导致加解密速度慢)

    缺陷:

    1.密钥过多,通信对象过多时,要维护的密钥过多,不便管理

    2.密钥分发,初次通信,安全分发密钥有困难


非对称加密:亦称公钥加密,密钥成对出现,分为公钥和私钥,均可用来加密和解密,但是公钥加密的     数据,只能用与之对应的私钥来解密;反之亦然

    公钥:pubkey,用来公开给所有人

    私钥:private key, 自己保存,且必须保证私密性


    公钥加密可以实现如下功能:

    数字签名(身份确认):用于让数据接收方确认发送方的身份信息,接收方用对方公钥可以解开对方     发送过来的数据,即可确认对方身份

        密钥交换:用接收方的公钥加密一个对称密钥给接收方,并发送给对方

        加密数据:但加密过程会很慢

        算法有:RSA,DSA,ELGamal


单向加密:只能加密,不能被解密;用户提取数据的的指纹(特征码)

    算法有:md5,sha1,sha224,sha256....

    特性:

    1.定长输出:无论原数据有多大,一旦算法确定,加密后结果长度就是确定不变的

    2.雪崩效应:原数据的细小改变,均可导致加密后的结果巨大的变化

    功能:用来校验数据完整性,接收方使用同种算法对数据进行单向加密,提取特征和发送方提供的           特征码比对,如果一致,即可验证数据完整性


PKI: Public Key Infrastructure

    签证机构:CA

    注册机构:RA

    证书吊销列表:CRL

    证书存取库

    

X.509:定义了证书的结构以及认证协议标准

    版本号

    序列号

    签名算法ID

    发行者名称

    有效期限

    主体名称

    主体公钥

    发行者惟一标识

    主体的惟一标识

    扩展

    发行者签名

    

CA:是PKI系统中通信双方都信任的实体,被称为可信第三方(Trusted Third Party,简称TTP)。CA作     为可信第三方的重要条件之一就是CA的行为具有非否认性。作为第三方而不是简单的上级,就必须     能让信任者有追究自己责任的能力。CA通过证书证实他人的公钥信息,证书上有CA的签名。 

    注:在操作系统发布的时候,知名权威的CA机构都已经被内置到操作系统中。


SSL

    SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传           输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。

    其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为       Internet上保密通讯的工业标准。


OpenSSL: 开源项目,是SSL协议的开源实现

     作为一个基于密码学的安全开发包,OpenSSL提供的功能相当强大和全面,囊括了主要的密码算        法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的        使用

    有如下组件:

    Openssl:多用途的命令行工具

    libcrypto:公共加密算法库

    libssl: 库,实现了ssl及tls

       

openssl命令:使用

    rpm -qa opnessl 查看有无安装openssl,如果没有使用yum安装即可

    使用-help 了openssl 支持使用的命令
    [root@S1 CA]# openssl -help        #查看帮助文档
    openssl:Error: '-help' is an invalid command.
    Standard commands            #标准命令
    asn1parse         ca                ciphers           cms               
    crl               crl2pkcs7         dgst              dh                
    ...此处略去N行输出
    Message Digest commands (see the `dgst' command for more details) #消息摘要支持的算法
    md2               md4               md5               rmd160            
    sha               sha1              
    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                
    ...此处略去N行输出

    对称加密:工具:openssl enc, gpg

        算法:3des, aes, blowfish, twofish

        enc命令:  

        加密:~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
        解密:~]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab

           des3是算法也可以使用其它的算法;-a 基于base64编码;-salt 添加杂质;-in 代加密的            文件; -out 加密后的输出  

        ]# cat test  # test 文档内容为"加密测试"
        加密测试
        ]# openssl enc -e -des3 -a -salt -in test -out test.ciphertext
        enter des-ede3-cbc encryption password:#此处可以输入你的密码
        Verifying - enter des-ede3-cbc encryption password:#确认你输入的密码
        
        ]# cat test.ciphertext #此时查看内容已经是加密过的
        U2FsdGVkX18W5bwFxvEnj6mouus7JSRy
        
        ]# openssl enc -d -des3 -a -salt -in test.ciphertext -out test 
        enter des-ede3-cbc decryption password:#如果上一步有输入密码,此处需输入密码          
        ]# cat test #验证解密成功
        加密测试

    单向加密

        工具:md5sum, sha1sum, sha224sum, sha256sum,..., openssl dgst

        dgst命令:openssl dgst -md5 /PATH/TO/SOMEFILE

        [root@S1 test]# md5sum test  #直接使用md5对 test 文档加密
        d41d8cd98f00b204e9800998ecf8427e  test
        
        [root@S1 test]# openssl dgst -md5 test    #使用openssl 调用md5算法对test加密
        MD5(test)= d41d8cd98f00b204e9800998ecf8427e
        注:同一个算法,单向加密后结果一样

    生成密钥对:openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS

    [root@S1 test]# (umask 077; openssl genrsa -out key.pri 2048) #()中命令在shell中          执行,执行完,退出子shell
    Generating RSA private key, 2048 bit long modulus
    ...........+++
    .......+++
    e is 65537 (0x10001)
    [root@S1 test]# ll key.pri    #查看密钥key.pri已经生成,权限是600
    -rw------- 1 root root 1675 Sep 20 17:24 key.pri

    提取公钥

    [root@S1 test]# openssl rsa -in ./key.pri -pubout  #从上一步生成的密钥对提取出公钥
    writing RSA key
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzlrktU8dLvkmfKyDOvGq
    sLd1m9XVVQ91JWueTTJ3Y4hs5DmnYWKCvcV2ZEl14Km/1ojCC7urWdFt9k7El1ED
    aHHA2LOrh+iSfH3hRUT/3TouylG7qUxa2IWbgKErnId/RIfIy8kIFw9Mg5jkS3xT
    SIjbS6+iyEr285x+mzBz8XVTngw6SgtQrOXKJEWkhDQMqUhGGbRSmOvPP/ZA2p6A
    0TdOOGudBHX04d7G+2NSKEDMr1EAT6QiEWjPRSD7jZy6jSEg3kZ2Gsf6cJVSq3oD
    VtPd2hPEo2n/Sw3OT0M0n04W3VE2GQaa2bFhxOxZwczCZeJpdt9vZ44w7ERYuzfm
    KwIDAQAB
    -----END PUBLIC KEY-----

搭建私有CA

证书申请及签署步骤:

    1、生成申请请求;

    2、RA核验;

    3、CA签署;

    4、获取证书;


:按需修改openssl的配置文件(etc/pki/tls/openssl.cnf)

 This definition stops the following lines choking if HOME isn't
# defined.
HOME                    = .
RANDFILE                = $ENV::HOME/.rnd
...此处略去N行
####################################################################
[ ca ]
default_ca      = CA_default            # The default ca section
####################################################################
[ CA_default ]
dir             = /etc/pki/CA           # Where everything is kept   #CA所有相关数据的存储路径
certs           = $dir/certs            # Where the issued certs are kept   #证书保存的目录
crl_dir         = $dir/crl              # Where the issued crl are kept    #吊销证书列表保存的目录
database        = $dir/index.txt        # database index file.    #数据库索引
#unique_subject = no                    # Set to 'no' to allow creation of    
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.   #刚刚签完的证书保存路径
certificate     = $dir/cacert.pem       # The CA certificate    #CA自己的证书的保存路径
serial          = $dir/serial           # The current serial number    #证书序列号
crl             = $dir/crl.pem          # The current CRL    #存放被吊销的证书
private_key     = $dir/private/cakey.pem# The private key    #私钥存储路径
...此处略去N行

:创建所需的文件

    #cd /etc/pki/CA

    # touch index.txt

    # echo 01 > serial   #指定序列号

    

:CA自签证书:

    1.创建密钥对 (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)  ##生       成密钥对,长度2048

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

    Generating RSA private key, 2048 bit long modulus

    ...............................+++

    e is 65537 (0x10001)

 

    2.自签证书: openssl req -new -x509 -key etc/pki/CA/private/cakey.pem -days 7300 -out       /etc/pki/CA/cacert.pem

        -new: 生成新证书签署请求

        -x509: 专用于CA生成自签证书

        -key: 生成请求时用到的私钥文件

        -days n:证书的有效期限

        -out /PATH/TO/SOMECERTFILE: 证书的保存路径

[root@S1 CA]# openssl req -new -x509 -key private/cakey.pem -days 365 -out cacert.pem
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]:hsp.com
Organizational Unit Name (eg, section) []:^C
[root@S1 CA]# openssl req -new -x509 -key private/cakey.pem -days 365 -out cacert.pem
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]:hsp.com
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www.hsp.com
Email Address []:[email protected]


    3.发证

        (a) 需要用到证书的主机生成证书请求;先创建相关保存私钥或证书的目录:mkdir                 /etc/httpd/ssl (可以自定路径)

   [root@s7 ssl]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
    Generating RSA private key, 2048 bit long modulus
......................................................................................+++
.+++
e is 65537 (0x10001)
[root@s7 ssl]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
Generating RSA private key, 2048 bit long modulus
.+++
.....................................................................................+++
e is 65537 (0x10001)
    [root@s7 ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/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]:hsp.com
    Organizational Unit Name (eg, section) []:ops
    Common Name (eg, your name or your server's hostname) []:www.hsp.com  
    Email Address []:[email protected]
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    [root@s7 ssl]#

    (b) 把请求文件传输给CA; 

    [root@s7 ssl]# scp /etc/httpd/ssl/httpd.csr 172.17.0.10:/tmp #将证书申请请求传输给           CA,172.17.0.10 为我的CA服务器
    httpd.csr   
    [root@S1 tmp]# ll httpd.csr  #S1上已经收到了客户端s7发送过来的证书请求文件
    -rw-r--r-- 1 root root 1045 Sep 20 19:26 httpd.csr

    (c) CA签署证书,并将证书发还给请求者;

 [root@S1 tmp]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.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: Sep 20 11:28:11 2015 GMT
                Not After : Sep 19 11:28:11 2016 GMT
            Subject:
                countryName               = CN
                stateOrProvinceName       = Beijing
                organizationName          = hsp.com
                organizationalUnitName    = ops
                commonName                = www.hsp.com
                emailAddress              = [email protected]
            X509v3 extensions:
                X509v3 Basic Constraints: 
                    CA:FALSE
                Netscape Comment: 
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier: 
                    8F:E2:F6:10:D6:F4:9C:A3:28:35:1B:B9:01:07:40:F4:96:32:60:BA
                X509v3 Authority Key Identifier: 
                    keyid:C0:24:E3:CA:D7:6A:6C:AC:D1:08:83:D2:5B:55:9B:0A:F8:8A:78:88
    Certificate is to be certified until Sep 19 11:28:11 2016 GMT (365 days)
    Sign the certificate? [y/n]:yes
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

    将证书发送给申请证书的主机

     [root@S1 tmp]# /usr/bin/scp /etc/pki/CA/certs/httpd.crt 172.17.0.20:/etc/httpd/ssl          httpd.crt

    查看证书中的信息:

   [root@s7 ssl]# openssl x509 -in httpd.crt -noout -subject  #查看证书中的信息
    subject= /C=CN/ST=Beijing/O=hsp/OU=ops/CN=www.hsp.com/[email protected]
    [root@S1 CA]# ls certs/
    httpd.crt
    [root@S1 CA]# cat serial  #初始设置的系列号为01,现在颁发了一个证书给serverS7 ,现在    序列号增加到了2
    02


    4.吊销证书

    (a) 客户端获取要吊销的证书的serial

    # openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

    [root@s7 ssl]# openssl x509 -in httpd.crt -noout -subject

    subject= /C=CN/ST=Beijing/O=hsp/OU=ops/CN=www.hsp.com/[email protected]

    

    (b) CA

    先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致;

    吊销证书:

    # openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

    

    (c) 生成吊销证书的编号(第一次吊销一个证书,后续会自动增长序列号,所以只用定义一次)

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

    

    (d) 更新证书吊销列表

    # openssl ca -gencrl -out thisca.crl

    

    查看crl文件的命令:

    # openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text


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