網際網路上通訊的安全是大家都很注重的,可是我們如何確認我們送出或是收到的資料是雙方身份安全無虞、而且內容未遭竄改的? 把資料加密就是一種很好的方式,而哪一種加密的方式是容易實作又可靠的呢?
首選就是 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 的部落格 。
系列文章
- Raspberry Pi 的實作 - 用 Nginx 架設網頁伺服器
- Raspberry Pi 的實作 - 產生一張自己核發的 SSL 憑證
- Raspberry Pi 的實作 - 在 Nginx 網頁伺服器上提供 PHP 的支援
參考資料
更新紀錄
- 2014/06/12 撰文。
- 2015/01/22 調整內容,更新版號從 1.0.1H 到 1.0.1L。
你好請問一下
回覆刪除server.crt與server.key這兩個檔案會放在哪裡
我不是很確定這個問題的意思。
刪除如果你問的是,它們被產生出來的時候,會放在哪裡?預設它們會在你當時執行指令的目錄下面。
以上面的步驟來說,我是在 root 的家目錄下執行,所以它們會被存在 /root 下面。
請問大大,產生之後要去哪裡設定SSL呢?我已經安裝nginx,php,mysql了
回覆刪除目前知道要去哪裡設定了,但是沒有pem檔...要自行產生一個嗎?
刪除