1.來自維基百科上對于OpenSSL的定義:
在電腦網(wǎng)絡上,OpenSSL是一個開放源代碼的軟件庫包,應用程序可以使用這個包來進行安全通信,避免竊聽,同時確認另一端連接者的身份。這個包廣泛被應用在互聯(lián)網(wǎng)的網(wǎng)頁服務器上。
其主要庫是以C語言所寫成,實現(xiàn)了基本的加密功能,實現(xiàn)了SSL與TLS協(xié)議。OpenSSL可以運行在絕大多數(shù)類Unix操作系統(tǒng)上(包括Solaris,Linux,Mac OS X與各種版本的開放源代碼BSD操作系統(tǒng)),OpenVMS與 Microsoft Windows。它也提供了一個移植版本,可以在IBM i(OS/400)上運作。
雖然此軟件是開放源代碼的,但其授權書條款與GPL有沖突之處,故GPL軟件使用OpenSSL時(如Wget)必須對OpenSSL給予例外。
2.主要功能
- libcrypto加密庫
- libssl:TLS/SSL的實現(xiàn)
- openssl命令行工具
實現(xiàn)私有證書頒發(fā)機構
子命令:可以輸入openssl ?查看
3.OpenSSL實現(xiàn)私有CA
3.1. 生成一對密鑰
用法格式:
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]
(umask 077;openssl genrsa -out server1024.key 1024)
這個命令用括號括住表示只在子shell中生效并且文件保持比較低的權限以利于安全性,生成一個私鑰簡單示例如下圖:
生成一個rsa私鑰
根據(jù)私鑰生成公鑰的命令:
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passinarg] [-out filename] [-passout arg] [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]
openssl rsa -in server1024.key -pubout
:這個命令會根據(jù)私鑰提取一個公鑰。
根據(jù)私鑰生成一個公鑰
3.2. 生成自簽署證件(這樣才能給“別人”發(fā)證)
使用openssl req子命令。具體用法格式如下:
openssl req [-inform PEM|DER] [-outform PEM|DER] [-in filename] [-passin arg] [-outfilename] [-passout arg] [-text] [-pubkey] [-noout] [-verify] [-modulus] [-new][-rand file(s)] [-newkey rsa:bits] [-newkey alg:file] [-nodes] [-key filename][-keyform PEM|DER] [-keyout filename] [-keygen_engine id] [-[digest]] [-configfilename] [-subj arg] [-multivalue-rdn] [-x509] [-days n] [-set_serial n][-asn1-kludge] [-no-asn1-kludge] [-newhdr] [-extensions section] [-reqexts section][-utf8] [-nameopt] [-reqopt] [-subject] [-subj arg] [-batch] [-verbose] [-engineid]
示例:openssl req -new -x509 -key server1024.key -out server.crt -days 365
生成證書
openssl x509 -text -in server.crt
可以查看
注:CA證書與密鑰等不能隨便放,具體的保存路徑文件請參考/etc/pki/tls/openssl.cnf文件內(nèi)容中的[CA_default]標簽說明,部分內(nèi)容如下圖
4. 實戰(zhàn)演練
4.1 查看/etc/pki/tls/openssl.cnf文件關于CA的配置(上圖文件)并創(chuàng)建相關目錄文件
/etc/pki/CA/certs:客戶端證書保存的目錄
/etc/pki/CA/crl:證書吊銷列表目錄
/etc/pki/CA/index.txt:寫明給哪些“人”發(fā)了證書的數(shù)據(jù)庫文件
/etc/pki/CA/cacert.pem:自己的證書文件
/etc/pki/CA/newcerts:剛生成的證書
/etc/pki/CA/serial:證書序列號
/etc/pki/CA/crlnumber:證書吊銷已經(jīng)到哪了
/etc/pki/CA/crl.pem:當前證書吊銷列表文件
/etc/pki/CA/private/cakey.pem:CA自己的私鑰
default_days = 365:默認的證書有效天數(shù),可自定義
還可以自定義設置 [req_distinguished_name] 標簽
# cd /etc/pki/CA
# (umask 077; openssl genrsa -out private/cakey.pem 2048) ---> 生成私鑰
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem [有效期(天)]--->生成自簽名證書。
# 這一步會根據(jù)openssl.cnf里[req_distinguished_name]標簽里的定義要求你依次
# 輸入相關信息
# `openssl x509 -in cacert.pem -noout -text` ---> 可以查看CA證書內(nèi)容。
# mkdir certs newcerts crl ----> 如果已經(jīng)有了,就無須再新建了
# touch index.txt
# touch serial
# echo 01 > serial ----> 給個起始號碼
---以下步驟模擬另一主機的http服務行為---
# mkdir -p /etc/httpd/ssl
# cd /etc/httpd/ssl
# (umask 077; openssl genrsa -out httpd.key 1024) ---> 生成私鑰
# openssl req -new -key httpd.key -out httpd.csr ---->會讓你填主機名 郵箱詢問是否加密等信息生成certificate request
# openssl ca -in httpd.csr -out httpd.crt [-days 365] ---->讓CA給你的請# 求簽下名(通過配置文件/etc/pki/tls/openssl.cnf檢查,有兩次詢問),當然這里是在本機上演示,也可以遠程連接,如果是遠程的話得將上一步生成的csr文件傳到遠程主機上,對應的當前這條命令應該在遠程主機上運行。
# 這時候在/etc/pki/CA/index.txt里就會生成證書數(shù)據(jù)文件
openssl ca