linux中主要通过openssl,gpg等工具来实现加密解密机制,这里我只介绍下openssl的使用方法:

    openssl主要由三部分组成:

        libencrypto库

        libssl库

        openssl多用途命令行工具

    前两种是开发调用openssl功能时专用的一些接口,这里就不做过多表述了,现在只介绍一下openssl的一些简单用法:

    openssl从多子命令分为三类:标准命令,消息摘要命令(dgst子命令),加密命令(enc子命令)

    常用用法:

        对称加密:

            加密:openssl  enc -e -des3 -a -salt -in fstab -out fstab.des3

            解密:openssl enc -d -des3 -a -salt -out fstab1 -in fstab.des3

        单向加密:

            dgst命令:openessl dgst -md5 fstab

spacer.gif

        生成用户密钥:

            passwd命令:openssl passwd -1 -salt 123456

        生成随机数:

            rand命令:openssl rand -hex 10

                      openssl rand -base64 10spacer.gifwKiom1aOM-yzCG8iAACoJcv9bRk410.jpg

        生成密钥:

            生成私钥:(umask 077;  openssl  genrsa  -out  /PATH/TO/PRIVATE_KEY_FILE  NUM_BITS)

            提出公钥:openssl rsa -in ./my.pem -pubout

            ()中的命令表示打开一个子shell执行命令,这样修改的umask值不影响当前shell

下边介绍一下如何用openssl构建私有CA;

    创建私有CA要用到的配置文件为:/etc/pki/tls/openssl.cnf

    在确定配置为CA的服务器上生成一个自签的证书,并未CA提供所需要的目录及文件即可;

    具体步骤:

        (1)生成私钥

                (umask 077;openssl genrsa -out /etc/pki/CA/cakey.pem 4096)

        (2)生成自签名证书:

                openssl req -new -x509 -key /etc/pki/CA/cakey.pem -out /etc/pki/CA/cacert.pem -days 365

            填入相关信息,则自签证书完成;

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

                -x509:生成自签格式证书,专用于创建私有CA时;

                -key:生成请求时用到的私有文件路径;

                -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;

                -days:证书的有效时长,单位是day;

        (3)为CA提供所需的目录及文件(不存在就需要手动创建)

                mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}

                touch  /etc/pki/CA/{serial,index.txt}

                echo  01 > /etc/pki/CA/serial

    至此,私建的CA已完成,如果要用到证书进行安全通信的服务就可以向其请求签署证书了;

    这里以httpd服务为例,简单描述一下申请证书的过程:

    具体步骤:

        (1)用到证书的主机生成私钥:

                mkdir /etc/httpd/ssl

                cd /etc/httpd/ssl

                (umask 077;openssl getrsa -out /etc/httpd/ssl/httpd.key 4096)                

        (2)生成证书签署请求文件:

                openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr -days 365

        (3)将生成的httpd.csr文件以安全的方式发送给CA主机,这里只是测试,我直接用scp复制了

                scp /etc/httpd/ssl/httpd.csr root@192.168.0.104:/tmp/

        (4)在CA主机上签署证书

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

        (5)将签署后的证书以安全可靠的方式交付给请求主机

                scp /etc/pki/CA/certs/htttpd.crt root@192.168.0.100:/etc/httpd/ssl/

        至此,申请证书的流程完毕。

   由于一些特殊的原因,我们也许会申请吊销证书,下边说说如何吊销证书:

    具体步骤:

        (1)客户端获取要吊销的证书的serial(在使用证书的主机执行)

            openssl x509 -in /etc/httpd/ssl/httpd.crt -noout -serial -subject

        (2)CA机根据客户提交的serial和subject信息,对比与本机数据库index.txt中存储的是否一致,一致的话就予以吊销;            

                openssl ca -revoke /etc/pki/CA/newcerts/01.pem

        (3)生成吊销证书的吊销编号(第一次吊销证书时执行)

                echo 01 > /etc/pki/CA/crlnumber

        (4)更新证书吊销列表

                openssl ca -gencrl -out /etc/pki/CA/crl/httpd.crl

        (5)查看crl文件;

                openssl crl -in /etc/pki/CA/crl/httpd.crl -noout -text

    至此,证书已被吊销。