2024年8月16日 星期五

[研究]ASP.NET, WebForm, SweetAlert 能按下 OK 按鈕後,跳轉到某網頁

[研究]ASP.NET, WebForm, SweetAlert 能按下 OK 按鈕後,跳轉到某網頁

2024-08-12

環境:Visual Studio 2022 + ASP.NET + WebForm + Web Application + C# + SQL Server 2019 + SQL Server Management Studio (SSMS) 19

********************************************************************************

ASP.NET, WebForm, SweetAlert 能按下 OK 按鈕後,跳轉到某網頁

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css">
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

    <script type="text/javascript">
    function showAlertAndRedirect() {
        Swal.fire({
            title: '操作成功!',
            text: '即將跳轉到下一頁...',
            icon: 'success',
            confirmButtonText: 'OK'
        }).then((result) => {
            if (result.isConfirmed) {
                window.location.href = 'YourTargetPage.aspx'; // 這裡替換為你要跳轉的頁面
            }
        });
    }
</script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        </div>
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Web.UI;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            ScriptManager.RegisterStartupScript(this, GetType(), "alert", "showAlertAndRedirect();", true);
        }
    }
}




**********

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css">
    <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

    <script type="text/javascript">
function successalert() {
    swal({
        title: '成功!',
        text: '執行成功',
        type: 'success',
        confirmButtonText: 'OK'
    }).then((result) => {
        if (result.isConfirmed) {
            // 跳轉到指定的網址
            window.location.href = '/your-relative-path';
        }
    });
}

</script>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
        </div>
    </form>
</body>
</html>

Default.aspx.cs

ScriptManager.RegisterStartupScript(this, GetType(), "Popup", "successalert();", true);

**********

Swal.fire 和 swal 差別 ?

ChatGPT 說:

Swal.fire 和 swal 是兩個不同的函數名稱,分別屬於不同版本的 SweetAlert 函數庫。以下是它們的主要差別:

1. swal (SweetAlert 1.x)

  • 版本: swal 是 SweetAlert 1.x 版本中使用的函數名稱。
  • 功能: SweetAlert 1.x 提供了一個簡單的介面,用於顯示基本的提示框。
  • 語法: swal 直接呼叫即可顯示一個提示框,並且不需要太多配置。
  • 例如:swal("成功!", "執行成功", "success");

2. Swal.fire (SweetAlert2)

  • 版本: Swal.fire 是 SweetAlert2(也稱為 SweetAlert2 或 Swal2)版本中使用的函數名稱。
  • 功能: SweetAlert2 是對原版的完全重寫,增加了更多的功能和靈活性,例如鏈式操作(promises),自訂內容,更多的提示框類型,等等。
  • 語法: Swal.fire 提供了一個更強大的 API,可以接受多種選項,允許開發者更精確地定制提示框的行為和外觀。
  • 例如:

Swal.fire({

    title: '成功!',

    text: '執行成功',

    icon: 'success',

    confirmButtonText: 'OK'

});

3. 使用上的主要差異

  • 靈活性與功能: Swal.fire 在功能上比 swal 更加豐富,支持更多的選項和回調函數,並且可以更靈活地配置提示框的外觀和行為。
  • 語法變更: 在 SweetAlert2 中,Swal.fire 用於替代 swal,並且 API 也稍有不同。這意味著從 SweetAlert 1.x 升級到 SweetAlert2 可能需要對部分程式碼進行調整。

總結

  • 如果你使用的是舊版 SweetAlert (1.x),你會使用 swal 函數。
  • 如果你使用的是新版 SweetAlert2,你應該使用 Swal.fire 函數。這個版本的函數更加強大且靈活,並且是目前建議使用的版本。

(完)

相關

[研究]ASP.NET, WebForm, SweetAlert 能按下 OK 按鈕後,跳轉到某網頁
https://shaurong.blogspot.com/2024/08/aspnet-webform-sweetalert-ok.html

