自簽名證書說明——自簽名證書的Issuer和Subject是一樣的。不安全的原因是:沒有得到專業SSL證書頒發的機構的技術支持?比如使用不安全的1024位非對稱密鑰對,有效期設置很長等


一般的數字證書產品的主題通常含有如下字段:
公用名稱 (Common Name) 簡稱:CN 字段,對於 SSL 證書,一般為網站域名;而對於代碼簽名證書則為申請單位名稱;而對於客戶端證書則為證書申請者的姓名; 
單位名稱 (Organization Name) :簡稱:O 字段,對於 SSL 證書,一般為網站域名;而對於代碼簽名證書則為申請單位名稱;而對於客戶端單位證書則為證書申請者所在單位名稱; 
證書申請單位所在地: 
所在城市 (Locality) 簡稱:L 字段 
所在省份 (State/Provice) 簡稱:S 字段 
所在國家 (Country) 簡稱:C 字段,只能是國家字母縮寫,如中國:CN 
其他一些字段:
電子郵件 (Email) 簡稱:E 字段 
多個姓名字段 簡稱:G 字段 
介紹:Description 字段 
電話號碼:Phone 字段,格式要求 + 國家區號 城市區號 電話號碼,如: +86 732 88888888 
地址:STREET  字段 
郵政編碼:PostalCode 字段 
顯示其他內容 簡稱:OU 字段

自簽名的https證書是不安全的

一、項目內的需求

我們做的app都是企業級的應用,而企業級的應用的下載需要遵循itms協議,itms協議下需要https鏈接,這就需要你的服務器支持https的協議,該協議需要申請SSL證書,我們測試時用的是自簽名的證書,而自簽名的證書本來就就存在不安全行,自從ios10.3更新以來即使安裝了自簽名的證書也報錯,說無法下載app,是因為蘋果阻止了不受信任的證書

二、解決方案

1、自簽名的證書,需要手動的為證書打開信任,通用->關於本機->證書信任設置->證書打開信任

2、申請可信任的證書像StartCom的證書,當然會很貴,關於ios中可用的受信任的根證書列表,可以參考蘋果的官方的文檔

https://support.apple.com/zh-cn/HT208125

三、自簽名的證書為什么是不安全的

1、自簽證書最容易受到SSL中間人攻擊

自簽證書是不會被瀏覽器所信任的證書,用戶在訪問自簽證書時,瀏覽器會警告用戶此證書不受信任,需要人工確認是否信任此證書。所有使用自簽證書的網站都明確地告訴用戶出現這種情況,用戶必須點信任並繼續瀏覽!這就給中間人攻擊造成了可之機。

2、自簽證書支持不安全的SSL通信重新協商機制

幾乎所有使用自簽SSL證書的服務器都存在不安全的SSL通信重新協商安全漏洞,這是SSL協議的安全漏洞,由於自簽證書系統並沒有跟蹤最新的技術而沒有及時補漏!此漏洞會被黑客利用而截獲用戶的加密信息,如銀行賬戶和密碼等,非常危險,一定要及時修補。

3、自簽證書使用不安全的1024位非對稱密鑰對

而目前幾乎所有自簽證書都是1024位,自簽根證書也都是1024位,當然都是不安全的。還是那句話:由於部署自簽SSL證書而無法獲得專業SSL證書提供商的專業指導,根本就不知道1024位已經不安全了

4、自簽證書證書有效期太長

自簽證書中還有一個普遍的問題是證書有效期太長,短則5年,長則20年、30年的都有,並且還都是使用不安全1024位加密算法。可能是自簽證書制作時反正又不要錢,就多發幾年吧,而根本不知道PKI技術標准中為何要限制證書有效期的基本原理是:有效期越長,就越有可能被黑客破解,因為他有足夠長的時間(20年)來破解你的加密。

 

 

 

 

自簽名的證書無法被吊銷,CA簽名的證書可以被吊銷 能不能吊銷證書的區別在於,如果你的私鑰被黑客獲取,如果證書不能被吊銷,則黑客可以偽裝成你與用戶進行通信

 

 

 

