openssl命令

Posted feng-land

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openssl命令相关的知识,希望对你有一定的参考价值。

加密算法和协议:
对称加密:数据加密(保密性),(3DES,AES)
公钥加密:身份认证,密钥交换,数据加密,()RSA,DSA
单向加密:数据完整性(MD5,SHA1)
密钥交换:RSA,DH,ECDH(椭圆曲线DH),ECDHE(临时椭圆曲线DH)

SSL:安全套接字层(ssl 1.0,ssl 2.0,ssl 3.0)
TLS:传输层安全(tls 1.0,tls 1.1,tls 1.2 tls 1.3)

OpenSSL:
libcrypto
libssl
openssl

SSL会话主要三步:
客户端向服务器端索要并验证证书;
双方协商生成“会话密钥”;
双方使用“会话密钥”进行加密通信;
第一阶段:ClientHello:
支持的协议版本,比如tls1.2
客户端生成一个随机数,稍后用户生成“会话密钥”
支持的加密算法,比如AES、RSA;
支持的压缩算法;
第二阶段:ServerHello
确认使用的加密通信协议版本,比如tls1.2
服务器端生成一个随机数,稍后用于生成“会话密钥”
确认使用的加密方法;
服务器证书;

第三阶段:
    验证服务器证书,确认无误后取出其公钥;(发证机构、证书完整性、证书持有者、证书有效期、吊销列表)
    发送以下信息给服务器端;
        一个随机数;
        编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
        客户端握手结束通知;
第四阶段:
    收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所有的“会话密钥”;
    向客户端发送如下信息:
        编码变更通知,表示随后的信息都将用双方商定的加密方法和密钥发送;
        服务端握手结束通知;

PKI:Public Key Infrastructure
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:

OpenSLL(2)
组件:
libcrypto,libssl主要由开发者使用;
openssl:多用途命令行工具;
子命令:
标准命令
dgst命令
enc命令
加密:#openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:#openssl enc -d -des3 -a -salt -out fstab.plaintext -in fstab.ciphertext
单向加密:
工具:openssl dgst,md5sum,sha1sum,sha224sum,...
# openssl dgst -md5 /PATH/TO/SOMEFILE
生成用户密码:
工具:passwd,openssl passwd
openssl passwd -1 -salt SALT
生成随机数:
工具:openssl rand
# openssl rand -hex 10
# openssl rand -base64 10
公钥加密:
加密解密:
算法:RSA,ELGamal
工具:openssl rsautl,gpg
数字签名:
算法:RSA,DSA,ELGamal
工具:
密钥交换:
算法:DH
生成私钥:
# (umask 077;openssl genrsa -out /tmp/mykey3.private 2048)
提取公钥:
# openssl rsa -in /tmp/mykey3.private -pubout
Linux系统上的随机数生成器:
/dev/random:仅从熵池返回随机数,随机数用尽,阻塞;
/dev/urandom:从熵池中返回随机数,随机数用尽,利用软件生成伪随机数,非阻塞;
熵池中随机数来源:
硬盘IO中断时间间隔;
键盘IO中断时间间隔;

CA:
公共信任CA,私有CA
建立私有CA:
openssl
OpenCA
openssl命令
配置文件:/etc/pki/tls/openssl.cnf
构建私有CA:
生成自签名证书:
为CA提供所需的目录及文件;

    步骤:
        1.生成私钥;/etc/pki/CA/private/
        # (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
        2.生成自签名证书(请求、签署一起);/etc/pki/CA/
        # openssl req -new -x509  -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
        3.为CA提供所需的目录及文件;
        # mkdir /etc/pki/CA{certs,crl,newcerts}
        # touch /etc/pki/CA/{serial,index.txt}
        # echo 01 > /etc/pki/CA/serial
要用到证书进行安全通信的服务器,向CA请求证书
     1.生成私钥文件
     # mkdir /etc/httpd/ssl
     # cd /etc/httpd/ssl
     # (umask 077;openssl genrsa -out httpd.key 2048)
     2.生成证书签发请求
     # openssl req -new -key httpd.key -out httpd.csr -days 365
     3.CA签发证书
     # openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
     4.查看证书信息
     # openssl x509 -in httpd.crt -noout -serial -subject
        查看序列号和subject
CA吊销客户证书
    1.客户端获取要吊销证书的serial
        # openssl x509 -in httpd.crt -noout -serial -subject
    2.CA吊销证书 
        先根据客户提供的serial和subject信息,和本机数据库index.txt中存储的信息是否一致
        吊销:
        # open ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
    3.生成吊销证书的吊销编号(第一次吊销时)
        # echo 01 > /etc/pki/CA/crlmumber
    4.更新证书吊销列表
        # openssl ca -gencrl -out thisca.crl
        查看crl文件
        # openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text








































































以上是关于openssl命令的主要内容,如果未能解决你的问题,请参考以下文章

什么是equivelant openssl命令在Java代码中执行以下操作

openssl验证签名错误,但命令行工具没问题

OpenSSL命令

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段——cli的终端命令大全

VSCode自定义代码片段4——cli的终端命令大全