IOS 網絡協議(一) 自簽名證書HTTPS文件上傳下載(上)html
IOS 網絡協議(一) 自簽名證書HTTPS文件上傳下載(下)java
IOS音視頻(三)AVFoundation 播放和錄音shell
IOS音視頻(四十三)AVFoundation 之 Audio Session數據庫
IOS音視頻(四十四)AVFoundation 之 Audio Queue Servicesapache
IOS音視頻(四十五)HTTPS 自簽名證書 實現邊下邊播swift
IOS音視頻(四十六)離線在線語音識別方案windows
IOS 網絡協議(一) 自簽名證書HTTPS文件上傳下載(下)瀏覽器
- 證書分爲2類:自簽名證書和CA證書。通常自簽名證書不能用來進行身份認證,若是一個server端使用自簽名證書,client端要麼被設置爲無條件信任任何證書,要麼須要將自簽名證書的公鑰和私鑰加入受信任列表。但這樣一來就增長了server的私鑰泄露風險
- TLS是傳輸層安全協議(Transport Layer Security)的縮寫,是一種對基於網絡的傳輸的加密協議,能夠在受信任的第三方公證基礎上作雙方的身份認證。TLS能夠用在TCP上,也能夠用在無鏈接的UDP報文上。協議規定了身份認證、算法協商、密鑰交換等的實現。
- HTTPS是在基於TLS/SSL的安全套接字上的的應用層協議,除了傳輸層進行了加密外,其它與常規HTTP協議基本保持一致
- 證書是TLS協議中用來對身份進行驗證的機制,是一種數字簽名形式的文件,包含證書擁有者的公鑰及第三方的證書信息。
- TLS基於CA的身份認證基本原理是:首先驗證方須要信任CA提供方本身的證書(CAcert),好比證書在操做系統的受信任證書列表中,或者用戶經過「安裝根證書」等方式將 CA的公鑰和私鑰加入受信任列表;而後CA對被驗證方的原始證書進行簽名(私鑰加密),生成最終的證書;驗證方獲得最終的證書後,利用CAcert中包含的公鑰進行解密,獲得被驗證方的原始證書。
- 根據RSA的加密原理,若是用CA的公鑰解密成功,說明該證書的確是用CA的私鑰加密的,能夠認爲被驗證方是可信的。
- 自簽名的證書沒法被吊銷,CA簽名的證書能夠被吊銷 能不能吊銷證書的區別在於,若是你的私鑰被黑客獲取,若是證書不能被吊銷,則黑客能夠假裝成你與用戶進行通訊
- 若是你的規劃須要建立多個證書,那麼使用私有CA的方法比較合適,由於只要給全部的客戶端都安裝了CA的證書,那麼以該證書籤名過的證書,客戶端都是信任的,也就是安裝一次就夠了
- 若是你直接用自簽名證書,你須要給全部的客戶端安裝該證書纔會被信任,若是你須要第二個證書,則還的挨個給全部的客戶端安裝證書2纔會被信任。
x509的證書編碼格式有兩種:
- PEM(Privacy-enhanced Electronic Mail) 是明文格式的 以 -----BEGIN CERTIFICATE-----開頭,已-----END CERTIFICATE-----結尾,中間是通過base64編碼的內容,apache須要的證書就是這類編碼的證書 查看這類證書的信息的命令爲 :openssl x509 -noout -text -in server.pem 其實PEM就是把DER的內容進行了一次base64編碼
- DER 是二進制格式的證書 查看這類證書的信息的命令爲 :openssl x509 -noout -text -inform der -in server.der
.crt
證書文件 ,能夠是DER(二進制)編碼的,也能夠是PEM( ASCII (Base64) )編碼的 ,在類unix系統中比較常見.cer
也是證書 常見於Windows系統 編碼類型一樣能夠是DER或者PEM的,windows 下有工具能夠轉換crt到cer.csr
證書籤名請求 通常是生成請求之後發送給CA,而後CA會給你簽名併發回證書.key
通常公鑰或者密鑰都會用這種擴展名,能夠是DER編碼的或者是PEM編碼的 查看DER編碼的(公鑰或者密鑰)的文件的命令爲 openssl rsa -inform DER -noout -text -in xxx.key 查看PEM編碼的(公鑰或者密鑰)的文件的命令爲 openssl rsa -inform PEM -noout -text -in xxx.key.p12
證書 包含一個X509證書和一個被密碼保護的私鑰
相對自簽證書的本身給本身頒證,由權威的證書受權機構(Certificate Authority)頒發的簽名證書,咱們稱之爲:CA證書 CA證書保證書持有者的身份和公鑰的擁有權 瀏覽器對CA證書是信任的
1:先下載安裝Java JDK:www.oracle.com/technetwork…
2:安裝完後,根據實際的路徑找到keytool.exe,如個人在此路徑:C:\Program Files (x86)\Java\jdk1.8.0_101\bin\keytool.exe
3:生成keystore。打開命令行(cmd),去到keytool所在的路徑,運行:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore d:\mykeystore\keystore.p12 -validity 3650 -ext san=ip:192.168.100.132 -dname "CN=garyyan, OU=mycompany, O=mycompany, L=gd, ST=gd, C=china"
複製代碼
此命令中間只須要輸入密碼,就能生成keystore,假設密碼是:123456 其中: 1)keystore可理解爲一個數據庫,能夠存不少個組數據。 每組數據主要包含下面兩種數據: a:密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(採用非對稱加密) b:可信任的證書實體(trusted certificate entries)——只包含公鑰 2)-keystore d:\mykeystore\keystore.p12,指定在d:\mykeystore(先要手動建立此文件夾),生成keystore:keystore.p12 3)-alias tomcat,爲其指明在keystore中的惟一的別名:tomcat ,由於keystore中可能還存有其它的別名,如:tomcat 2 4)-storetype PKCS12指明密鑰倉庫類型是PKCS12 5)-keyalg RSA,指定加密算法,本例中的採用通用的RAS加密算法 6)-keysize 2048指定密鑰的長度爲2048 7)-validity 3650 指定證書的有效期爲3650天 8)-ext san=ip:192.168.100.132請根據你的服務器的IP地址設置,若是不進行設置,客戶端在訪問的時候可能會報錯 9)-dname 「CN=garyyan, OU=mycompany,O=mycompany,L=gd, ST=gd, C=china」 其中:」CN=(名字與姓氏), OU=(組織單位名稱), O=(組織名稱), L=(城市或區域名稱), ST=(州或省份名稱), C=(單位的兩字母國家代碼)」,我在測試的過程當中發現隨便填就行
keytool -export -keystore d:\mykeystore\keystore.p12 -alias tomcat -file mycer.cer -storepass 123456
複製代碼
其中: 1)-keystore d:\mykeystore\keystore.p12 是指上面的keystore文件 2)-alias tomcat是指定別名爲tomcat的那一組 3)-file mycer.cer指定在當前目錄生成名爲mycer.cer的證書 4)-storepass 123456是上面生成keystore 所用的密碼
首先須要知道jdk安裝目錄,在terminal下輸入: /usr/libexec/java_home -V
2.跳轉到jdk目錄下
輸入keytool查看
3.建立簽名:終端輸入,keytool -genkey -v -keystore myKey.jks -keyalg RSA -keysize 2048 -validity 10000 -alias myAlias
因爲須要權限,執行命令時須要在前面加上sudo
按提示輸入相關信息,這裏會提示要輸入密碼,我使用的都是相同的密碼123456
若是前面執行keytool -genkey -v -keystore myKey.jks -keyalg RSA -keysize 2048 -validity 10000 -alias myAlias
命令時,沒有輸入sudo,則會報下面的錯誤:
輸入sudo和密碼後執行結果以下:
查看keystore的指紋數據:keytool -v -list -keystore myKey.jks -alias myAlias -keypass 123456 -storepass 123456
導出證書certificate.pem: sudo keytool -export -rfc -alias myAlias -file upload_certificate.pem -keystore myKey.jks
, 這裏一樣有權限問題,須要使用sudo