note_18.2_openssl

2019-03-28  本文已影响0人  人間失格_430b

OpenSSL

libcrypto
libssl
openssl

SSL会话主要三步:

客户端向服务器端索要并验正证书;
双方协商生成“会话密钥”;
双方采用“会话密钥”进行加密通信;

SSL Handshake Protocol:


OpenSSL(2)

组件:
libcrypto, libssl主要由开发者使用;
openssl:多用途命令行工具;

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

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

对称加密:
工具:openssl enc, gpg
支持的算法:3des, aes, blowfish, towfish

enc命令:

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

单向加密:
工具:openssl dgst, md5sum, sha1sum, sha224sum, ...

dgst命令:

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

生成用户密码:
工具: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中断时间间隔;

CA:

公共信任的CA,私有CA;

建立私有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请求签署证书:

步骤:(以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
上一篇下一篇

猜你喜欢

热点阅读