[研究] [C#] [ASP.NET] [JavaScript] 彈出視窗 (對話盒)
http://shaurong.blogspot.com/2020/04/c-aspnet-javascript.html

[研究] ASP.NET + SweetAlert 安裝 (NuGet)與試用
http://shaurong.blogspot.com/2017/06/aspnet-sweetalert-nuget.html

[研究] [C#] [ASP.NET] 用 SweetAlert + Button 作 送出確認 提示對話盒
http://shaurong.blogspot.com/2017/06/c-aspnet-sweetalert_23.html

[研究] [C#] [ASP.NET] 用 SweetAlert + LinkButton 作 刪除確認 提示對話盒
http://shaurong.blogspot.tw/2017/06/c-aspnet-sweetalert.html


ASP.NET 開新視窗四部曲
https://dotblogs.com.tw/hatelove/archive/2009/10/28/11325.aspx

http://lanfar.pixnet.net/blog/post/40706881

LinkButton 另開新視窗的方法
http://jimmy0222.pixnet.net/blog/post/36045311-linkbutton-%E5%8F%A6%E9%96%8B%E6%96%B0%E8%A6%96%E7%AA%97%E7%9A%84%E6%96%B9%E6%B3%95

showModalDialog與IE快顯封鎖
http://blog.darkthread.net/post-2011-07-12-showmodaldialog-and-popup-blocker.aspx

About the Pop-up Blocker
https://msdn.microsoft.com/en-us/library/ms537632(v=vs.85).aspx

<asp:LinkButton ID="LinkButton_View" runat="server" CausesValidation="False" Text="檢視" CssClass="btn btn-primary btn-xs" OnClientClick="<script>window.open('<%# String.Format(&quot;~/ManageJA/JAView.aspx?id={0}&quot;, Eval(&quot;Id&quot;)) %>','_blank','height=700,width=1000,status=yes,toolbar=no,menubar=no,location=no');</script>"></asp:LinkButton>

解決開視窗會變開在頁籤
https://dotblogs.com.tw/kim/2011/07/11/_blank

[C#]在 .Net 上實現 Win Form 中 MessageBox 的確認視窗
2009-10-09
https://dotblogs.com.tw/willy0080/2009/10/09/10984

ASP.NET中彈出訊息框的幾種常見方法
https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/221190/

ASP.NET中提交按鈕彈出訊息框,頁面不空白
https://www.itread01.com/p/627079.html

2024年8月15日 星期四

[研究]政府組態基準(GCB)、WAF 與 IIS 用戶端憑證 (Client Certificate)

[研究]政府組態基準(GCB)、WAF 與 IIS 用戶端憑證 (Client Certificate)

2024-08-15

供參考,ChatGPT 回答不保證對。

政府組態基準(Government Configuration Baseline,簡稱GCB) 是否有哪一條,會導致 Windows Server 2019 的 IIS 向 Windows 10 上 Edge 或 Chrome 要求 Client Certificate 後,雖然有跳出憑證供選擇,也選對了,但出現 403 錯誤問題 ?

ChatGPT

政府組態基準 (GCB) 是一系列安全設定,旨在強化系統的安全性。在 Windows Server 2019 上應用 GCB 可能會導致 IIS 伺服器出現 403 錯誤,特別是在使用 Client Certificate 驗證的情境下。以下是一些可能影響的設定:

  • Enhanced Key Usage (EKU) 設定:GCB 可能會強制要求只有特定 EKU 的憑證才能被認可。如果客戶端所提供的憑證不符合伺服器要求的 EKU,則可能會導致 403 錯誤。
  • Certificate Revocation List (CRL) 檢查:GCB 可能會要求嚴格的 CRL 檢查。如果客戶端憑證的 CRL 檢查失敗,或者伺服器無法存取 CRL,則也會導致 403 錯誤。
  • 憑證鏈中的問題:GCB 可能會強制要求完整的憑證鏈。如果伺服器無法驗證客戶端憑證的完整憑證鏈,也可能會導致 403 錯誤。
  • TLS 設定:GCB 可能會限制伺服器僅使用特定的 TLS 協定版本或加密套件。如果客戶端的憑證或其協商過程不符合這些要求,也可能會導致驗證失敗並出現 403 錯誤。
  • IIS 設定相關:GCB 可能會修改 IIS 的安全性相關設定,如 Client Certificate Mapping Authentication 的配置。如果這些配置與 GCB 的要求不一致,可能會導致 IIS 在進行憑證驗證時出現錯誤。

這些是可能導致問題的部分 GCB 設定。要確定具體是哪一條設定導致問題,可以考慮逐步排查設定並檢查事件日誌,或調整 GCB 設定以進行測試。

********************************************************************************

該如何解決 ?

ChatGPT

解決 Windows Server 2019 的 IIS 伺服器在應用政府組態基準 (GCB) 後出現 403 錯誤的問題,可以按照以下步驟進行排查和修正:

1. 檢查 Client Certificate 的 EKU (Enhanced Key Usage)

步驟: 確認客戶端憑證是否包含伺服器期望的 EKU。通常,Client Authentication (1.3.6.1.5.5.7.3.2) 是必須的。如果客戶端憑證缺少此 EKU,則可能導致 403 錯誤。

解決方法: 如需,更新客戶端憑證的 EKU 或重新申請符合要求的憑證。

2. 確認 CRL (Certificate Revocation List) 的可用性

步驟: 確認伺服器能夠成功地下載和檢查 CRL。如果伺服器無法存取 CRL 或檢查過程失敗,將會拒絕憑證並返回 403 錯誤。

解決方法: 確保 CRL 的 URL 可供伺服器訪問,並在 IIS 或 GPO 設定中調整 CRL 檢查設定。

3. 確認完整的憑證鏈

步驟: 檢查客戶端憑證是否有完整的憑證鏈,包括所有中間 CA 憑證。IIS 伺服器需要完整的憑證鏈來進行驗證。

解決方法: 安裝所有必須的中間憑證,並確保客戶端傳遞完整的憑證鏈。

4. 檢查 TLS 設定

步驟: 確認 IIS 伺服器的 TLS 設定是否允許客戶端使用的 TLS 協定版本和加密套件。如果 GCB 限制了 TLS 版本或加密套件,可能會導致驗證失敗。

解決方法: 如果需要,調整 TLS 設定以允許合適的 TLS 版本和加密套件,或者更新客戶端瀏覽器和憑證以支持伺服器的設定。

5. 調整 IIS 的 Client Certificate Mapping Authentication 設定

步驟: 如果 IIS 使用 Client Certificate Mapping Authentication,檢查這些設定是否符合 GCB 的要求並能正常運行。

解決方法: 在 IIS 中確認這些設定是否正確,例如是否啟用了基於 Active Directory 的憑證映射,或需要調整匹配規則。

6. 檢查 Windows 事件日誌

步驟: 查看 Windows 事件檢視器中的日誌,以獲取與 403 錯誤相關的具體信息,這可以幫助定位具體是哪一個設定導致了錯誤。

解決方法: 根據日誌中的錯誤代碼和描述進一步調整設定。

7. 暫時停用或放寬 GCB 設定

步驟: 為了診斷問題,可以暫時放寬 GCB 的部分設定,觀察問題是否得到解決。

解決方法: 在排查出具體導致問題的設定後,調整或更新 GCB 基準,以允許 IIS 正常運行。

經過以上步驟,如果問題依然存在,可能需要進一步分析和調整特定的 GCB 配置或尋求專業技術支持。

********************************************************************************

WAF 會導致 Windows Server 2019 的 IIS 向 Windows 10 上 Edge 或 Chrome 要求 Client Certificate 後,雖然有跳出憑證供選擇,也選對了,但出現 403 錯誤問題 ?

ChatGPT

Web Application Firewall (WAF) 的配置可能會影響 Windows Server 2019 的 IIS 與 Windows 10 上的 Edge 或 Chrome 瀏覽器之間的 Client Certificate 驗證過程,從而導致 403 錯誤。以下是可能的原因及解決方法:

1. WAF 規則阻擋憑證驗證流量

原因: WAF 可能會配置一些安全規則來過濾或阻擋特定類型的流量,包括與 Client Certificate 驗證相關的請求。如果 WAF 阻擋了某些 TLS 握手消息或憑證驗證相關的流量,可能導致 IIS 收不到完整的憑證信息,進而出現 403 錯誤。

解決方法: 查看和調整 WAF 規則,確保它不會阻擋與 Client Certificate 驗證相關的流量。可以嘗試暫時停用 WAF,確認問題是否因 WAF 設定引起。

2. WAF 對 HTTPS 流量的解密和檢查

原因: 如果 WAF 配置了解密 HTTPS 流量的功能,它可能會在解密和重新加密過程中破壞憑證的傳遞和驗證。這可能導致客戶端瀏覽器雖然選擇了正確的憑證,但 IIS 無法成功驗證,從而返回 403 錯誤。

解決方法: 檢查 WAF 是否對 HTTPS 流量進行了解密,並確保在此過程中不會影響憑證驗證。你可以嘗試禁用 WAF 的 HTTPS 解密功能,或者配置 WAF 允許憑證驗證相關流量不受干擾。

3. WAF 對憑證的要求或檢查

原因: 一些 WAF 可能會施加額外的憑證要求,或對憑證進行額外的檢查。如果這些要求與 IIS 的配置不一致,可能導致 IIS 收到的憑證無法通過驗證,最終返回 403 錯誤。

解決方法: 確認 WAF 的憑證相關設置與 IIS 的設置一致,並且不會引入額外的驗證步驟或要求。必要時調整 WAF 的配置以適應 IIS 的憑證驗證過程。

4. WAF 阻擋中間憑證或 CRL 查詢

原因: WAF 可能阻擋了伺服器對中間憑證或 CRL (Certificate Revocation List) 的查詢,這會導致 IIS 無法完成對客戶端憑證的驗證並返回 403 錯誤。

解決方法: 檢查 WAF 是否阻擋了 IIS 進行中間憑證或 CRL 的查詢,並確保這些查詢可以正常通過 WAF。

5. 排查其他潛在問題

步驟: 在嘗試解決以上常見問題後,仍需進行全面的系統排查,包括檢查 IIS 和 WAF 的日誌文件,查看是否有更多關於 403 錯誤的信息。

經過這些排查和設定調整後,如果問題仍然存在,可能需要對 WAF 進行更深層次的分析,或者考慮對 WAF 設置進行全面檢查以排除潛在干擾。

********************************************************************************

(待續)

2024年8月7日 星期三

[研究]nmap 7.9.5 與 SSLLab 對 Cipher 安全強度的評估

[研究]nmap 7.9.5 與 SSLLab 對 Cipher 安全強度的評估

2024-08-07

ChatGPT 和 Copilot 不是 100% 正確可靠的,有時要再查證。


對某個相同網址做測試

(下圖) nmap -p 443 --script ssl-cert,ssl-enum-ciphers  受測網址


(下圖) 網站 https://www.ssllabs.com/ssltest/analyze.html 對某網址測試結果


(下圖)

https://www.nartac.com/Products/IISCrypto/Download

全部勾選後,按下【Best Practices】按鈕後

********************************************************************************

某網站用 nmap 掃描結果

|   TLSv1.2: 

|     ciphers: 

|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp521r1) - A

|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp521r1) - A

|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A

|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A

|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024) - A

|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024) - A

