[Windows Server 2008] 如何設定IIS的自我簽署憑證? (2015/12/30更新)

序:
最近用Microsoft的WebAPI寫了一支程式,因為連結中包含敏感資訊,所以要確保連線要被加密。但是由於程式只供內部系統使用,所以又未至於誇張到使用外部授權單位所發的憑證。看了一堆文章以後,發現IIS中 "自我簽署憑證" 跟OpenSSL兩種方法應該乎合我的需求,所以就開始設定囉。

什麼是 自我簽署憑證?
根據Microsoft的說法:"自我簽署憑證不是由憑證授權單位所發行。這些憑證可確保網站連線會被加密;但是,它們無法確保產生憑證之組織的身分識別。如果加密資料的能力比識別發行組織的能力還重要,則自我簽署憑證非常有用。"加密資料正正是我想要的東西 XD

怎樣做?

  • IIS中自我簽署憑證:很多大大也發過相同的文章,我也不再次發明輪胎了;91大有很詳細的說明可以參考
    • 2015/12/30補充:

      如果要自我簽署一張超過一年期限的憑證,例如10年的要怎麼辦?

      1. 首先從微軟網站下載SelfSSL套件
      http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17275

      2. 檢查IIS中是否已安裝以下元件,沒有的話要先裝回,不然會出現「Error opening metabase: 0x80040154」的錯誤

      3. 用Administrator的權限打開cmd,輸入 selfssl /n:cn=www.mydomain.com /v:3650 /s:/k:2048

      • /n:cn=www.mydomain.com - 此SSL是給www.mydomain.com.  cn= (common name) 最好不要不填,不然將來要找這張憑證會很麻煩
      • /v:3650 - 憑證有效日,單位為天數,例如憑證有效期為十年的話值為3650。
      • /s:8 - IIS中安裝此憑證的Site編號。要查出Site的ID在cmd中可輸入%systemroot%\system32\inetsrv\APPCMD list site <site名稱>
      • /k:2048 - 金匙長度,單位為bits.
      4. 完成後可以打開IIS,在左邊樹狀目錄下點root,也就是伺服器圖示,然後按Server Certificates,應該可以看到剛新增的憑證,接下來Site就可以使用用這張自我簽署的憑證了。

  • OpenSSL:利用Win32 OpenSSL這套工具產生憑證。
    方法流程
    • 首先產生一張Root CA的key 這篇教學
    • 然後產生一張自我簽署的Root CA OpenSSL憑證
    • 再利用上面的Root CA憑證產生Private Key 參考
    • 再利用Private Key產生IIS可用的.pfx檔案格式 參考
    • 例子
      • set RANDFILE=c:\OpenSSL\.rnd

      • set OPENSSL_CONF=C:\OpenSSL-Win32\bin\openssl.cfg

      • genrsa -out xxxxxxx.key 2048 -des3 xxxxxxx

      • req -new -x509 -days 36135 -key xxxxxxx.key -out xxxxxxx.crt



程式端又怎樣?
程式端也是很簡單,如果你使用的是WebClient,當存取自我簽署憑證應該會出現 "基礎連接已關閉: 無法為 SSL/TLS 安全通道建立信任關係。"或 "The underlying connection was closed: Could not establish trust relationship for SSL/TLS secure channel" 的錯誤訊息。
解決方法只需要在宣告WebClient以後加入
"ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };"
就可以解決了。這句意思是說關掉WebClient的預設防護機制,強列建議只適用於已知安全的網站/Web Service上。

希望可以幫助大家解決公司內部加密通訊的一些問題 :-)。有錯誤請指教!



Popular posts from this blog

[SQL SERVER] 找出LOCK方法懶人包

[SQL Server] 解決log檔(ldf file)過度膨脹的實戰經驗

[Windows7] 跨距磁碟區, 等量磁碟區, 鏡像磁碟區之區別