openssl:它支持ssl(Secure Sockets Layer,v2/v3),TLS(Transport Layer Secure,v1)。這套工具集的應用範圍非常之廣,包括:
- 創建和管理私鑰、公鑰。
- 公鑰加密操作。
- 創建X.509證書(Certificate),證書請求(CSR),證書撤銷(CRL)。
- 計算消息摘要(MD5,SHA-1等)。
- 使用密碼加解密(Encryption/Decryptionwith Ciphers)。
- SSL/TLS 客戶端/服務器測試。
- 處理S/MIME簽名以及加密郵件。
- 等等.
openssl組成包括三部分:
libcrypto:加密庫
libssl:TLS/SSL的實現(基於會話實現了身份認證、數據機密性、會話完成性的SSL庫)
openssl:全天候、多用途的命令行工具,可以模擬實現私有頒發機構
openssl:
命令格式:openssl command [command_opts ] [ command_args ]
openssl包含衆多子命令,可使用幫助來查看子命令以及子命令的選項:
查看openssl的幫助:
openssl -h:查看所有子命令
openssl rsa -h:查看rsa子命令的選項
查看openssl的版本:
openssl version
openssl version -a
openssl包含的常用子命令有:
dgst:生成消息摘要
openssl dgst [算法] /PATH/TO/FILE
speed:測試算法的性能
openssl speed [算法]
genrsa:生成RSA私有密鑰
openssl genrsa -out /PATH/TO/OUT_FILE [NUMBITS]
gendsa:生成DSA私有密鑰
openssl gendsa -out /PATH/TO/OUT_FILE [NUMBITS]
genpkey:生成私鑰
openssl genpkey -out /PATH/TO/OUT_FILE -cipher
-cipher:私鑰加密存放
ca:請求頒發證書
openssl ca -days DAYS -in /PATH/TO/CSR_FILE -out /PATH/TO/CRT_FILE
passwd:計算密鑰哈希碼
查看幫助:
$whatis passwd
passwd (1) - update user's authentication tokens
passwd (5) - password file
passwd [sslpasswd] (1ssl) - compute password hashes
$man sslpasswd
openssl passwd [-crypt] [-1] [-salt salt_string] [password]
req:PKCS#10證書請求頒發和證書生成工具
PKCS(Public-KeyCryptography Standards)有很多種類,openssl工具集中也有一系列名爲pkcs#x的工具。常見的如:
PKCS#7,加密信息語法標準(CryptographyMessage Syntax Standard)。用於簽名或加密消息,是S/MIME的基石。
PKCS#10,證書籤署請求(CSR)。
PKCS#12,個人信息交換語法標準(PersonalInformation Exchange Syntax Standard)。
openssl req [options]:
-new
生成新的證書請求。如果沒有-key 參數,則會生成新的RSA私鑰。
-keyfile
私鑰文件。
-nodes
如果要生成私鑰,則不對私鑰加密(將命令理解爲 no des)。
-x509
生成一個自簽名證書,而非一個證書籤署請求。
-text
以文本方式查看證書內容
生成證書籤署請求(CSR)與生成證書
方法1 :用opensslgenrsa生成私鑰,用openssl req生成證書籤署請求:
$openssl genrsa -out s.key 1024
$openssl req -new -key s.key -out s.csr
方法2 :用req生成私鑰,並生成證書籤署請求:
$openssl req -newkey rsa:1024 -keyout s.key -out s.csr -nodes
注意,這裏加了-nodes選項,否則要求輸入密碼保護私鑰。
方法3 跳過CSR,直接生成證書:
$openssl req -x509 -nodes -days 365 \
-subj'/C=CN/ST=BeiJing/L=HaiDian/CN=www.berlinix.com' \
-newkeyrsa:1024 -keyout s.key -out s.crt
x509:私有證書頒發管理命令
生成私有CRT:
openssl x509 -req -days DAYS -in /PATH/TO/CSR_FILE -signkey /PATH/TO/KEY_FILE -out/PATH/TO/CRT_FILE
查看私有CRT:
openssl x509 -text -in /PATH/TO/CRT_FILE
s_client:作爲SSL/TLS客戶端運行
openssl s_client [-connect host:port] [-verify depth] [-cert filename] [-certformDER|PEM] [-key filename] [-CApath directory] [-CAfile filename]
s_server:作爲SSL/TLS服務器運行
openssl s_server [-accept port] [-context id][-verify depth][-Verify depth] [-crl_check] [-crl_check_all] [-cert filename][-key keyfile] [-CApath directory] [-CAfile filename]
用s_server/s_client測試證書
用s_server建立服務器:
$ openssl s_server -cert s.crt -key s.key -www
用s_client作爲客戶端:
$ openssl s_client -connect localhost:443
s_time:SSL連接的性能測試。
openssl s_time -connect www.google.com:443
enc:加密
openssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin
建立本地私有證書頒發機構:
n 切換到CA證書目錄下
cd/etc/pki/CA
n 2.根據配置文件(/etc/pki/tls/openssl.cnf)創建文件夾和相應文件
mkdir newcerts private
touch crl.pem crlnumber index.txt serial
n 3.serial文件存放發放的證書的編號,爲serial建立初始編號
echo 01 > serial
n 4.生成RSA私鑰cakey.pem:
(umask0077;openssl genrsa -out /PATH/TO/KEYFILE NUMBITS) 注意:生成的私鑰文件權限需爲0600
n 5.生成CA證書cacert.pem:
openssl req -new -x509 -days 500 -key ./private/cakey.pem -out cacert.pem
n 6.生成CA證書頒發請求cacert.csr:
openssl req -new -x509 -days 500 -key ./private/cakey.pem -out cacert.csr
n 7.生成CA證書CRT cacert.crt:
openssl x509 -req -days 500 -in cacert.csr -signkey ./private/cakey.pem -out cacert.crt
根據提示輸入相關的證書註冊信息,注意主機名一定要和當前主機名一致;
設置證書註冊信息的默認值:vim /etc/pki/tls/openssl.cnf
在[req_distinguished_name]下填入相應的信息即可。
查看證書CRT:
openssl x509 -text -in cacert.crt
第三方請求CA頒發證書:
n 1.創建第三方證書存放目錄:
cd/etc/httpd
mkdirssl
cd./ssl
n 2.生成第三方私鑰:
openssl genrsa -out httpd.pem
n 3.生成第三方CSR:
openssl req -new -x509 -key httpd.pem -out httpd.csr
n 4.請求CA頒發證書:
openssl ca -days 500 -in httpd.csr -out httpd.crt
根據提示手動輸入請求認證信息,主機名應當和當前主機名保持一致。
n 5.查看CA頒發中心記錄:
cd/etc/pki/CA
cat serial :serial 裏保存的序號已經自增1了
ls newcerts:newcerts文件夾裏生成了01.pem的文件,它記錄的是爲httpd頒發的證書的相關信息
生成測試證書:
在/etc/pki/tls/certs/目錄下,執行make *.crt/*.pem/*.csr/*.key等命令,根據目標生成文件的後綴名可以快速生成相應的測試用的證書
如生成的*.crt證書中既包含CRT,又包含私鑰,所以只能做測試用。