1. 程式人生 > >https,https的本地測試環境搭建,asp.net結合https的代碼實現,http網站轉換成https網站之後遇到的問題

https,https的本地測試環境搭建,asp.net結合https的代碼實現,http網站轉換成https網站之後遇到的問題

基本 解密 req with 網址 orm forms 訪問 art

一:什麽是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之類的軟件查看值提交的時候,還是會顯示明文呢?例如,博客園的登陸界面提交。

http://passport.cnblogs.com/login.aspx

技術分享圖片

技術分享圖片

為什麽這裏還是能看到明文的用戶名和密碼呢?

原因是因為:https(ssl)的加密是發生在應用層與傳輸層之間,所以,在傳輸層看到的數據才是經過加密的,而我們捕捉到的http post的,是應用層的,是還沒經過加密的數據。

  1. 加密的數據只有客戶端和服務器端才能得到明文
  2. 客戶端到服務端的通信是安全的

支付寶也是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 來控制

五:asp.net 內置票據認證+securitySwitch 的實現(就是上面說的 admin 需要登錄才能訪問)看下文

http://www.cnblogs.com/naniannayue/archive/2012/11/23/2784568.html

六:securitySwitch 4.2 中文幫助文檔

http://www.cnblogs.com/naniannayue/archive/2012/11/23/2784653.html

https,https的本地測試環境搭建,asp.net結合https的代碼實現,http網站轉換成https網站之後遇到的問題