標籤:openssl https
openssl詳解及實現httpsopenssl詳解及實現https
OpenSSL 是一個安全通訊端層密碼庫,囊括主要的密碼演算法、常用的密鑰和認證封裝管理功能及SSL協議,並提供豐富的應用程式供測試或其它目的使用。
秘鑰演算法和協議:
對稱式加密:
加密和解密使用同一個密鑰,未經處理資料分成固定大小塊,演算法不同
秘鑰過多,秘鑰分發困難
DES,3DES AES Blowfish Twofish IDEA RC6 CAST5
公開金鑰加密:
分公開金鑰與私密金鑰
公開金鑰:從私密金鑰中提取產生,可公開給所有人;pubkey
私密金鑰:通過工具建立,使用者自己留存保證其私密性;secret key
數位簽章:(私密金鑰加密的特徵碼)接受方確認發送方身份
秘要交換:發送方用對方公開金鑰加密一個對稱秘鑰 發送給對方
資料加密:不常用公開金鑰進行資料加密 慢,RSA,DSA
發送方:
接收方:
用自己的私密金鑰解密對稱秘鑰
用對稱秘鑰解密整段資料–保密性
用發送方的公開金鑰解密特徵碼–驗證發送方身份
計算特徵碼與接收的特徵碼作比較–保證資料完整性
可能出現中間人。要可靠的拿到對方公開金鑰:CA
計算資料的特徵碼
用自己的私密金鑰加密這段特徵碼
產生臨時對稱秘鑰(一次性),用其加密整段資料(包括加密的特徵碼)
用接收方的公開金鑰加密臨時對稱秘鑰附加在資料後
單向加密: 提取資料指紋,只能加密不能解密 定長輸出,雪崩效應 保證資料完整性 演算法: md5 固定128位輸出 sha1 160,224,256,384,512
秘要交換:公開金鑰交換
DH:利用 已知大質數的高次方的結果 反求次方極難
協商產生p,g 本機產生x,將 p^x%g 的結果發送
接收方本機產生y 求 (p^x%g)^y 對方 (p^y%g)x 結果相同
RSA ECDH ECDHE
PKI: Public Key Infrastructure
X.509:定義了認證的結構以及認證協議標準
SSL: Secure Socket Layer
TLS: Transport Layer Security
資料保密性
資料完整性
安全驗證
OpenSSL:開源項目,三個組件
# openssl
標準命令,訊息摘要命令,加密命令
openssl enc
-e:加密
-d:解密
-a:文本編碼格式
-salt:鹽
-in:要處理的檔案
-out:要輸出的檔案
]# openssl enc -e -rc4 -a -salt -in fstab -out fstab.en 加密
單向加密:計算特徵碼
openssl dgst - FILE
md2 md4 md5 rmd160 sha sha1
]# md5sum FILE
]# openssl dgst -md5 FILE md5加密
產生使用者密碼:
openssl passwd -1 -salt SALT
產生隨機數:
openssl rand [base64|hex] #
base64:
hex:16進位編碼
#:長度
]# openssl rand -base64 10 使用時去掉尾部兩個“==”
GyA/hYBNH20RAQ==
https:http+openssl
環境:
Web:CentOS 6.8,10.1.235.6
CA:CentOS 7,10.1.235.7
關閉防火牆及selinux
CentOS 7,10.1.235.7:
建立私人CA:
產生私密金鑰:指定位置
]# (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
產生字簽認證:
]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
-new:產生新認證簽署請求
-x509:產生自簽格式認證,用於建立私人CA,其它情況不加
-key:產生請求時用到的私密金鑰路徑
-out:產生的請求檔案路徑,若自簽操作將直接產生簽署過的認證
-days:認證的有效時間長度
...
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Class
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server‘s hostname) []:www.zjj.com
Email Address []:
建立所需檔案:
]# touch /etc/pki/CA/{serial,index.txt}
]# echo 01 > /etc/pki/CA/serial
CentOS 6.8,10.1.235.6:
安裝配置http服務:
安裝http及mod_ssl模組
]# yum install httpd mod_ssl
]# vi /etc/httpd/conf/httpd.conf
#ServerName www.example.com:80
取消注釋更改 ServerName www.zjj.com:80
DocumentRoot "/var/www/html"
注釋該行 #DocumentRoot "/var/www/html"
儲存退出
產生認證請求:
]# mkdir /etc/httpd/ssl
]# cd /etc/httpd/ssl
產生私密金鑰:
]# (umask 077;openssl genrsa -out httpd.key 2048)
產生認證請求:
]# openssl req -new -key httpd.key -out httpd.csr
...填入相關內容
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Class
Organizational Unit Name (eg, section) []:Ops
Common Name (eg, your name or your server‘s hostname) []:www.eva.com
Email Address []:
...
將請求發送至CA主機:
]# scp ../ssl/httpd.csr 10.1.235.7:/
在CA主機上籤署:CentOS 7,10.1.235.54
]# openssl ca -in httpd.csr -out httpd.crt -days 365
將認證發送至Web主機
]# scp httpd.crt 10.1.235.6:/etc/httpd/ssl
Web主機配置ssl,找到以下兩行,更改對應的認證及私密金鑰檔案:
]# vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
在虛擬機器主機標籤內添加:
Documentroot /virtual
<Directory /virtual>
Options None
AllowOverRide None
</Directory>
]# mkdir /vitual
]# vi /virtual/index.html 建立首頁檔案
<center>https from 10.1.235.6</center>
測試:
在/etc/hosts檔案中添加一條網域名稱解析
10.1.235.6 www.eva.com
可以在Cent 7上指定認證訪問:未指定認證訪問https會報錯
]# curl --cacert /etc/pki/CA/cacert.pem https://www.eva.com
<center>https from 10.1.235.6</center>
windows中可以將認證匯入為受信任的根憑證
本文出自 “平平無奇” 部落格,請務必保留此出處http://zzjasper.blog.51cto.com/9781564/1864578
openssl+http實現https