但用 https://www.ssllabs.com/ssltest/analyze.html 掃描結果

# TLS 1.2 (suites in server-preferred order)

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)   ECDH secp521r1 (eq. 15360 bits RSA)   FS 256

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)   ECDH secp521r1 (eq. 15360 bits RSA)   FS 128

TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d)   WEAK 256

TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c)   WEAK 128

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e)   DH 1024 bits   FS   WEAK 128

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f)   DH 1024 bits   FS   WEAK 256

ChatGPT

比較 nmap 和 SSL Labs 兩個工具掃描的結果,可以看到一些差異,主要在於加密套件的分類和詳細信息。以下是一些可能的原因及差異解釋:


掃描結果比較:

nmap 掃描結果:

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp521r1) - A

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp521r1) - A

TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A

TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024) - A

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024) - A

SSL Labs 掃描結果:

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH secp521r1 (eq. 15360 bits RSA) FS 256

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH secp521r1 (eq. 15360 bits RSA) FS 128

TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) WEAK 256

TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c) WEAK 128

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) DH 1024 bits FS WEAK 128

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f) DH 1024 bits FS WEAK 256

主要差異和原因:

  1. 套件強度和分級:SSL Labs 顯示某些加密套件(如 RSA 加密套件和 DHE 加密套件)被標記為 WEAK(弱),而 nmap 並沒有這樣的標記。這是因為 SSL Labs 更側重於套件的安全性評估,而 nmap 主要顯示可用的加密套件。
  2. 密鑰交換方法和強度:SSL Labs 提供了更多關於密鑰交換方法(如 ECDH 和 DH)以及其相應的密鑰長度的詳細信息。例如,SSL Labs 顯示 ECDH secp521r1 相當於 15360 位 RSA,並標記了 FS(前向保密),這些細節在 nmap 結果中沒有體現。
  3. 詳細參數和標識:SSL Labs 結果中還包含每個加密套件的十六進制標識符(如 0xc030, 0xc02f),以及密鑰交換的具體參數(如 ECDH secp521r1)。這些在 nmap 結果中也沒有顯示。

