OpenSSL安全套接字密码库命令

2022-09-29 14:03:44 浏览数 (1)

[TOC]

0x00 前言简述

OpenSSL命令有两种运行模式交互模式和批处理:

  • 输入openssl回车进入交互模式
  • 输入带命令选项的openssl进入批处理模式

OpenSSL整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL协议库以及应用程序,OpenSSL的目录结构自然也是围绕这三个功能部分进行规划的;

功能说明:

  • 处理数字证书:可以用作证书颁发机构(Certificate Authority 即 CA)
  • 进行证书、公钥、私钥的管理
0x01 Openssl 命令
Syntax & Param

基础语法:

代码语言:javascript复制
openssl [Standard]

基础参数:

代码语言:javascript复制
#Standard commands (标准命令)
asn1parse         ca                ciphers           cms
crl               crl2pkcs7         dgst              dh
dhparam(dh加密方式)           dsa               dsaparam(dsa加密方式)          ec
ecparam           enc(加密)               engine            errstr
gendh             gendsa            genpkey           genrsa(生成rsa密匙)
nseq              ocsp              passwd            pkcs12
pkcs7             pkcs8             pkey              pkeyparam
pkeyutl           prime             rand(随机)              req
rsa(密钥生成公钥)  rsautl(公私钥加解密)s_client          s_server
s_time            sess_id           smime             speed
spkac             ts                verify            version
x509(公钥证书的格式标准)

#Message Digest commands (消息摘要命令)
md2               md4               md5               rmd160
sha               sha1

#Cipher commands (Cipher commands)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb
aes-256-cbc       aes-256-ecb       base64            bf
bf-cbc            bf-cfb            bf-ecb            bf-ofb
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb
des               des-cbc           des-cfb           des-ecb
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb
des-ofb           des3              desx              idea
idea-cbc          idea-cfb          idea-ecb          idea-ofb
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc
rc2-cfb           rc2-ecb           rc2-ofb           rc4
rc4-40            rc5               rc5-cbc           rc5-cfb
rc5-ecb           rc5-ofb           seed              seed-cbc
seed-cfb          seed-ecb          seed-ofb          zlib
命令一览
代码语言:javascript复制
#实例:文件生成base64字符串
openssl base64 -in test.txt #等同于 base64 test.txt
N2ZmYjJhZmQ2ODZjZDk5NDdlOTY1ODMyZTY4MGQwYzI0NTY0ZGM4NDlhZmRjZGVhMDQzZmRkZDY1ZDIxN2ZlNwo=

rand

代码语言:javascript复制
#实例1.随机数的生成
openssl rand -base64 位数 -out 写出的文件
openssl rand -base64 128
od3xDJVOVKGYfSXHELXI3oVw0hyElUE34tZWsYHrU6yk7Gyr6Z7B8QlZ2zbZBcTCR3DJMr81j1l3SaFYxbO1xhs4ki4iZXPwwpO1gyG4sAnfGC1bDEBYzKw u/jlSCSBlCoukUa41nvEQ2hE2BGxbQoWeuwO0L3hQk5wwxMHPiE=

req大致有3个功能:生成证书请求文件、验证证书请求文件和创建根CA。

dgst - 摘要校验与生成

描述:它是OpenSSL子命令主要用于文件的摘要信息的验证与生成;

代码语言:javascript复制
$openssl dgst -h
options are
-c              to output the digest with separating colons
-r              to output the digest in coreutils format
-d              to output debug info
-hex            output as hex dump
-binary         output in binary form
-hmac arg       set the HMAC key to arg
-non-fips-allow allow use of non FIPS digest
-sign   file    在文件中使用私钥的符号摘要
-verify file    使用文件中的公钥验证签名
-prverify file  使用文件中的私钥验证签名
-keyform arg    关键文件格式(PEM或引擎)
-out filename   输出到文件名而不是标准输出
-signature file 签名验证
-sigopt nm:v    参数验证
-hmac key       create hashed MAC with key
-mac algorithm  create MAC (not neccessarily HMAC)
-macopt nm:v    MAC algorithm parameters or key
-engine e       使用引擎e,可能是硬件设备。
# 支持的信息摘要算法
-md4            to use the md4 message digest algorithm
-md5            to use the md5 message digest algorithm
-ripemd160      to use the ripemd160 message digest algorithm
-sha            to use the sha message digest algorithm
-sha1           to use the sha1 message digest algorithm
-sha224         to use the sha224 message digest algorithm
-sha256         to use the sha256 message digest algorithm
-sha384         to use the sha384 message digest algorithm
-sha512         to use the sha512 message digest algorithm
-whirlpool      to use the whirlpool message digest algorithm

