由於ssl、http、apache三者共同對請求進行處理,這使得在支援ssl的web伺服器上實現特殊的安全制約變得不那麼簡單。本節介紹了普通情況下的解決方案,作為找出最終方案的第一步。採用這些方案以前,先要盡量地去理解,不了解其限制和相關性就貿然使用是最糟糕的了。
可以這樣建立乙個僅使用sslv2協議及其密碼演算法的伺服器:
sslprotocol -all +sslv2
sslciphersuite sslv2:+high:+medium:+low:+exp
如下設定為僅使用最強的七種密碼演算法:
sslprotocol all
sslciphersuite high:medium
# 允許在初始握手階段使用所有的密碼,以允許對外伺服器通過sgc功能提公升密碼組
sslciphersuite all:!adh:rc4+rsa:+high:+medium:+low:+sslv2:+exp:+enull
# 但是最終會拒絕所有沒有提公升密碼組的瀏覽器
sslrequire % >= 128
顯然,不能使用伺服器全域性設定sslciphersuite
,它會限制密碼為強型別。但是,mod_ssl允許重配置針對目錄的密碼組,並自動進行乙個帶有服重新配置的ssl引數的重協商。因此,其解決方案成了:
# 在一般情況下的處理是寬鬆的
sslciphersuite all:!adh:rc4+rsa:+high:+medium:+low:+sslv2:+exp:+enull
# 但對於 https://hostname/strong/area/ 及其以下的內容要求高強度密碼
sslciphersuite high:medium
如果你了解你的使用者群體(比如:乙個封閉的使用者組),正如在乙個intranet中,則可以使用一般的證書認證。所有要做的事情只是,建立由你自己的ca證書簽發的客戶證書ca.crt
,並依此證書校驗客戶。
# 要求客戶端必須擁有由我們自己的ca(其證書是ca.crt)直接簽名的證書
sslverifyclient require
sslverifydepth 1
sslcacertificatefile conf/ssl.crt/ca.crt
這又要用到mod_ssl
提供的針對目錄的重配置功能:
sslverifyclient none
sslcacertificatefile conf/ssl.crt/ca.crt
sslverifyclient require
sslverifydepth 1
其關鍵在於對客戶證書的各個組成部分進行驗證,一般就是指驗證 distinguished name (dn) 的全部或部分。有基於mod_auth_basic
和基於sslrequire
型別的兩種方法以驗證。第一種方法適合用於客戶完全屬於不同型別,並為所有客戶建立了密碼資料庫的情形;第二種方法適用於客戶都屬於乙個被編碼寫入dn的公共分級的一部分的情形,因為匹配客戶會更容易。
第一種方法:
第二種方法:
sslverifyclient none假設intranet客戶的ip位址是192.160.1.0/24,intranet站點子區域的url是sslverifyclient require
sslverifydepth 5
sslcacertificatefile conf/ssl.crt/ca.crt
sslcacertificatepath conf/ssl.crt
ssloptions +fakebasicauth
sslrequiressl
sslrequire % eq "snake oil, ltd." \
and % in
/subarea
,則可以在https虛擬主機以外這樣配置(以同時作用於https和http):
sslcacertificatefile conf/ssl.crt/company-ca.crt# subarea以外的區域只允許來自intranet的訪問
order deny,allow
deny from all
allow from 192.168.1.0/24
# 在subarea以內,允許所有來自intranet的訪問,
# 但對來自internet的訪問,僅允許https+strong-cipher+password
# 或者https+strong-cipher+client-certificate
# 如果使用了https,則確保使用高強度加密
# 同時允許客戶以基本認證的形式認證
sslverifyclient optional
sslverifydepth 1
ssloptions +fakebasicauth +strictrequire
sslrequire % >= 128
# 強制來自internet的客戶使用https
rewriteengine on
rewritecond % !^192\.168\.1\.[0-9]+$
rewritecond % !=on
rewriterule .* - [f]
# 允許網路訪問和基本認證
satisfy any
# 控制網路訪問
order deny,allow
deny from all
allow 192.168.1.0/24
# http基本認證
authtype basic
authname "protected intranet area"
authbasicprovider file
authuserfile conf/protected.passwd
require valid-user
高強度間歇訓練 HIIT
大家都知道身體健康很重要,但如果每天只有45分鐘,可試試下面這種叫hiit high intensity interval training 的方法 首先跑步熱身15 25分鐘 接著做高強度的帶氧運動,每輪45秒,然後休息30 45秒,總共做8 10個迴圈 最後,從頭到足,做一些拉伸運動結束,減少肌...
安卓高強度本地資料加密指北
不想寫so而又想加密本地資料有一定安全強度。對於對稱加密,aes作為des的公升級版,安全性得到提公升,是現在本地加密的主流。本文給出aes的最簡實踐原始碼。做這個的起因是因為東家的加密方法是使用so庫,優點是效能過得去,不依賴安卓版本,不用頻繁改動,但是缺點就是秘鑰儲存在本地,存在本地的內容即使扔...
加密狗原理 高強度加密 程式加密技巧
加密狗原理,加密狗加密的基本原理 本文將介紹軟體加密加密狗原理,加密狗加密的基本原理的一些程式設計技巧,以及軟體開發者將如何編寫安全可靠 的 如何對付各種各樣的加密狗破解,編寫加密程式時應該盡量避免的一 些問題等等。加密狗加密的基本原理 開發商程式通過呼叫硬體加密狗的介面模組對硬體加密狗操作,硬體加...