結論:

兩個工具的掃描結果都提供了有價值的信息,但 SSL Labs 提供了更深入的安全分析和詳細信息,而 nmap 提供了可用加密套件的簡單列舉。根據你的需求,你可能需要綜合這些工具的結果來全面評估網站的 SSL/TLS 配置。

********************************************************************************

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 到底是否 WEAK ?  DH 1024 bits FS WEAK 128 是甚麼意思?

ChatGPT

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 的弱點主要來自其使用的 Diffie-Hellman (DH) 密鑰交換的 1024 位長度。以下是關於其弱點的詳細解釋:

弱點分析:

  1. DH 1024 bits:DH (Diffie-Hellman) 1024 bits 指的是 Diffie-Hellman 密鑰交換使用了 1024 位的素數模數。現代安全標準認為 1024 位 DH 密鑰強度不足,因為隨著計算能力的提升,1024 位的 DH 密鑰可能被破解或受到攻擊。一般建議使用至少 2048 位的 DH 密鑰來提高安全性。
  2. FS (Forward Secrecy):FS (Forward Secrecy) 或稱「前向保密」是指密鑰交換協議的一種特性,即使長期密鑰(如伺服器的私鑰)被洩露,過去的會話密鑰也無法被破解。TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 提供了前向保密,這是一個安全優勢。
  3. WEAK (Weakness):WEAK 標記意味著這個加密套件在現代安全標準下被認為不夠強,主要是由於其使用的 1024 位 DH 密鑰交換。1024 位的 DH 密鑰容易受到現代攻擊技術的威脅,因此被標記為弱。