简单示例:

代码语言:javascript复制
# (1) 用SHA1/MD5算法计算文件file.txt的哈希值输出到stdout;
openssl dgst -sha1 file.txt
openssl dgst -md5 file.txt

当在配置ssl_ciphers参数中的套件顺序不一样,浏览器在协商时会优先使用排位靠前的套件,我们可通过执行openssl ciphers命令检查加密套件配置支持的协议信息,以及椭圆曲线的套件(ECDHE)队列情况,此时我们只要调整顺序(前置)就可以加大协商出支持椭圆曲线算法的套件的可能性。

代码语言:javascript复制
$ openssl ciphers -V 'ECDHE-RSA-AES128-GCM-SHA256:ECDH:AES:EECDH CHACHA20:EECDH CHACHA20-draft:EECDH AES128:RSA AES128:EECDH AES256:RSA AES256:EECDH 3DES:RSA 3DES:HIGH:!NULL:!aNULL:!eNULL:!EXPORT:!PSK:!ADH:!DES:!MD5:!RC4' | column -t
# 执行结果
0x13,0x02  -  TLS_AES_256_GCM_SHA384          TLSv1.3  Kx=any   Au=any    Enc=AESGCM(256)             Mac=AEAD
0x13,0x03  -  TLS_CHACHA20_POLY1305_SHA256    TLSv1.3  Kx=any   Au=any    Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0x13,0x01  -  TLS_AES_128_GCM_SHA256          TLSv1.3  Kx=any   Au=any    Enc=AESGCM(128)             Mac=AEAD
0xC0,0x2F  -  ECDHE-RSA-AES128-GCM-SHA256     TLSv1.2  Kx=ECDH  Au=RSA    Enc=AESGCM(128)             Mac=AEAD
0xC0,0x2C  -  ECDHE-ECDSA-AES256-GCM-SHA384   TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=AESGCM(256)             Mac=AEAD
0xC0,0x30  -  ECDHE-RSA-AES256-GCM-SHA384     TLSv1.2  Kx=ECDH  Au=RSA    Enc=AESGCM(256)             Mac=AEAD
0xCC,0xA9  -  ECDHE-ECDSA-CHACHA20-POLY1305   TLSv1.2  Kx=ECDH  Au=ECDSA  Enc=CHACHA20/POLY1305(256)  Mac=AEAD
0xCC,0xA8  -  ECDHE-RSA-CHACHA20-POLY1305     TLSv1.2  Kx=ECDH  Au=RSA    Enc=CHACHA20/POLY1305(256)  Mac=AEAD
....
0x00,0xBA  -  CAMELLIA128-SHA256              TLSv1.2  Kx=RSA   Au=RSA    Enc=Camellia(128)           Mac=SHA256
0x00,0x84  -  CAMELLIA256-SHA                 SSLv3    Kx=RSA   Au=RSA    Enc=Camellia(256)           Mac=SHA1
0x00,0x41  -  CAMELLIA128-SHA                 SSLv3    Kx=RSA   Au=RSA    Enc=Camellia(128)           Mac=SHA1
s_client - 客户端证书查询与导出

语法参数

代码语言:javascript复制

# 语法示例
openssl s_client -showcerts -connect {HOSTNAME}:{PORT} </dev/null 2>/dev/null

实践案例:

代码语言:javascript复制
# 1.例如,导出我的博客网站证书的命令,执行命令证书保存在文件 blog.weiyigeek.top.pem 中。
openssl s_client -showcerts -connect blog.weiyigeek.top:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > blog.weiyigeek.top.pem
# 查看其证书SAN中的HOST
openssl x509 --text -in blog.weiyigeek.top.pem -noout  | grep "Subject Alternative Name" -A 1
  X509v3 Subject Alternative Name:
      DNS:*.weiyigeek.top, DNS:weiyigeek.top

0 人点赞