如果你的規划需要創建多個證書,那么使用私有CA的方法比較合適,因為只要給所有的客戶端都安裝了CA的證書,那么以該證書簽名過的證書,客戶端都是信任的,也就是安裝一次就夠了

 

如果你直接用自簽名證書,你需要給所有的客戶端安裝該證書才會被信任,如果你需要第二個證書,則還的挨個給所有的客戶端安裝證書2才會被信任。

 

 

 

 

 

 

 

 

 

證書類型:

 

x509的證書編碼格式有兩種

 

1.PEM( Privacy-enhanced Electronic Mail) 是明文格式的  以 -----BEGIN CERTIFICATE-----開頭,已-----END CERTIFICATE-----結尾,中間是經過base64編碼的內容,apache需要的證書就是這類編碼的證書 查看這類證書的信息的命令為 :openssl x509 -noout -text -in server.pem

 

其實PEM就是把DER的內容進行了一次base64編碼

 

2.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證書和一個被密碼保護的私鑰


生成證書簽名請求  用openssl  req
給證書簽名 用 openssl x509
自簽名證書的Issuer和Subject是一樣的
證書的三個作用   加密通信和身份驗證(驗證對方確實是對方聲稱的對象)和數據完整性(無法被修改,修改了會被知)

 



 

一. 自簽名證書:

 

1.生成服務器私鑰  openssl genrsa -des3 -out server.key 4096

 

2.生成證書簽名請求  openssl req -new -key server.key -out server.csr  這里要填一大堆東西 保證Common name跟你的域名或者IP相同

 

3.對上一步生成的證書簽名請求進行簽名  openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt 

 

4.生成無需密碼的服務器私鑰 ,如果私鑰是有密碼的,則每次啟動web服務器都會要求你輸入密碼

 

 openssl rsa -in server.key -out server.key.insecure
mv server.key server.key.secure
mv server.key.insecure server.key

 

 確保你的私鑰的安全性  因為該證書無法被吊銷  chmod 999  server.key.secure  server.key

 

還有一個簡單的方法一步創建私鑰和自簽名請求

 

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout apache.key -out apache.crt
這里的apache.key為私鑰  apache.crt為證書

 

 

 

二.創建私有CA,然后用該CA給證書進行簽名

 

1.創建CA私鑰  openssl genrsa -des3 -out ca.key 4096

 

2.生成CA的自簽名證書   openssl req -new -x509 -days 365 -key ca.key -out ca.crt   其實CA證書就是一個自簽名證書

 

3.生成服務端私鑰  openssl genrsa -des3 -out server.key 4096

 

4.需要簽名的對象(服務端)生成證書簽名請求  openssl req -new -key server.key -out server.csr 

 

這里注意證書簽名請求當中的Common Name必須區別與CA的證書里面的Common Name

 

5.用步驟2創建的CA證書給步驟4生成的簽名請求進行簽名

 

openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

 

 

 

 

 

三.查看信息

 

 openssl rsa -noout -text -in server.key 查看私鑰信息

 

openssl req -noout -text -in server.csr 查看簽名請求信息

 

openssl rsa -noout -text -in ca.key   查看ca的私鑰信息

 

openssl x509 -noout -text -in ca.crt  查看證書信息

 

openssl crl -text -in   xx.crl  查看一個證書吊銷列表信息

 

openssl x509 -purpose -in cacert.pem  查看一個證書的額外信息

 

openssl rsa -in key.pem -pubout -out pubkey.pem 從一個私鑰里面提取出公鑰

 

openssl rsa -noout -text -pubin -in apache.pub  查看一個公鑰的信息

 

openssl verify  -CAfile  指定CA文件路徑    apache.crt  驗證一個證書是否是某一個CA簽發

 

 openssl s_client -connect 192.168.20.51:443  模擬一個ssl客戶端訪問ssl服務器  如果服務端要求客戶端提供證書  則在加上 -cert 和-key參數 比如 openssl s_client -connect 192.168.20.51:443 -cert client.crt  -key client.key 

 

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys  從p12文件里面提取證書openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes  從p12文件里面提取私鑰

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM