HTTPS相關知識
概念
HTTP(HyperText Transfer Protocol超文本傳輸協議)
以明文方式發送內容,不提供任何方式的數據加密,是一個客戶端和服務器端請求和應答的標準(TCP),用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer基於安全套接字的超文本傳輸協議)
是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL
作用:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
SSL(Secure Sockets Layer安全套接字)
是Web瀏覽器與Web服務器之間安全交換信息的協議,提供兩個基本的安全服務:鑒別與保密
TSL(Transport Layer Security安全傳輸層)
用於在兩個通信應用程序之間提供保密性和數據完整性
對稱加密與非對稱加密
對稱加密:加密與解密采用相同的密鑰
非對稱加密:有兩個不同的密鑰,任意一個都可以成為加密密鑰,另外一個就是解密密鑰。
公鑰與私鑰
使用非對稱加密時,一個密鑰公之於眾,稱為公鑰;另一個密鑰除密鑰擁有者,其他人都不知道,稱為私鑰。
數字簽名
基於非對稱加密。
服務器-->瀏覽器:擁有私鑰的一方使用私鑰對內容進行加密後發送出去,由於任何人都可以獲得改私鑰對應的公鑰,所以擁有公鑰者使用公鑰對內容進行解密,能正確解密,說明該內容必然為擁有私鑰的那一方發出的
瀏覽器--->服務器:擁有公鑰的實體使用公鑰對內容進行加密,只有私鑰擁有者可以進行解密
數字證書
以數字簽名的方式通過權威認證機構CA有效地進行網上認證,幫助各個實體識別對方身份
數字證書就是一個文件,保存了某個實體的信息及該實體所擁有的私鑰對應的公鑰。
CA(Certificate Authority證書權威機構)
是數字證書認證中心的簡稱,是指發放、管理、廢除數字證書的機構。
CA的作用是檢查證書持有者身份的合法性,並簽發證書(在證書上簽字),以防證書被偽造或篡改,以及對證書和密鑰進行管理。
SSL與CA
CA是數字證書管理機構,SSL證書是數字證書的一種,CA簽發SSL證書,https是SSL證書的一種表現形式
https訪問過程
自簽名證書制作(自己做CA)
目標:
server使用的文件有:ca.crt,server.crt,server.key
名詞:
證書格式:
證書格式轉換:http://blog.csdn.net/adeyi/article/details/8299473
PEM格式:Base64編碼的ASCII文件;通常存儲服務器認證證書、中級認證證書和私鑰;應用:APACHE和類似服務器;擴展名為.pem, .crt, .cer, .key
DER格式:二進制編碼的ASCII文件;可以存儲所有的證書和私鑰;應用:JAVA;擴展名為.der,也有.cer, .crt
PKSC#7/P7B格式:base64格式;存儲認證證書或證書鏈中的證書,不能存儲私鑰;應用:Windows和tomcat都支持;擴展名.p7b, .p7c, .spc
PKS#12/PFX格式:加密的二進制格式;存儲服務器認證證書、中級認證證書和私鑰;應用:Windows中導入導出認證證書和私鑰;擴展名:.pfx, .p12
CSR:Certificate Signing Request
1. 制作CA
1.1. 為CA創建RSA私鑰(des3加密並且是PEM格式)
openssl genrsa -des3 -out ca.key 1024
des3--加密算法
過程中會提示輸入密碼,通過des3加密算法使用輸入的密碼加密ca.key文件
附:
查看私鑰的詳細信息:openssl rsa -noout -text -in ca.key
去除私鑰的口令:openssl rsa -in server.key -out ca.key
1.2. 為CA創建一個自簽名的證書(x509結構,輸出為PEM格式)
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
x509--結構
附:
查看證書信息:openssl x509 -noout -text -in ca.crt
2. 自建server證書
2.1 生成server私鑰
openssl genrsa -des3 -out server.key 1024
2.2 生成server證書請求
openssl req -new -key server.key -out server.csr
2.3 使用CA簽名server證書
openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -out servercert.crt
簽證完成後,會把證書請求響應和CA根證書一起返回給請求者,即server端
2.4 server端有另一服務器通過代碼訪問https,需使用keytool將根證書(鏈)及證書請求響應導入到java的cacerts庫中
keytool -import -alias isupcert -trustcacerts -file servercert.crt -keystore $JAVA_HOME/jre/lib/security/cacerts
附:
查看已有的證書:keytool -list -keystore cacerts -alias isupcert
刪除某證書keytool -delete -alias isupcert -keystore cacerts
3.client信任安全證書
一般添加到瀏覽器的信任白名單即可使用。
但在有的操作系統中,還需要將根證書配置為系統級的證書,才允許繼續使用。
Mac OS X
添加證書:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain
~/new-root-certificate.crt
移除證書:
sudo security delete-certificate -c ""
Windows
添加證書:
certutil -addstore -f "ROOT" new-root-certificate.crt
移除證書:
certutil -delstore "ROOT" serial-number-hex
Linux (Ubuntu, Debian)
添加證書:
1.復制 CA 文件到目錄: /usr/local/share/ca-certificates/
2.執行:
sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt
3.更新 CA 證書庫:
sudo update-ca-certificates
移除證書:
1.Remove your CA.
2.Update the CA store:
sudo update-ca-certificates --fresh
Restart Kerio Connect to reload the certificates in the 32-bit versions or
Debian 7.
Linux (CentOs 6)
添加證書:
1.安裝 ca-certificates package:
yum install ca-certificates
2.啟用dynamic CA configuration feature:
update-ca-trust force-enable
3.Add it as a new file to /etc/pki/ca-trust/source/anchors/:
cp foo.crt /etc/pki/ca-trust/source/anchors/
4.執行:
update-ca-trust extract
Restart Kerio Connect to reload the certificates in the 32-bit version.
Linux (CentOs 5)
添加證書:
Append your trusted certificate to file /etc/pki/tls/certs/ca-bundle.crt:
cat foo.crt >> /etc/pki/tls/certs/ca-bundle.crt
參考:
如何添加自定義CA根證書到操作系統獲得信任
https://www.qiansw.com/add-the-ca-root-certificate-to-the-operating-system-for-trust.html
SSL與CA
http://blog.csdn.net/lzs109/article/details/6960461
HTTPS相關知識