結論:TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 是一個提供前向保密的加密套件,但因其使用 1024 位的 DH 密鑰交換而被認為不夠強,在現代的安全標準下被標記為 WEAK(弱)。

對策:

  • 建議在伺服器上配置更強的 DH 密鑰交換,使用至少 2048 位的 DH 密鑰。
  • 如果可能,考慮使用 ECDHE(橢圓曲線 Diffie-Hellman)來替代 DHE,因為 ECDHE 通常提供更強的安全性和更好的性能。

總結來說,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 的主要弱點在於 1024 位的 DH 密鑰長度。即使它提供了前向保密,為了達到現代安全標準,應該升級到更強的密鑰交換方法。

********************************************************************************

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 是否一定會用到 DH,或有可能不會用到 DH ?

ChatGPT

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 中的 DHE 部分確定了這個加密套件使用的是 Diffie-Hellman Ephemeral(臨時 Diffie-Hellman)密鑰交換。這意味著這個加密套件一定會使用 DH 密鑰交換。

具體分析:

  • DHE(Diffie-Hellman Ephemeral):這個部分表明這個加密套件使用的是臨時 Diffie-Hellman 密鑰交換。每次握手都會生成一個新的臨時密鑰,這為每個會話提供了前向保密(Forward Secrecy)。
  • RSA:這表示在認證過程中使用 RSA 演算法。
  • AES_128_GCM_SHA256:這部分描述了使用的對稱加密算法(AES 128 GCM)和訊息摘要算法(SHA256)。

