A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
CSR
,安装 SSL / TLS
证书以及标识证书信息。 我们设计了此快速参考指南,以帮助您了解最常见的 OpenSSL 命令以及如何使用它们。
-bash: openssl: command not found #CentOS/RHEL 安装 yum group install 'Development Tools' && yum install perl-core libtemplate-perl zlib-devel 或者: yum search openssl yum install openssl openssl-devel openssl version -a #安装后验证 #Debian/Ubuntu 安装 sudo apt-get install openssl sudo apt-get install libssl-dev #Fedora dnf install openssl #OpenSUSE zypper addrepo https://download.opensuse.org/repositories/openSUSE:12.1/standard/openSUSE:12.1.repo zypper refresh zypper install openssl --------------- #Debian apt-get install openssl #Ubuntu apt-get install openssl #Alpine apk add openssl #Arch Linux pacman -S openssl #Kali Linux apt-get install openssl #CentOS yum install openssl #Fedora dnf install openssl #OS X brew install openssl #Raspbian apt-get install openssl #Docker docker run cmd.cat/openssl openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
OpenSSL 有两种运行模式:交互模式和批处理模式。
直接输入 openssl
回车进入交互模式,输入带命令选项的 openssl
进入批处理模式。
OpenSSL 整个软件包大概可以分成三个主要的功能部分:密码算法库、SSL 协议库以及应用程序。OpenSSL 的目录结构自然也是围绕这三个功能部分进行规划的。
X.509
证书,CSR
和 CRL
SSL/TLS
客户端和服务器测试S/MIME
签名或加密的邮件openssl command [ command_opts ] [ command_args ] openssl [ list-standard-commands | list-message-digest-commands | list-cipher-commands | list-cipher-algorithms | list-message-digest-algorithms | list-public-key-algorithms] openssl no-XXX [ arbitrary options ]
检查您的 OpenSSL 版本,在准备生成私钥或 CSR 时,确定使用的 OpenSSL 版本是重要的第一步。您的 OpenSSL 版本规定了生成密钥时可以使用的加密算法以及支持的协议。例如,OpenSSL 版本 1.0.1
是第一个支持 TLS 1.1
和 TLS 1.2
的版本。在获得对可能遇到的问题进行故障诊断的帮助时,了解正在使用的 OpenSSL 版本也很重要。
使用以下命令来确定您正在运行的 OpenSSL 版本:
$ openssl version -a OpenSSL 1.0.2k-fips 26 Jan 2017 built on: reproducible build, date unspecified platform: linux-x86_64 options: bn(64,64) md2(int) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) compiler: gcc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -m64 -DL_ENDIAN -Wall -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wa,--noexecstack -DPURIFY -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM OPENSSLDIR: "/etc/pki/tls" engines: rdrand dynamic
在此 openssl 命令中,-a 开关显示完整的版本信息,包括:
使用 openssl
生成密码
$ openssl rand -base64 10 9dFsv+DV/gnNJQ==
openssl
消息摘要算法应用例子
#用SHA1算法计算文件file.txt的哈西值,输出到stdout: $ openssl dgst -sha1 file.txt #用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt: $ openssl sha1 -out digest.txt file.txt #用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin。签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中。 $ openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt #用dss1算法验证file.txt的数字签名dsasign.bin,验证的private key为DSA算法产生的文件dsakey.pem。 $ openssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt #用sha1算法为文件file.txt签名,输出到文件rsasign.bin,签名的private key为RSA算法产生的文件rsaprivate.pem。 $ openssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt #用sha1算法验证file.txt的数字签名rsasign.bin,验证的public key为RSA算法生成的rsapublic.pem。 $ openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt
openssl
对称加密应用例子
#对称加密应用例子,用DES3算法的CBC模式加密文件plaintext.doc,加密结果输出到文件ciphertext.bin。 $ openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin #用DES3算法的OFB模式解密文件ciphertext.bin,提供的口令为trousers,输出到文件plaintext.doc。注意:因为模式不同,该命令不能对以上的文件进行解密。 $ openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers #用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取,输出到文件ciphertext.bin。 $ openssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD #给文件ciphertext.bin用base64编码,输出到文件base64.txt。 $ openssl base64 -in ciphertext.bin -out base64.txt #用RC5算法的CBC模式加密文件plaintext.doc,输出到文件ciphertext.bin,salt、key和初始化向量(iv)在命令行指定。 $ openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29
openssl
Diffie-Hellman 应用例子
#使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数,输出保存到文件dhparam.pem $ openssl dhparam -out dhparam.pem -2 1024 #从dhparam.pem中读取Diffie-Hell参数,以C代码的形式,输出到stdout。 $ openssl dhparam -in dhparam.pem -noout -C
openssl
DSA 应用例子
#生成1024位DSA参数集,并输出到文件dsaparam.pem。 $ openssl dsaparam -out dsaparam.pem 1024 #使用参数文件dsaparam.pem生成DSA私钥匙,采用3DES加密后输出到文件dsaprivatekey.pem $ openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem #使用私钥匙dsaprivatekey.pem生成公钥匙,输出到dsapublickey.pem $ openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem #从dsaprivatekey.pem中读取私钥匙,解密并输入新口令进行加密,然后写回文件dsaprivatekey.pem $ openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin
openssl
RSA 应用例子
#产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem $ openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024 #从文件rsaprivatekey.pem读取私匙,用口令trousers解密,生成的公钥匙输出到文件rsapublickey.pem $ openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem #用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt $ openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt #使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt $ openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt #用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin $ openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin #用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt $ openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain #从X.509证书文件cert.pem中获取公钥匙,用3DES加密mail.txt,输出到文件mail.enc $ openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem #从X.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密S/MIME消息mail.enc,结果输出到文件mail.txt $ openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt #cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,证书被包含在S/MIME消息中,输出到文件mail.sgn $ openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn #验证S/MIME消息mail.sgn,输出到文件mail.txt,签名者的证书应该作为S/MIME消息的一部分包含在mail.sgn中 $ openssl smime -verify -in mail.sgn -out mail.txt
用 openssl 验证网站 SSL 证书的有效性:
$ openssl s_client -connect commandnotfound.cn:443 -servername commandnotfound.cn CONNECTED(00000003) depth=2 C = US, O = Internet Security Research Group, CN = ISRG Root X1 verify return:1 depth=1 C = US, O = Let's Encrypt, CN = R3 verify return:1 depth=0 CN = commandnotfound.cn verify return:1 --- Certificate chain 0 s:/CN=commandnotfound.cn i:/C=US/O=Let's Encrypt/CN=R3 1 s:/C=US/O=Let's Encrypt/CN=R3 i:/C=US/O=Internet Security Research Group/CN=ISRG Root X1 --- Server certificate -----BEGIN CERTIFICATE----- MIIFQjCC... ... -----END CERTIFICATE----- subject=/CN=commandnotfound.cn issuer=/C=US/O=Let's Encrypt/CN=R3 ... Start Time: 1634539335 Timeout : 300 (sec) Verify return code: 0 (ok) ---