Apache的SSL配置(2)

項目中有多個應用需要發佈,按照以前的想法,就準備配置多個虛擬主機,實在是讓人見笑了,做事情還真不能想當然,查了一些資料,現在的做法是針對某類文件或者某個文件,當用戶訪問這些資源得時候,要求用戶出示證書,如在網銀專業版登錄的時候要求用戶出示證書,而大衆版的時候就沒有這個要求,因爲大衆版客戶開戶的時候根本就不要求辦理證書,同時只提供一些查詢類的交易,通過SSL連接足夠。

下面是使用到的一些資料的彙總,後面跟上了自己的Apache配置。

http://www.infosecurity.org.cn/forum/read.php?fid=10&tid=31&fpage=1

http://www.kreny.com/doc/apache2.0/urlmapping.html

http://developer.ccidnet.com/pub/article/c302_a230585_p1.html


修改httpd.conf
  cd ..
  vi httpd.conf
 
修改ServerName,爲不設也可以,不過會出現警告
 
SSLCertificateFile修改爲/usr/local/apache/conf/ssl.crt/server.crt
 
SSLCertificateKeyFile修改爲/usr/local/apache/conf/ssl.key/server.key
  #
這是最基本的設置了,先用用試試看吧.
啓動服務
  /sbin/service iptables stop  
這是要關掉防火牆了,呵呵我也不知道這樣安全不安全,不過要是不關掉的話客戶端將無法訪問
  /usr/local/apache/bin/apachectl startssl
十一 從客戶端測試
從局域網找個windows電腦(LINUX也行)輸入https://ip

此時將會出現一個對話框,一般第二個是對,畢竟時間都是有效的嘛.第三個是歎號那是因爲訪問站點與證書通用名不匹配,這需要在用openssl生成apache服務器證書時將通用名設定爲ip,第一個歎號是因爲沒有安裝CA根證書,這時將/CAroot/cacert.pem拷到客戶機安裝就可以了,重新打開瀏覽器輸入https://ip,怎麼什麼反應也沒有就進去了呢,呵呵,其實已經對服務器進行認真了,這和http://ip有本質區別.
十二 配置更多的SSL應用(這個在/usr/local/apache/htdocs/manual/mod/mod_ssl有詳細文檔)
1,實現對客戶端的認證
修改httpd.conf
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile /CAroot/cacert.pem
現在在客戶端輸入https://ip ,將要求出示證書

2:某些頁面只允許持有證書的客戶訪問,其他頁面允許所有人訪問
修改httpd.conf,當然需要先作一些頁面的準備,/usr/local/apache/htdocs/secure是我們放只允許有證書訪問的目錄
SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt
<Location /secure>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>
3.某些頁面只允許持有某種特定證書內容的客戶訪問,其它頁面允許所有人訪問
在這裏我假設允許我們局域網的人訪問
SSLVerifyClient     none
<Directory /usr/local/apache/htdocs/secure/area>
SSLVerifyClient     require
SSLVerifyDepth     5
SSLCACertificateFile conf/ssl.crt/ca.crt
SSLCACertificatePath conf/ssl.crt
SSLOptions       +FakeBasicAuth
SSLRequireSSL
SSLRequire       %{SSL_CLIENT_S_DN_O} eq "ATR" and /
              %{SSL_CLIENT_S_DN_OU} in {"305", "307", "309","313"}
</Directory>
4.允許局域網用戶使用http訪問局域網站點,但是需要外網用戶使用強加密的https訪問.
 
假設局域網用戶ip192.160.1.0-24.
下面的修改要放在HTTPS虛擬主機的外面,這樣就可以同時適用於httphttps訪問
SSLCACertificateFile conf/ssl.crt/company-ca.crt
<Directory /usr/local/apache/htdocs>
#   Outside the subarea only Intranet access is granted
Order           deny,allow
Deny           from all
Allow           from 192.168.1.0/24
</Directory>
<Directory /usr/local/apache/htdocs/subarea>
#   Inside the subarea any Intranet access is allowed
#   but from the Internet only HTTPS + Strong-Cipher + Password
#   or the alternative HTTPS + Strong-Cipher + Client-Certificate
#   If HTTPS is used, make sure a strong cipher is used.
#   Additionally allow client certs as alternative to basic auth.
SSLVerifyClient     optional
SSLVerifyDepth     1
SSLOptions       +FakeBasicAuth +StrictRequire
SSLRequire       %{SSL_CIPHER_USEKEYSIZE} >= 128
#   Force clients from the Internet to use HTTPS
RewriteEngine     on
RewriteCond       %{REMOTE_ADDR} !^192/.168/.1/.[0-9]+$
RewriteCond       %{HTTPS} !=on
RewriteRule       .* - [F]
#   Allow Network Access and/or Basic Auth
Satisfy         any
#   Network Access Control
Order           deny,allow
Deny           from all
Allow           192.168.1.0/24
#   HTTP Basic Authentication
AuthType         basic
AuthName         "Protected Intranet Area"
AuthUserFile       conf/protected.passwd
Require         valid-user
</Directory>

有關SSL配置apache的指令(呵呵,/usr/local/apache/htdocs/manual/mod/mod_ssl中有更詳細的解釋)
1.SSLCACertificatePath
  :SSLCACertificatePath /to/CA/certificates