總結:

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 一定會使用 DH 密鑰交換,這是這個加密套件的一個固有特性。如果不想使用 DH 密鑰交換,需要選擇不同的加密套件,例如:

TLS_RSA_WITH_AES_128_GCM_SHA256:這個加密套件使用 RSA 進行密鑰交換,不會使用 DH。

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:這個加密套件使用 ECDHE(橢圓曲線 Diffie-Hellman Ephemeral)進行密鑰交換,不使用傳統的 DH,而是使用橢圓曲線 DH。

選擇加密套件時,應根據安全需求和伺服器配置來決定,以確保最佳的安全性和性能。

********************************************************************************

nmap 對 Cipher 的 A, B, C 等級如何判定 ? 有哪些等級 ? 安全程度如何 ? 請用繁體中文

ChatGPT

nmap 的 ssl-enum-ciphers 腳本可以用來評估 SSL/TLS 配置和密碼套件的強度。這些密碼套件的等級(如 A、B、C 等)通常依據一些加密標準和安全組織的指導方針來劃分。例如,Mozilla 的 SSL 配置指南就對不同級別的安全性做了詳細的分類。

使用 nmap 進行密碼套件評估

可以用以下命令來評估目標服務器的 SSL/TLS 配置:

nmap --script ssl-enum-ciphers -p 443 <target>   

這將掃描目標服務器的 443 端口(通常是 HTTPS 端口),並列出支持的密碼套件及其強度評估。

密碼套件等級劃分

密碼套件的等級劃分通常依據其加密強度、算法的安全性和密鑰的長度。例如:

  • A 級:非常安全,使用現代的、強力的加密算法(如 AES-GCM)和足夠長的密鑰長度(如 256 位)。
  • B 級:安全性較高,但可能使用稍舊的算法或較短的密鑰長度(如 AES-CBC 128 位)。
  • C 級:安全性一般,使用過時的算法或更短的密鑰長度(如 3DES)。
  • D 級及以下:不安全,使用被認為不再安全的算法(如 RC4)或極短的密鑰長度。

安全程度

  • A 級:最高安全性,適用於需要最高保護的應用,如金融交易和敏感數據傳輸。
  • B 級:仍然非常安全,適用於大多數商業應用。
  • C 級:基礎安全,適用於對安全要求不高的應用。
  • D 級及以下:不建議使用,容易受到各種攻擊。

nmap 輸出示例

執行上述命令後,nmap 會輸出類似如下的信息:

PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers:
|   TLSv1.2:
|     ciphers:
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ecdh_x25519) - A  
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A
|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - B
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - B
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|_  least strength: C


這些信息將幫助你評估服務器的 SSL/TLS 安全性並做出相應的改進。

********************************************************************************

SSLLab 網站對 Cipher 的 WEAK 等級如何判定 ? 還有哪些等級 ? 安全程度如何 ? 請用繁體中文

ChatGPT

SSL Labs 是一個由 Qualys 提供的在線服務,專門用於分析 SSL/TLS 配置的安全性。該服務對網站進行評估,並將使用的密碼套件分為不同的安全等級,包括 WEAK(弱)等級。以下是 SSL Labs 如何判定密碼套件的 WEAK 等級以及其他等級的劃分和其安全程度。

SSL Labs 等級劃分

