https,https的本地測試環境搭建,asp.net結合https的代碼實作,http網站轉換成https網站之後遇到的問題
一:什麼是https
SSL(Security Socket Layer)全稱是加密套接字協定層,它位于HTTP協定層和TCP協定層之間,用于建立使用者與伺服器之間的加密通信,確定所傳遞資訊的安全性,同時SSL安全機制是依靠數字證書來實作的。
SSL基于公用密鑰和私人密鑰,使用者使用公用密鑰來加密資料,但解密資料必須使用相應的私人密鑰。使用SSL安全機制的通信過程如下:使用者與IIS伺服器建立連接配接後,伺服器會把數字證書與公用密鑰發送給使用者,使用者端生成會話密鑰,并用公共密鑰對會話密鑰進行加密,然後傳遞給伺服器,伺服器端用私人密鑰進行解密,這樣,使用者端和伺服器端就建立了一條安全通道,隻有SSL允許的使用者才能與IIS伺服器進行通信。
提示:SSL網站不同于一般的Web站點,它使用的是“HTTPS”協定,而不是普通的“HTTP”協定。是以它的URL(統一資源定位器)格式為“https://網站域名”。
二:https的本地測試環境搭建
1:win7/windows server 2008R2中 IIS7/IIS7.5 搭配https本地測試環境
2:windows server 2003中IIS6.0 搭配https本地測試環境
三:asp.net 結合 https的代碼實作
https是由IIS,浏覽器來實作的傳輸層加密,不需要特意的編碼。。。平時怎麼在asp.net裡面編寫代碼,就怎麼寫。
很可能要問,為什麼我的站點使用了https之後,用firebug之類的軟體檢視值送出的時候,還是會顯示明文呢?例如,部落格園的登陸界面送出。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yNwYTO2MGMzczMzgzY3IjYyYzXxUDMyATMyIzLcZDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
為什麼這裡還是能看到明文的使用者名和密碼呢?
原因是因為:https(ssl)的加密是發生在應用層與傳輸層之間,是以,在傳輸層看到的資料才是經過加密的,而我們捕捉到的http post的,是應用層的,是還沒經過加密的資料。
- 加密的資料隻有用戶端和伺服器端才能得到明文
- 用戶端到服務端的通信是安全的
支付寶也是https的,但是他的同時也增加了安全控件來保護密碼, 以前認為這個隻是用來防鍵盤監聽的,其實,看下面http post截獲的密碼:這個安全控件把給request的密碼也先加了密,緊接着https再加次密,果然是和錢打交道的,安全級别高多了:)
四:http網站轉換成https網站之後遇到的問題
整站https還是個别的頁面采用https?網站的連接配接是使用相對路徑?還是絕對路徑?
如果是整站都是https,那麼會顯得網頁有些慢,如果是個别頁面采用https,那麼如何保證從https轉換到http的時候的url的準确性呢?
比如我們用http的時候,網站的頭部底部都是用的相對路徑,假如你的頁面是 http://aa/index.aspx 你跳轉到 https://aa/login.aspx 這裡怎麼來跳轉?隻能把超連結寫死
<a href=”https://aa/login.aspx”>登陸</a> 但是這樣的話,你跳轉過去之後的頁面 ,所有的相對路徑都變成了https開頭了,這樣很影響網站的效率。
雖然使用絕對位址可以解決,但是那樣顯然不好移植。
下面就是使用第三方的元件,來解決上面的這個問題
http://www.codeproject.com/Articles/7206/Switching-Between-HTTP-and-HTTPS-Automatically-Ver
步驟 先下載下傳dll檔案 http://code.google.com/p/securityswitch/downloads/list 我選擇的是 SecuritySwitch v4.2.0.0 - Binary.zip這個版本
1: 我們來看看測試項目
admin 檔案夾,需要登入之後,才能通路。admin裡面的 login.aspx 可以通路。整個admin檔案夾都需要https通路
contact.aspx 需要https 通路
default.aspx 和 view.aspx 采用 http 通路
連結我們都采用相對路徑,并沒有寫死成 http://www.xx.com/a.aspx 或者是 https://www.xx.com/a.aspx
下面我們開始用SecuritySwith來實作上面的https和http通路的規則
2:在項目上,添加引用 SecuritySwitch.dll ,并且添加 智能提示
這樣,隻能提示就有了。
3:然後我們在web.config裡面添加設定 。根據IIS的不同,還分為 IIS6+ IIS7.X(經典模式) 以及 IIS7(內建模式) 的不同的配置,這裡我們是按照IIS6+IIS7.X的(經典模式)來配置的.
隻看看裡面的 SSL配置即可
<?xml version="1.0"?>
<configuration>
<!--SSL配置1開始-->
<configSections>
<section name="securitySwitch" type="SecuritySwitch.Configuration.Settings, SecuritySwitch" />
</configSections>
<securitySwitch baseInsecureUri="http://webjoeyssl" baseSecureUri="https://webjoeyssl" xmlns="http://SecuritySwitch-v4.xsd" mode="On">
<!--如果你的http和https僅僅隻有一個s的差別,那麼這裡的base的2個url可以不寫,那為什麼還要搞這2個url呢?因為比如
你的 baseInsecureUri (基本不安全網址) 是 http://www.qq.com
而你的 baseSecureUri (基本安全網址) 是 https://safe.qq.com
然後這個時候你通路一個需要https的頁面,假如是 login.aspx?return=joey
假如你是通過http://www.qq.com/login.aspx?return=joey通路的,那麼這個
頁面會跳轉到http://safe.qq.com/login.aspx?return=joey
-->
<paths>
<add path="~/contact.aspx"/>
<add path="~/admin/login.aspx"/>
<add path="~/admin" />
<!--這裡的admin因為不僅是 admin 檔案夾,而且還包含類似的 adminNews.aspx adminQQ.aspx 頁面"-->
<!--但是如果是 ~/admin/ 就是專門指admin檔案夾-->
</paths>
</securitySwitch>
<!--SSL配置1結束—>
<appSettings />
<system.web>
<compilation debug="true">
</compilation>
<!-- 内置票據認證 start-->
<authentication mode="Forms">
<forms name="mycook" loginUrl="admin/login.aspx" protection="All" path="/" />
</authentication>
<!--SSL配置2 如果是 IIS <= 6.x, IIS 7.x + 經典模式-->
<httpModules>
<add name="SecuritySwitch" type="SecuritySwitch.SecuritySwitchModule, SecuritySwitch" />
</httpModules>
<!--SSL配置2結束-->
</system.web>
<!--SSL配置2 如果是IIS7.X + 內建模式-->
<!--<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
--><!-- for IIS 7.x + 內建模式 --><!--
<add name="SecuritySwitch" type="SecuritySwitch.SecuritySwitchModule, SecuritySwitch" />
</modules>
</system.webServer>-->
<!--如果是IIS7.X+內建模式 SSL配置2 結束—>
</configuration>
4:其他就沒有你什麼事情了,url的 http 背景 https 的切換,都是securitySwitch 來控制