應用環境:server config ,virtual host
默認設置:none
該指令爲Certificate Authority證書文件指定一個目錄
2.SSLCACertificatefile
  :SSLCACertificatefile CA_certificate_filename
應用環境:server config ,virtual host
默認設置:none
該指令爲指定一個包含Certificate Authority證書的文件
3.SSLBanCipher
  :SSLBanCipher Cipher
應用環境:pre-directory config(.htaccess)
使用該指令可以禁止那些想使用cipher的用戶對Apache進行配置
4.SSLCacheServerPort
  :SSLCacheServerPort portfilename
應用環境:server config ,virtual host
該指令爲全程的SSL會話緩存服務器處理過程配置TCP/IP端口或UNIX domain socket
5.SSLCacheServerPort
  :SSLCacheServerPath filename
應用環境:server config ,virtual host
該指令爲全程的SSL會話緩存服務器的執行指令設置路徑.如果你已經使用APACI配置腳本將Apache安裝好了,那麼緩存執行指令的文件就保存在Apache安裝目錄的sbin子目錄中
6.SSLCertificateFile
  :SSLCertificateFile certificate_filename
應用環境:server config ,virtual host
該指令爲一個WEB站點上的主機指定證書文件名.如果爲某個虛擬主機提供SSL連通性,就需要爲該虛擬主機指定一個單獨的證書.
7.SSLCertificateKeyFile
  :SSLCertificateFile certificate_key_filename
應用環境:server config ,virtual host
該指令爲證書指定一個對應的私鑰文件
8 SSLEnable
  :SSLEnable
應用環境:server config ,virtual host
該指令用來啓動SSL,該指令的使用無需參數
9 SSLDisable
  :SSLDisable
應用環境:server config ,virtual host
該指令用來禁止SSL,該指令的使用無需參數
10 SSLFakeBasicAuth
  :SSLFakeBasicAuth
應用環境:server config ,virtual host
該指令主要將用戶的X509證書翻譯成一個用戶名,轉換的用戶名可用於驗證
11 SSLRequireCipher
  :SSLRequireCipher
應用環境:pre-directory config(.htaccess)
該指令爲請求密碼的pre-directory列表添加一個cipher.
12 SSLogFile
  :SSLogFile log_filename
應用環境:server config ,virtual host
該指令使得SSL連接信息寫入日誌文件中.
13 SSLRequireSSL
  :SSLRequireSSL
應用環境:pre-directory config file ,directory
對於一個未使用的SSL連接,該命令能夠禁用該連接,該指令的使用無需參數
14 SSLRequiredCiphers
  :SSLRequiredCiphers cipher1:cipher2:...
應用環境:server config ,virtual host,pre-directory config(.htaccess)
該指令指定一系列由冒號分隔的密碼
15 SSLSessionCacheTimeout
  :SSLSessionCacheTimeout seconds
應用環境:server config ,virtual host
該指令爲SSL會話設置緩存過期時間
16 SSLVerifyDepth
  :SSLVerifyDepth number
應用環境:server config ,virtual host
因爲一個CA證書能夠被另一個CA證書驗證,所以可以形成一個CA證書鏈.使用該指令可指定服務器驗證用戶證書時可以查找多少個CA證明.
17 SSLVerifyClient
  :SSLVerifyClient numeric-option
應用環境:server config ,virtual host
該指令可以用來決定服務器是否需要用戶證書.如果不需要用戶證書,將該指令設爲0,如果需要用戶證書,將該指令設爲2;如果用戶證書需要與否可選擇,則設置爲1.

窗體頂端

 

窗體底端

 

 

 

要在程序中寫重定向。

然後在443端口對就的虛擬主機裏用<Files>..</Files>將要出示證書的文件名寫在裏面。

 

今天在www.modssl.orgFAQ上看到可以利用mod_rewrite模塊實現
如下所示,把所有連接後面帶SSL的都重定向到https.
RewriteEngine on
RewriteRule   ^/(.*):SSL$   https://192.168.10.10/$1

 


自己在實際中的應用

1、在個人網銀或者企業網銀的首次登錄頁面需要讓用戶出示證書,可以將整個虛擬機設置爲不需要用戶出示證書,註釋掉SSLVerifyClient require

SSLVerifyDepth 1

可以通過兩個方式實現,將登錄頁面放置到一個特定的文件夾中,在虛擬主機中通過配置<Location /hzcb/logon>

    SSLVerifyClient require

    SSLVerifyDepth 1

</Location>

或者針對具體文件進行制定,使用FilesMatch或者Files都可以,推薦使用FilesMatch

<Files "/logon_pro.html">

    SSLVerifyClient require

    SSLVerifyDepth 1

</Files>

文件名以regulx的形式給定。參考http://httpd.apache.org/docs/2.0/mod/core.html

 

2、如果登錄的時候要求用戶出示證書,在服務器端收到的請求包頭中包含有證書信息,並且在後面的請求中都會有該信息。
3、如果使用SSL服務器,就都沒有這些麻煩了,可以要求SSL服務器將證書信息補充到URL上傳送到後臺。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章