使用http(超文字傳輸)協議訪問網際網路上的資料是沒有經過加密的。也就是說,任何人都可以通過適當的工具攔截或者監聽到在網路上傳輸的資料流。但是有時候,我們需要在網路上傳輸一些安全性或者私秘性的資料,譬如:包含信用卡及商品資訊的電子訂單。這個時候,如果仍然使用http協議,勢必會面臨非常大的風險!相信沒有人能接受自己的信用卡號在網際網路上裸奔。
https(超文字傳輸安全)協議無疑可以有效的解決這一問題。所謂https,其實就是http和ssl/tls的組合,用以提供加密通訊及對網路伺服器的身份鑑定。https的主要思想是在不安全的網路上建立一安全通道,防止黑客的竊聽和攻擊。
ssl(安全套接層)可以用來對web伺服器和客戶端之間的資料流進行加密。
ssl利用非對稱密碼技術進行資料加密。加密過程中使用到兩個秘鑰:乙個公鑰和乙個與之對應的私鑰。使用公鑰加密的資料,只能用與之對應的私鑰解密;而使用私鑰加密的資料,也只能用與之對應的公鑰解密。因此,如果在網路上傳輸的訊息或資料流是被伺服器的私鑰加密的,則只能使用與其對應的公鑰解密,從而可以保證客戶端與與伺服器之間的資料安全。
在https的傳輸過程中,有乙個非常關鍵的角色——數字證書,那什麼是數字證書?又有什麼作用呢?
所謂數字證書,是一種用於電腦的身份識別機制。由數字證書頒發機構(ca)對使用私鑰建立的簽名請求檔案做的簽名(蓋章),表示ca結構對證書持有者的認可。數字證書擁有以下幾個優點:
使用數字證書能夠提高使用者的可信度
數字證書中的公鑰,能夠與服務端的私鑰配對使用,實現資料傳輸過程中的加密和解密
在證認使用者身份期間,使用者的敏感個人資料並不會被傳輸至證書持有者的網路系統上
x.509證書包含三個檔案:key,csr,crt。
key是伺服器上的私鑰檔案,用於對傳送給客戶端資料的加密,以及對從客戶端接收到資料的解密
csr是證書簽名請求檔案,用於提交給證書頒發機構(ca)對證書簽名
crt是由證書頒發機構(ca)簽名後的證書,或者是開發者自簽名的證書,包含證書持有人的資訊,持有人的公鑰,以及簽署者的簽名等資訊
備註:在密碼學中,x.509是乙個標準,規範了公開秘鑰認證、證書吊銷列表、授權憑證、憑證路徑驗證演算法等。
注意:以下步驟僅用於配置內部使用或測試需要的ssl證書。
使用openssl工具生成乙個rsa私鑰
$ openssl genrsa -des3 -out server.key 2048
說明:生成rsa私鑰,des3演算法,2048位強度,server.key是秘鑰檔名。
注意:生成私鑰,需要提供乙個至少4位的密碼。
生成私鑰之後,便可以建立csr檔案了。
此時可以有兩種選擇。理想情況下,可以將證書傳送給證書頒發機構(ca),ca驗證過請求者的身份之後,會出具簽名證書(很貴)。另外,如果只是內部或者測試需求,也可以使用openssl實現自簽名,具體操作如下:
$ openssl req -new -key server.key -out server.csr
說明:需要依次輸入國家,地區,城市,組織,組織單位,common name和email。其中common name,可以寫自己的名字或者網域名稱,如果要支援https,common name應該與網域名稱保持一致,否則會引起瀏覽器警告。
country name (2 letter code) [au]:cn
state or province name (full name) [some-state]:beijing
locality name (eg, city) :beijing
organization name (eg, company) [internet widgits pty ltd]:joyios
organizational unit name (eg, section) :info technology
common name (e.g. server fqdn or your name) :demo.joyios.com
email address :[email protected]
在第1步建立私鑰的過程中,由於必須要指定乙個密碼。而這個密碼會帶來乙個***,那就是在每次apache啟動web伺服器時,都會要求輸入密碼,這顯然非常不方便。要刪除私鑰中的密碼,操作如下:
$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key
如果你不想花錢讓ca簽名,或者只是測試ssl的具體實現。那麼,現在便可以著手生成乙個自簽名的證書了。
需要注意的是,在使用自簽名的臨時證書時,瀏覽器會提示證書的頒發機構是未知的。
$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
說明:crt上有證書持有人的資訊,持有人的公鑰,以及簽署者的簽名等資訊。當使用者安裝了證書之後,便意味著信任了這份證書,同時擁有了其中的公鑰。證書上會說明用途,例如伺服器認證,客戶端認證,或者簽署其他證書。當系統收到乙份新的證書的時候,證書會說明,是由誰簽署的。如果這個簽署者確實可以簽署其他證書,並且收到證書上的簽名和簽署者的公鑰可以對上的時候,系統就自動信任新的證書。
將私鑰和證書檔案複製到apache的配置目錄下即可。
如何建立乙個自簽名的SSL證書(X509)
使用http 超文字傳輸 協議訪問網際網路上的資料是沒有經過加密的。也就是說,任何人都可以通過適當的工具攔截或者監聽到在網路上傳輸的資料流。但是有時候,我們需要在網路上傳輸一些安全性或者私秘性的資料,譬如 包含信用卡及商品資訊的電子訂單。這個時候,如果仍然使用http協議,勢必會面臨非常大的風險!相...
如何快速建立自簽名證書
在windows中有時候e些服務需要配置證書。這時候就迫切需要一張證書來配置服務。對於測試環境,建立ca過於繁瑣,使用openssl又要去找安裝包很不方便,因為官方沒有發布安裝包需要自己編譯或者找三方編譯的包。現在windows的powechuhell終於可以方便的建立自簽發的證書了。命令如下 ne...
建立並部署自簽名的 SSL 證書到 Nginx
自簽名的 ssl 證書 self signed ssl certificate 就是未經過權威第三方認證的 ssl 證書,常常用作測試 https 連線之用。當使用者訪問使用這種 ssl 證書的 時,往往會被提示 該 的 ssl 證書未被認證!使用 cloudflare 的 cdn 加速可以解決這個...