自建私有CA

       私有CA

为啥要自建私有CA,其使用范围是?
   因为CA的使用费用很高,另一方面内部通信加密的需要。


我们可以使用openssl工具生成密钥,创建数字证书,创建私有CA,手动加密解密数据。



如何使用openssl进行创建私有CA? OpenCA也可以构建CA


openssl命令:配置文件:/etc/pki/tls/openssl.cnf


构建私有CA方法:

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

具体步骤:

    (1) 生成私钥;

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

    (2) 生成自签证书;

        ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out                       /etc/pki/CA/cacert.pem -days 3655

参数介绍

        -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那里签证书呢?

要用到证书进行安全通信的服务器,需要向CA请求签署证书:

步骤:(以httpd为例)

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

        ~]# mkdir  /etc/httpd/ssl 

        ~]# cd  /etc/httpd/ssl

        ~]# (umask  077; openssl  genrsa -out  /etc/httpd/ssl/httpd.key  2048)

    (2) 生成证书签署请求

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

    (3) 将请求通过可靠方式发送给CA主机;

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

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

查看证书中的信息:

    ~]# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject





如果用户的私钥丢失了,如何吊销证书?

吊销证书:

步骤:

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

~]# openssl  x509  -in /etc/pki/CA/certs/httpd.crt  -noout  -serial  -subject

(2) CA主机吊销证书

先根据客户提交的serial和subject信息,对比其与本机数据库index.txt中存储的是否一致;

吊销:

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

其中的SERIAL要换成证书真正的序列号;

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

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

(4) 更新证书吊销列表

# openssl  ca  -gencrl  -out  thisca.crl 

查看crl文件:

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






openssl对数据加密


从多子命令,分为三类:

 标准命令

     消息摘要命令(dgst子命令)

单向加密:

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

dgst命令:

      ~]# openssl  dgst  -md5  /PATH/TO/SOMEFILE



加密命令(enc子命令)

      标准命令: enc, ca, req, genrsa, ...

enc命令:

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

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



对称加密:

     工具:openssl  enc,  gpg

      支持的算法:3des, aes, blowfish, towfish



生成用户密码:工具:passwd, openssl  passwd

     openssl  passwd  -1  -salt  SALT


生成随机数:工具:openssl  rand

         ~]# openssl  rand  -hex  NUM

        ~]# openssl  rand  -base  NUM



生成密钥:

    生成私钥:

     ~]# (umask 077;  openssl  genrsa  -out  /PATH/TO/PRIVATE_KEY_FILE  NUM_BITS)


    提出公钥: 

    ~]#  openssl  rsa  -in  /PATH/FROM/PRIVATE_KEY_FILE  -pubout


Linux系统上的随机数生成器:

/dev/random:仅从熵池返回随机数;随机数用尽,阻塞;

/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞;


伪随机数不安全;

       熵池中随机数的来源:

       硬盘IO中断时间间隔;

     键盘IO中断时间间隔;





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章