1. 程式人生 > >ssl證書生成與驗證

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 成功獲取檔案,證書驗證通過。