Can Run ASP.NET Web API with HTTPS?

讀者發問

是的,書還沒賣出半本就已經開始做讀者服務。寫書真的不是拿來賺錢的。@_@

參加twMVC#7時,有社群朋友問說,ASP.NET Web API是否能運作在HTTPS之下?老實說,我還真沒想過也沒試過,不過這在商業上是很實際的需求,與前端之間重要、機密的資料,最簡易與安全的方式就是使用HTTPS。那麼,ASP.NET Web API是否能在HTTPS協定下運作呢?

讓我們看下去。

IIS Express for HTTPS環境架設

進入HTTPS測試之前,當然要先有一個HTTPS的測試環境。在「ASP.NET MVC 4網站開發美學」裡我花了很長的篇幅教讀者如何設定與使用IIS Express,也說明了使用了IIS Express指令模式的好處,如果你要學習ASP.NET Web API不會使用IIS Express,那真的是吃虧。

  1. 以下操作與設定環境為Windows 8 and Visual Studio 2012。
  2. 以下使用ASP.NET MVC 4預設Web API專案測試。
  3. IIS Express相關細節請參考《ASP.NET MVC 4網站開發美學》第七章。

設定IIS Express支援HTTPS有兩種方式:

  • 修改【C:\Users\{UserName}\Documents\IISExpress\config\applicationhost.config】裡ASP.NET Web API專案<site>裡的<bindings>設定:
    • 原始:
             <bindings>
              <binding protocol="http" bindingInformation="*:4958:localhost" />
                         </bindings>
            
    • 修改:
             <bindings>
              <binding protocol="http" bindingInformation="*:1370:localhost" />
              <binding protocol="https" bindingInformation="*:44300:localhost" />
                         </bindings>
            
  • 透過Visual Studio屬性設定
    • 點選【Web API專案】,移至【屬性】視窗;
    • 點選【啟用SSL】。
      啟用IIS Express SSL功能

注意:在IIS Express使用HTTPS有些限制,請參考書中說明。

修改applicationhost.config設定檔是比較靈活的方法,例如,我們可以指定任何我們想要的Port Number,透過Visual Studio屬性則是動態指定Port Number。

建置,讓我們以指令模式啟用IIS Express(這些訊息是一般GUI模式下看不到的,怎麼用,請好好看這本「ASP.NET MVC 4網站開發美學」,謝謝。再次證明,把IIS Express指令模式學好是非常有用的。)

指令模式啟用IIS Express

測試IIS Express HTTPS for ASP.NET MVC

啟用Web API裡的MVC首頁,修改兩個地方:

  1. 將http改為https
  2. 將Port Number改為HTTPS的Port Number
SSL 憑證錯誤

憑證錯誤畫面是正常的,按【續繼】:

ASP.NET MVC運作於HTTPS

目前為止,我們已經讓ASP.NET MVC專案正常運作於HTTPS之上。

測試IIS Express HTTPS for ASP.NET Web API

在「ASP.NET MVC 4網站開發美學 第七章」,瀏覽器不算的話,我有介紹兩套工具【PostMan】與【fiddler】以測試ASP.NET Web API,以下就讓我們試試。

PostMan與fiddler測試HTTPS

目前如PostMan之類的瀏覽器外掛套件無法進行HTTPS之下的ASP.NET Web API測試。

目前我主機安裝的Fiddler v4.4.2.4Beta版:

  1. 輸入所需的資訊URI資源資訊:
    透過Fiddler送出HTTPS資源請求
  2. 收到到一個憑證錯誤的通知:
    IIS Express憑證錯誤
  3. ASP.NET Web API在HTTPS之下,回應狀態碼200正常:
    ASP.NET Web API處理HTTPS而來的資源請求
  4. 用戶端透過HTTPS接收JSON回應也是正常:
    用戶端透過HTTPS接收JSON回應

結論就是:No Problem,ASP.NET Web API完全能運作在HTTPS之下沒問題。

另外,PostMan之類程式無法測試是因為憑證錯誤的問題,它們無法處理憑證錯誤。其實,直接用瀏覽器就可以看到由HTTPS回傳的JSON。XD

6 則留言:

  1. KKBurce大大真是感謝您幫我實驗了一下!!!真是期待您有參與的新書啊!!

    回覆刪除
  2. 更利害的是,書都還沒出,讀者服務就要勘誤了..
    Line 1 書還沒買出半本 => 賣
    話說,出了我一定會買一本。

    回覆刪除
  3. KKBurce大大, 真是好書, 但小弟資質不足, 讀得好吃力呢
    第7章(這章應是您寫的) p7-58, 7.5.4 中的 表7.6, 應是表7.5 的誤植吧?
    整本書有無戡誤表呢?

    回覆刪除
    回覆
    1. 一、
      http://books.gotop.com.tw/v_ACL036500
      這裡可以下載到最新修訂勘誤表及新增補充資料。(同等二刷)

      二、
      吃力這件事…有句話,吃苦當做吃補 :P,加油。

      刪除

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。