轉自: http://www.cnblogs.com/naniannayue/html
SSL(Security Socket Layer)全稱是加密套接字協議層,它位於HTTP協議層和TCP協議層之間,用於創建用戶與服務器之間的加密通訊,確保所傳遞信息的安全性,同時SSL安全機制是依靠數字證書來實現的。 SSL基於公用密鑰和私人密鑰,用戶使用公用密鑰來加密數據,但解密數據必須使用相應的私人密鑰。使用SSL安全機制的通訊過程以下:用戶與IIS服務器創建鏈接後,服務器會把數字證書與公用密鑰發送給用戶,用戶端生成會話密鑰,並用公共密鑰對會話密鑰進行加密,而後傳遞給服務器,服務器端用私人密鑰進行解密,這樣,用戶端和服務器端就創建了一條安全通道,只有SSL容許的用戶才能與IIS服務器進行通訊。 提示:SSL網站不一樣於通常的Web站點,它使用的是「HTTPS」協議,而不是普通的「HTTP」協議。所以它的URL(統一資源定位器)格式爲「https://網站域名」。web
1:win7/windows server 2008R2中 IIS7/IIS7.5 搭配https本地測試環境windows
2:windows server 2003中IIS6.0 搭配https本地測試環境瀏覽器
https是由IIS,瀏覽器來實現的傳輸層加密,不須要特地的編碼。。。平時怎麼在asp.net裏面編寫代碼,就怎麼寫。安全
極可能要問,爲何個人站點使用了https以後,用firebug之類的軟件查看值提交的時候,仍是會顯示明文呢?例如,博客園的登錄界面提交。服務器
http://passport.cnblogs.com/login.aspxapp
爲何這裏仍是能看到明文的用戶名和密碼呢?asp.net
緣由是由於:https(ssl)的加密是發生在應用層與傳輸層之間,因此,在傳輸層看到的數據纔是通過加密的,而咱們捕捉到的http post的,是應用層的,是還沒通過加密的數據。post
支付寶也是https的,可是他的同時也增長了安全控件來保護密碼, 之前認爲這個只是用來防鍵盤監聽的,其實,看下面http post截獲的密碼:這個安全控件把給request的密碼也先加了密,緊接着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 來控制
http://www.cnblogs.com/naniannayue/archive/2012/11/23/2784568.html
http://www.cnblogs.com/naniannayue/archive/2012/11/23/2784653.html