公司裡負責的系統有Web Server Uses Plain Text Authentication Forms缺失,今天想說把它解決掉。原來覺得可能很簡單的,不過變成要改一些Code,特此記錄下來供以後與網友參考。
原來的環境是這樣,某個AP Server上面跑IIS(http and https),被nessus偵測出來某個AP的default.aspx,帳號密碼登入是用明碼傳送,可能會有資安風險。
Web Server Uses Plain Text Authentication Forms
Synopsis :
The remote web server might transmit credentials in cleartext.
Description :
The remote web server contains several HTML form fields containing
an input of type ‘password’ which transmit their information to
a remote web server in cleartext.
An attacker eavesdropping the traffic between web browser and
server may obtain logins and passwords of valid users.
Solution :
Make sure that every sensitive form transmits content over HTTPS.
Risk factor :
Medium / CVSS Base Score : 5.0
(CVSS2#AV:N/AC:L/Au:N/C:P/I:N/A:N)
Plugin output :
Page : /css/
Destination page : Default.aspx
Input name : Login1$Password
Nessus ID : 26194
因此就要去修正(不修正也不行阿),在網路上找了一下,就決定先把IIS的80 Port(http)先拿掉,都走443 Port (https)。找到這位大大寫的,就來實作一下,步驟如下:
- 先把原來的網站(通常是預設的網站那個)修改他的內容,把TCP連接埠改成81(或其他外面連不進來的Port,因為IIS一定要設定TCP連接埠,所以就設定成一個連不進來的Port),SSL連接埠部分填443。按確定以後重啟原來的網站(預設的網站),現在Port 80應該是不會通了,443那個應該會通(若不通應該是SSL設定問題,這邊不多贅述)。
- 接著下來開一個新的網站,讓他聽80 Port,再轉到443 Port上面。網站說明的地方打你想要的字串就可以。TCP連接埠用Port 80就好。主目錄部分隨便找一個就行(因為等一下我們會來設redirect),允許讀取就好(如果原來的網站有什麼,這邊就設什麼),完成網站設定的動作。
接下來對剛剛新設的網站做設定,到主目錄的地方,選擇某個URL位置的重新導向,在導向到的地方要轉的網址(https://…),根據需求勾選下面的選項:
- 上面所輸入的URL:就是直接轉址,如果有旗下的AP(如http://abc/ap),他也不會管,還是只有https://...。
- 輸入的URL下的目錄:如果你想要轉到轉址下的某個檔案或目錄,就用這個。
- 這個資源的永久重新導向:就是轉到妳的轉址,旗下自動對應轉址下的任何目錄(如http://abc/ap -> https://…/ap)
- 選完以後重啟這個網頁,就完成了轉址動作,測試一下看有沒有什麼問題。
在我測試的時候,發現原來連結報表伺服器的部份也死了。原因是因為我的報表伺服器也是在同一台,所以http沒了自然都不能用了(找不到檔案)。所以先把報表伺服器的設定先改一下,然後再看程式要改哪邊。
選擇Reporting Services組態,對報表伺服器虛擬目錄那邊做設定,勾選需要安全通訊端層(SSL)連接,需要用於有三個選項可以選:
- 1 - 連接:只有連接的時候使用SSL。
- 2 - 報表資料:在產生報表資料傳送時使用SSL。
- 3 - 所有SOAP API:全部使用SSL(網頁處理)。
憑證名稱部分,就打你IIS用的憑證註冊網址(如abc.com.tw),按套用就完成了。
基礎連接已關閉: 無法為SSL/TLS 安全通道建立信任關係
這個的原因是因為我們是一個憑證很多伺服器在用,但是在連接時會檢查這個憑證是否有問題,在瀏覽器瀏覽的時候可以按掉解決,這時候就不行了。再上網找解決方案,找到這個大大寫的方法,修改自己的程式。不過我是用VB.NET寫的,所以再找一下MSDN,提供解法如下。
1 | Public Shared Function ValidateCert(ByVal sender As Object, ByVal certificate As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean |
然後在進入報表之前做下面的 動作(每次登入只需做一次)即可。
1 | System.Net.ServicePointManager.ServerCertificateValidationCallback = New System.Net.Security.RemoteCertificateValidationCallback(AddressOf ValidateCert) |
其實就是避掉錯誤的回傳這樣,詳情請看MSDN相關函式介紹。
這樣就完成所有的設定了。