作者retsamsu (haha)
看板Visual_Basic
标题[.NET] IIS强迫跑SSL模式与SQL 2005 Reporting Services over SSL
时间Fri Dec 18 13:58:34 2009
好读网志版:
http://blog.xuite.net/retsamsu/diary/29392339
公司里负责的系统有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),按套用就完成了。
来到AP系统看看,发现错误又多了一个。
基础连接已关闭: 无法为SSL/TLS 安全通道建立信任关系
这个的原因是因为我们是一个凭证很多伺服器在用,但是在连接时会检查这个凭证是否
有问题,在浏览器浏览的时候可以按掉解决,这时候就不行了。再上网找解决方案,找
到这个大大写的方法,修改自己的程式。不过我是用VB.NET写的,所以再找一下MSDN,
提供解法如下。
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
Return True
End Function
然後在进入报表之前做下面的动作(每次登入只需做一次)即可。
System.Net.ServicePointManager.ServerCertificateValidationCallback =
New System.Net.Security.RemoteCertificateValidationCallback(AddressOf
ValidateCert)
其实就是避掉错误的回传这样,详情请看MSDN相关函式介绍。
这样就完成所有的设定了。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.113.209.21
※ retsamsu:转录至看板 C_Sharp 12/18 13:58
※ retsamsu:转录至看板 Web_Design 12/18 14:27