Raspberry Pi 的實作 - 產生一張自己核發的 SSL 憑證

by 6月 12, 2014 4 意見        

網際網路上通訊的安全是大家都很注重的,可是我們如何確認我們送出或是收到的資料是雙方身份安全無虞、而且內容未遭竄改的? 把資料加密就是一種很好的方式,而哪一種加密的方式是容易實作又可靠的呢?

首選就是 SSL (Secure Sockets Layer),運作原理請參閱 Symantec 的 SSL 簡介,在 Linux 的環境裡,我們可以用 OpenSSL 這個套件來完成,它的官方網站在 https://www.openssl.org/,支援 SSL v2、SSL v3 及 TLS v1 三種協定。

最後更新日期 - 2015/01/22


事前準備

  • Raspberry Pi Type Type A / A+ / B / B+。
  • Raspbian 作業系統。

開始安裝


Raspbian 預設就已經安裝好 OpenSSL。
sudo apt-get -y install openssl

而目前最新的版號是 1.0.1L, 可從 OpenSSL 官網下載
wget https://www.openssl.org/source/openssl-1.0.1l.tar.gz

解壓縮主程式
tar zxvf openssl-1.0.1l.tar.gz

開始編譯及安裝。
cd openssl-1.0.1l

./config

make clean && make depend

make && make test

sudo make install

安裝完畢,系統預設的 OpenSSL 1.0.1e 就成功升級成 1.0.1L 了。


產生憑證


為了安全起見,我們切換成 root 管理者的身份來產生憑證。
sudo -i

我們將產生的是公鑰以 RSA 演算法、長度 1024 bits 加密,私鑰以 DES3 演算法加密,輸出的私鑰檔案名稱是 server.key。

而官方建議以 genpkey 參數替代常見的 genrsa 參數。
openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:1024 -des3 -out server.key.private

系統會要求一組長度 4 到 1024 個字元的密碼來進行加密,若是長度不足 4 個字元或是重覆驗證錯誤,則會出現 Error writing key 的錯誤訊息。

以私鑰來製作一張 SSL 憑證申請書。
openssl req -new -key server.key.private -out server.req

接著輸入憑證的相關內容。
  • Country Name:國碼,長度兩個字元。
  • State or Province Name:省份或是國家全名。
  • Locality Name:城市。
  • Organization Name:公司或組織名稱。
  • Organization Unit Name:部門或單位名稱。
  • Common Name:管理人員姓名。
  • Email Address:管理人員的 E-Mail。

至於下列兩個額外的欄位就直接按 ENTER 跳過即可。
  • A challenge password
  • An optional company name

若私鑰的密碼輸入錯誤會出現 result too small 之類的錯誤訊息。

產生與私鑰相對應的公鑰。
openssl rsa -in server.key.private -out server.key

若私鑰的密碼輸入錯誤會出現 result too small 的錯誤訊息。

自己核發自己的憑證,為了避免憑證太早過期,這裡設定有效期限為 1825天,也就是 5 年。
openssl x509 -req -days 1825 -in server.req -signkey server.key -out server.crt

確認一下所有產生出來的檔案。
ls -l

server.crt:符合 X.509 標準的 SSL 憑證檔
server.key:RSA 演算法加密的公鑰
server.key.private:DES3 演算法加密的私鑰
server.req:SSL 憑證的申請書

這時候我們就擁有了一張自己的 SSL 憑證了。




注意事項


在 2014/04/08 爆發出一個代號為 heartbleed,編號是 CVE-2014-0160 的大漏洞,詳情可參閱 ITHome 的文章,有問題的版號從 1.0.1 到 1.0.1f 以及 1.0.2-beta~1.0.2-beta1必須馬上把 SSL 憑證換掉並將 OpenSSL 更換到 1.0.1g 以上的版本,而自我檢查的方式及緊急應變措施請參閱 DEVCORE 的部落格


系列文章


參考資料


更新紀錄

  • 2014/06/12 撰文。
  • 2015/01/22 調整內容,更新版號從 1.0.1H 到 1.0.1L。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

4 則留言 :

  1. 你好請問一下
    server.crt與server.key這兩個檔案會放在哪裡

    回覆刪除
    回覆
    1. 我不是很確定這個問題的意思。
      如果你問的是,它們被產生出來的時候,會放在哪裡?預設它們會在你當時執行指令的目錄下面。
      以上面的步驟來說,我是在 root 的家目錄下執行,所以它們會被存在 /root 下面。

      刪除
  2. 請問大大,產生之後要去哪裡設定SSL呢?我已經安裝nginx,php,mysql了

    回覆刪除
    回覆
    1. 目前知道要去哪裡設定了,但是沒有pem檔...要自行產生一個嗎?

      刪除