SSL Labs 對 SSL/TLS 配置進行綜合評估,並給出總體評分(例如 A+、A、B、C、D、E、F 等)。密碼套件的等級是該評分的一部分。具體等級如下:

  • A+: 最佳安全配置,沒有已知的安全漏洞,且使用了最新和最強的加密技術。
  • A: 安全性很高,但可能略低於 A+,例如缺少某些最佳實踐配置。
  • B: 一般安全,存在一些潛在的改進空間,例如使用了較舊的加密技術或較短的密鑰長度。
  • C: 安全性一般,有明顯的改進空間,可能存在已知的弱點。
  • D: 安全性較差,存在嚴重的安全問題,應該立即改進。
  • E: 安全性很差,幾乎無法保護數據。
  • F: 安全性極差,存在重大安全漏洞,基本無法提供有效保護。
  • T: 測試評分,用於臨時測試目的。

WEAK 等級判定

SSL Labs 將密碼套件判定為 WEAK(弱)的條件包括:

  • 使用了已知存在漏洞的加密算法(例如 RC4)。
  • 密鑰長度過短,容易被暴力破解(例如 40 或 56 位)。
  • 使用了不安全的哈希算法(例如 MD5)。
  • 使用了過時的協議版本(例如 SSL 2.0、SSL 3.0)。

安全程度

  • Strong(強): 使用現代、強力的加密算法和足夠長的密鑰長度(如 AES-GCM 256 位),具有高度的安全性。
  • Acceptable(可接受): 使用的加密技術仍然安全,但可能略有弱化(如 AES-CBC 128 位),適用於大多數商業應用。
  • Weak(弱): 使用的加密技術存在已知的弱點,可能容易受到攻擊,不推薦使用。
  • Insecure(不安全): 使用了過時或已知存在重大安全漏洞的加密技術,應立即禁用。

********************************************************************************

請問下面 6 種 Cipher 是否已經有 CVE 弱點 ? 網址 ?

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp521r1)

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp521r1)

TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048)

TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048)

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024)

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024)

Copilot

以下是您提到的 6 種 Cipher 及其相關的 CVE 弱點資訊:

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp521r1)

目前沒有特定的 CVE 弱點報告。

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp521r1)

目前沒有特定的 CVE 弱點報告。

TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048)

這個 Cipher 可能受到一些通用的 RSA 弱點影響,例如 CVE-2017-37381。
https://blog.darkthread.net/blog/rdp-ssl-cipher-vulnerability/

TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048)

同樣可能受到一些通用的 RSA 弱點影響,例如 CVE-2017-37381。

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024)

這個 Cipher 可能受到一些通用的 DHE 弱點影響,例如 CVE-2016-07012。
https://segmentfault.com/q/1010000041207725

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024)

同樣可能受到一些通用的 DHE 弱點影響,例如 CVE-2016-07012。

這些 Cipher 的安全性可能會隨著新的弱點發現而改變,建議定期檢查相關的 CVE 資訊以確保系統安全。

********************************************************************************

SSL Labs 判定 TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) 為 WeAK 的 CVE 編號 ?

ChatGPT

SSL Labs 將 TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) 標記為 WEAK 的原因通常不是針對特定的 CVE(Common Vulnerabilities and Exposures),而是基於一些常見的弱點和安全風險。以下是一些相關的原因:

  1. 前向保密 (Forward Secrecy) 的缺乏:使用 RSA 密鑰交換的協議不提供前向保密,這意味著如果伺服器的私鑰被洩露,過去的所有會話都可能被解密。前向保密是現代安全實踐中的一個重要功能,許多安全專家和組織建議使用支持前向保密的加密套件(如 ECDHE)。
  2. RSA 密鑰長度:雖然 2048 位的 RSA 密鑰目前被認為是安全的,但未來可能需要更長的密鑰來防範更強的攻擊。
  3. 整體安全性標準的提高:隨著加密技術和攻擊技術的進步,對於加密套件的安全標準也在不斷提高。即使目前看似安全的配置,也可能因為缺乏某些安全特性(如前向保密)而被標記為 WEAK。

相關的 CVE 和弱點

沒有特定的 CVE 編號直接針對 TLS_RSA_WITH_AES_256_GCM_SHA384。

總結:

TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) 被標記為 WEAK 的原因主要是其不提供前向保密,以及隨著時間推移 RSA 密鑰可能變得不夠強。這些原因使得它在現代安全標準下被認為是不夠安全的。若需具體 CVE 編號,需檢查實際使用的加密庫(如 OpenSSL)中的相關漏洞報告。

