Ceph OpenSSL

Ceph OpenSSL


1. SSL介紹

SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是爲網絡通訊提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網絡鏈接進行加密。Secure Socket Layer,爲Netscape所研發,用以保障在Internet上數據傳輸之安全,利用數據加密(Encryption)技術,可確保數據在網絡上之傳輸過程當中不會被截取及竊聽。通常通用之規格爲40 bit之安全標準,美國則已推出128 bit之更高安全標準,但限制出境。只要3.0版本以上之I.E.或Netscape瀏覽器便可支持SSL。python

SSL協議提供的安全通道有如下三個特性:web

  • 機密性:SSL協議使用密鑰加密通訊數據。
  • 可靠性:服務器和客戶都會被認證,客戶的認證是可選的。
  • 完整性:SSL協議會對傳送的數據進行完整性檢查。

1.1 ssl證書分類

SSL證書依據功能和品牌不一樣分類有所不一樣,但SSL證書做爲國際通用的產品,最爲重要的即是產品兼容性(即證書根預埋技術),由於他解決了網民登陸網站的信任問題,網民能夠經過SSL證書輕鬆識別網站的真實身份。SSL證書分爲以下種類:算法

  • 擴展驗證型(EV)SSL證書
  • 組織驗證型(OV)SSL證書
  • 域名驗證型(DV)SSL證書

上述三種證書存在一些差異,這裏進行簡單敘述:瀏覽器

  • DV和OV型證書最大的差異是:DV型證書不包含企業名稱信息;而OV型證書包含企業名稱信息。
  • OV型和EV型證書,都包含了企業名稱等信息,但EV證書由於其採用了更加嚴格的認證標準,瀏覽器對EV證書更加「信任」,當瀏覽器訪問到EV證書時,能夠在地址欄顯示出公司名稱,並將地址欄變成綠色。
  • 三種SSL證書的價格通常按照EV,OV,DV逐個遞減。

2. HTTPS介紹

HTTPS(Hypertext Transfer Protocol Secure)安全超文本傳輸協議。它是由Netscape開發並內置於其瀏覽器中,用於對數據進行壓縮和解壓操做,並返回網絡上傳送回的結果。HTTPS實際上應用了Netscape的徹底套接字層(SSL)做爲HTTP應用層的子層。(HTTPS使用端口443,而不是象HTTP那樣使用端口80來和TCP/IP進行通訊。)SSL使用40 位關鍵字做爲RC4流加密算法,這對於商業信息的加密是合適的。https是以安全爲目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,https的安全基礎是SSL。安全

3. Civetweb配置SSL

3.1 前提

操做前須要建立桶bucket1,並將權限設置成公開訪問,爲了驗證的直觀性,建議同時上傳多個對象,如obj1,obj2...而且將對象的權限也設置成公開訪問,這樣便於後續採用瀏覽器進行訪問。服務器

3.2 建立一個自簽名的認證

首先須要利用openssl生成根證書,之後的服務器端證書或者客戶端證書都用他來簽發,能夠創建多個根證書,就像對應不一樣的公司同樣。網絡

#生成根證書的私鑰,參數des3是加密算法
openssl genrsa -des3 -out server.key 1024
	
#生成服務器端證書籤名請求文件(csr文件),利用私鑰生成一個根證書的申請,通常證書的申請格式都是csr。因此私鑰和csr通常須要保存好
openssl req -new -key server.key -out server.csr	

cp server.key server.key.orig

#去除密鑰文件的保護密碼,每次讀取key文件時能夠不須要口令
openssl rsa -in server.key.orig -out server.key	

#自簽名,有效期10年
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt	

cp server.crt server.pem

cat server.key >> server.pem

注:在作第二步時,存在common name(CN)選項的設置,爲了與AWS S3的域名訪問規則一致,能夠設置成*.exampletest.com,其餘的選項可隨意。frontend

3.3 使用以下軟鏈接

須要使用軟鏈接,不然會出錯,可在log文件中查看出錯信息。測試

ln -s /lib64/libssl.so.1.0.1e /usr/lib64/libssl.so
ln -s /lib64/libcrypto.so.1.0.1e /usr/lib64/libcrypto.so

3.4 配置端口信息

這裏須要在ceph.conf文件中配置rgw_dns_namergw_frontends兩個參數信息。網站

[client.rgw.rgw1]
host = ceph1
rgw_dns_name = exampletest.com

rgw_frontends = "civetweb port=443s ssl_certificate=/etc/ceph/private/server.pem"

注:在rgw_frontends參數中須要配置3.1節中生成的ssl證書server.pem的路徑。

3.5 加入域名

在rgw實例所在的主機的etc/hosts下加入如下域名映射:

192.168.141.142 bucket1.exampletest.com

4. 訪問驗證

4.1 網頁經過https訪問域名

在用瀏覽器訪問的主機的hosts文件下添加:

192.168.141.142 bucket1.exampletest.com

下面對網站的訪問以IE瀏覽器爲例

  1. 無證書訪問

    瀏覽器中直接輸入網址https://bucket1.exampletest.com,能夠正確訪問,而且列出桶bucket1中內容,可是地址欄會提示證書錯誤的字樣,這是因爲未導入證書所致。

  2. 有證書訪問

    首先導入證書。

    瀏覽器地址欄輸入網址https://bucket1.exampletest.com 時會出現鎖形標誌,表示安全訪問連接,而且可以正確列出桶bucket1中的內容。

4.2 經過sdk訪問

爲方便測試,這裏的證書是自簽名的,不是機構頒發。因此在sdk中須要經過參數設置來繞過證書的檢查。這裏以python爲例,將與使用http訪問方式不一樣的兩處地方單獨作了說明,以下:

url = 'https://192.168.141.142' 

s3 = boto3.client('s3',
                  verify=False, #只須要將此參數設置成False
                  endpoint_url=url,
                  aws_access_key_id=access_key,
                  aws_secret_access_key=secret_key
                  )

經過上述修改後就能夠正常操做。

相關文章
相關標籤/搜索