ssl證書生成與驗證


  要做這件事情的起因在於,代碼的升級包放在一個https的服務器上,我們的設備要實現升級,則是通過wget 獲取https上的升級包,並且要實現驗證證書的功能,這樣可以防止設備被惡意篡改升級成其他文件包。

  起初,https的服務器都已經被搭建好了,可是驗證證書的過程一直不順利,現在把網絡上自己試驗成功方法總結如下,日后出現類似問題方便參考了。

  環境:https服務器,Ubuntu12.04+apache2+openssl

  首先,理解一下證書的類型。

  SSL證書包括:

  1,CA證書,也叫根證書或者中間級證書。如果是單向https認證的話,該證書是可選的。不安裝CA證書的話,瀏覽器默認是不安全的。

  2,服務器證書,必選項。通過key,證書請求文件csr,再通過CA證書簽名,生成服務器證書。

  3,客戶端證書,可選項。若有客戶端證書則是雙向https驗證。

  以上所有證書都可以自己生成。

 

  文件后綴

    linux系統是不以后綴名來判斷文件類型的,但是為了我們能夠更好地判斷文件用途,所以添加各種后綴。以下是約定成俗的后綴。

    *.key:密鑰文件,一般是SSL中的私鑰;

    *.csr:證書請求文件,里面包含公鑰和其他信息,通過簽名后就可以生成證書;

    *.crt, *.cert:證書文件,包含公鑰,簽名和其他需要認證的信息,比如主機名稱(IP)等。

    *.pem:里面一般包含私鑰和證書的信息。

 

  服務器證書的生成

  a)  生成服務器私鑰

     openssl genrsa -des3 -out server.key 1024

     輸入加密密碼,用 128 位 rsa 算法生成密鑰,得到 server.key 文件。

   b)  生成服務器證書請求( CSR )

     openssl req -new -key server.key -out server.csr

     CSR( Certificate Signing Request)是一個證書簽名請求,在申請證書之前,首先要在服務器上生成 CSR ,並將其提交給 CA 認證中心, CA 才能簽發 SSL 服務器證書。也可以認為, CSR 就是一個在服務器上生成的證書。

    在生成這個文件的過程中,有一點需要特別注意,Common Name 填入主機名(或者服務器IP)

  c)  自己生成服務器證書 

    如果不使用 CA 證書簽名的話,用如下方式生成: 

    openssl req -x509 -days 1024 -key server.key -in server.csr > server.crt 

    用服務器密鑰和證書請求生成證書 server.crt , -days 參數指明證書有效期,單位為天。商業上來說,服務器證書是由通過第三方機構頒發的,該證書由第三方認證機構頒發的。    

    如果使用 CA 證書簽名,用 openssl 提供的工具 CA.sh 生成服務器證書:

       mv server.csr newreq.pem

       ./CA.sh -sign

       mv newcert.pem server.crt

     簽名證書后,可通過如下命令可查看服務器證書的內容:

       openssl x509 -noout -text -in server.crt

     可通過如下命令驗證服務器證書:

       openssl verify -CAfile ca.crt server.crt 

   

  客戶證書的生成

   客戶證書是可選的。如果有客戶證書,就是雙向認證 HTTPS ,否則就是單向認證 HTTPS 。

   a)  生成客戶私鑰

     openssl genrsa -des3 -out client.key 1024

   b)  生成客戶證書簽名請求

     openssl req -new -key client.key -out client.csr

   c)  生成客戶證書(使用 CA 證書簽名)

     openssl ca -in client.csr -out client.crt

   d)  證書轉換成瀏覽器認識的格式

     openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx

 

  證書列表 

  如果使用雙向認證,就會有三個私鑰和三個證書。分別是 ca.key, ca.crt, server.key, server.crt, client.key, client.crt ,以及給瀏覽器的 client.pfx 。

   如果使用有 CA 證書的單向認證,證書和私鑰就是 ca.key, ca.crt, server.key, server.crt 。

   如果使用無 CA 證書的單向認證,證書和私鑰就是 server.key, server.crt 。

 

最后在fedora作為客戶端,wget 1.14通過命令

  wget --ca-certificate=server.crt https://+ip+file 成功獲取文件,證書驗證通過。


免責聲明!

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



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