********************************************************************************

下面 Cipher 是否有明確的 CVE 編號的弱點 ?

TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048)

TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048)

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024)

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024)

ChatGPT

TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) 和 TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) 的主要問題是缺乏前向保密,沒有特定的 CVE 編號直接針對這個問題,但涉及的風險是這些套件被標記為 WEAK 的原因。

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024) 和 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024) 的問題主要來自 1024 位 DH 密鑰的弱點,這與 CVE-2015-4000 和 CVE-2016-0701 有關,但它們並不直接與 CVE-2015-4000 和 CVE-2016-0701 相關聯。

********************************************************************************

Web Server 關閉 下面 Cipher,

TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048)

TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048)

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024)

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024)

僅留下

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp521r1)

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp521r1)

那些作業系統將無法連上 Web Server ?

ChatGPT

關閉以下加密套件:

TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048)

TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048)

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 1024)

TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 1024)

僅留下:

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp521r1)

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp521r1)

可能會導致一些老舊操作系統無法連接到 Web 伺服器。主要受影響的作業系統包括:

1. Windows XP 和 Windows Server 2003

TLS 和 ECC 支援:這些舊版本的 Windows 作業系統可能不支持 ECDHE (Elliptic Curve Diffie-Hellman Ephemeral) 或僅提供有限的 ECC (Elliptic Curve Cryptography) 支援。

問題:這些作業系統主要支持較舊的 TLS 協議和加密套件,如 TLS_RSA 和 TLS_DHE。當你僅保留 ECDHE 支援時,它們可能無法與伺服器建立連接。

2. 早期版本的 Android

TLS 和 ECC 支援:早期版本的 Android(特別是 4.x 和更早版本)可能不完全支持 ECDHE 或 ECC。

問題:這些版本可能不支持 secp521r1(也就是 521 位的橢圓曲線),因此無法使用僅支持 ECC 的加密套件。

3. 舊版的 Web 瀏覽器

TLS 和 ECC 支援:一些舊版的 Web 瀏覽器和客戶端可能不支持 ECDHE 或 ECC,特別是較舊的 IE 和舊版的 Firefox 或 Safari。

問題:這些舊版瀏覽器無法與僅支持 ECDHE 的伺服器進行安全的 TLS 連接。

總結

關閉上述加密套件並僅留下 ECDHE 套件後,舊版作業系統和瀏覽器可能會無法連接到你的 Web 伺服器。這些包括但不限於:

Windows XP 和 Windows Server 2003

早期版本的 Android

舊版的 Web 瀏覽器(如早期的 IE 和 Firefox)

為了兼容性,通常建議保留至少一些較舊但安全的加密套件,或指導用戶更新其操作系統或瀏覽器以支持更現代的加密標準。

********************************************************************************

Windows 2003, XP, Vista, 7, 8, 8.1, 10, 11 那些版本不支援

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp521r1)

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp521r1)

ChatGPT

不支援:

  • Windows 2003(包括 Server 2003 和 XP)
  • Windows XP
  • Windows Vista(有限支援)
  • Windows 7(有限支援)

支援:

  • Windows 8 和 8.1
  • Windows 10 和 11

********************************************************************************

【總結】

弱點 (Vulnerability) 和 弱 (WEAK) 是不同的,雖然部分【加密演算法 (Cipher)】在 nmap 判定 A 等級 (非常安全),SSLLabs網站判定 Cipher 為 WEAK,但網頁上沒有說有弱點 (Vulnerability) 。

Copilot 雖然說那 4 個 Cipher 有 CVE-2017-37381 或 CVE-2016-07012 弱點,但提供的網址內容,並非說明該弱點;且實際 Google 或到 CVE 網站去查,是不存在的編號。

https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=CVE-2017-37381





(完)

相關

SSLLabs
https://www.ssllabs.com/ssltest/analyze.html

CVE Details
https://www.cvedetails.com/

NIST NVD
https://nvd.nist.gov/

MITRE CVE
https://cve.mitre.org/find/index.html