本文將採用開源碼OpenSSL套件來實作一個安全的SSL網站,以便簽發符合資安政策的數位憑證,並說明如何透過Let's Encrypt服務來取得免費且合法的數位憑證。
應用程式可以使用OpenSSL所提供的加解密函式進行安全通訊,避免相關資料被竊聽。一般來說,此套件可用在任何一種的網路服務,例如郵件伺服器、網站伺服器等等。而至今日,如果是使用開源碼的網站解決方案,其中的SSL安全網站伺服器絕大部分都是使用OpenSSL來實作完成。接著說明OpenSSL的使用(在此使用版本為1.0.1e),openssl語法如下:
其中,[標準命令]用來設定密碼演算法,產生相關的金鑰。[參數]的部分,則依各個標準命令的不同,而有不同的參數,通常是用來設定金鑰的一些常用屬性。接下來,就以OpenSSL來實作其工作流程。
對稱式密碼實作
首先說明對稱式密碼實作,以DES加解密演算法為例,如圖4所示。
|
▲圖4 對稱式密碼實作。 |
(1) 產生一個檔名為test.txt,內容為test的測試檔案。
(2) 針對此檔以des演算法加密,其中參數-e為encrypt
加密,-in則指定要加密的檔案,並將加密後的密文儲存至檔名為crytest.txt檔案內。在過程中,要求使用者設定一組密碼用來解密,加密完成後,從「cat encrytest.txt」即可發現其內容已是加密過後的資訊。
(3) 將以des演算法加密的檔案予以解密,並將解密後
的資料儲存至檔名為decrytest.txt的檔案內,同樣地,在解密過程中須輸入相同的密碼,才可解密。
(4) 驗證解密之後的檔案內容,是否已經正常完整的
解密。
非對稱式密碼實作
再以OpenSSL實作非對稱式密碼,以RSA演算法為例,如圖5所示。
|
▲圖5 非對稱式密碼實作。 |
(1) 以RSA演算法(參數為genrsa)產生一把長度為
2,048位元,檔名為private.pem的私鑰。
(2) 利用此私鑰,產生一把相對應的公鑰(檔名為
public.pem),以「ls *.pem」查看,會產生兩個金鑰檔案。
(3) 利用公鑰(-inkey public.pem)來對檔名為testrsa.
txt的檔案加密(-encrypt)並將加密過後的檔案,儲存到檔名為encrytestrsa.txt。
(4) 利用相對應的私鑰(-inkey public.pem)來對
encrytestrsa.txt加以解密(-decrypt),並將解密過後的檔案,放置於decrytestrsa.txt,最後再利用「cat decrytestrsa.txt」查看是否已正常的解密。
介紹完以OpenSSL實作密碼系統後,可以知道運用密碼系統能夠保證資料傳輸時的機密性和完整性要求。但對於驗證商家身分卻無能為力,也因此而有PKI(Public Key Infrastructure,公開金鑰基礎建設)機制來解決驗證身分的問題。在PKI驗證成功後,就會發給伺服器一個證明身分的數位憑證來證明伺服器的身分。
什麼是PKI(公開金鑰基礎建設)
首先說明SSL網站的運作過程,如圖6所示,相關流程說明如下:
|
▲圖6 SSL網站的運作流程。 |
(1) 使用者端送出Client Hello訊息,將瀏覽器所支援
的SSL版本、加密演算法等相關資訊發送給SSL網站伺服器。
(2) SSL伺服器收到Client Hello訊息後,確定本次通
訊採用的SSL版本和加密套件後,利用Server Hello訊息將SSL伺服器上的數位憑證的資訊回覆給瀏覽器。在此階段中會驗證數位憑證上相關資訊,例如數位憑證的有效期限、是否為公正的第三方所簽署。此時瀏覽器會驗證數位憑證是否安全,一旦發現有疑慮,就會警示使用者,如圖7所示為連結到自行簽署數位憑證的網站所產生的警示畫面。
|
▲圖7 連結到自行簽署數位憑證的網站所產生的警示畫面。 |
(3) 在確認數位憑證後,瀏覽器至公開地方取得SSL
網站伺服器公開公鑰(Public Key),並利用此公鑰加密本次連線所要使用的金鑰(稱為Session Key)。
(4) 最後,SSL網站伺服器端取得加密過後的Session
Key後,即以本身的網站伺服器私鑰(Private Key)來解密,並取得相關的Session Key後,接下來雙方的通訊即利用此Session Key進行加解密。
而在上述流程中,僅是利用OpenSSL程式庫來實現資料傳輸的加解密功能以確保資料的安全。但在現實運用上,還會遇到下列的問題:
1. 數位憑證是代表網站伺服器的身分,因此在申請時
需要一套機制來確認申請者的真實身分,並在確認完後再發給相關數位憑證。
2. 數位憑證該如何管理?可能會有廢止、過期等相關
管理問題。
PKI的出現就是為了解決上述的問題,簡而言之,PKI就是一套維護數位憑證的機制(這有點像是現實生活中的戶政單位),整體架構圖如圖8所示。
|
▲圖8 公開金鑰基礎建設(PKI)運作流程。 |
其中,RA(Registration Authority,註冊中心)主要目的在於認證申請者的身分,就如同在現實生活中,有些銀行業務需要臨櫃申請(行員會審核是否為本人),在確認身分之後,即會產生該申請者所屬的公鑰和相對應的私鑰,私鑰須由申請者自行妥善保管。
接著,RA會產生一組憑證請求檔(C.S.R)連同申請者的公鑰送往憑證管理中心(Certificate Authority,CA),在CA確認完成後,即會簽署數位憑證(憑證格式為X.509),並且將相關的憑證送往目錄服務(以下簡稱DS)系統管理。接下來,說明數位憑證所使用的格式X.509。