如何在 Windows Server 2012 上安装密码套件

问题描述 投票:0回答:3

我有两个 EDI 服务器,A 和 B。贸易伙伴使用 TLS 连接。

一个贸易伙伴无法连接到服务器 B,但可以连接到服务器 A。

问题显然是 A 上的密码套件与 B 上的密码套件不同。原因是 B 已应用 Windows 更新,但 A 未应用。

所以我想将更新之前原来存在的所有密码套件放回 B 上,以便它们是相同的。 这应该可以让合作伙伴成功连接。

我已经使用 SSLLabs 运行了一份有关密码套件的报告,这是 A 上的列表,但 B 上没有:

TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e)
TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d) TLS_RSA_WITH_AES_128_GCM_SHA256    (0x9c) 
TLS_RSA_WITH_RC4_128_MD5 (0x4)
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f)

如何启用/安装这些密码套件?

ssl tls1.2
3个回答
5
投票

这篇博客文章介绍了如何添加/删除密码套件。

简而言之,有一个名为“SSL 配置设置”的本地计算机策略设置,它确定所使用的套件的顺序以及所使用的套件。

还有一个免费的 GUI 工具,可让您添加/删除密码套件。


3
投票

所以,插话有点晚了……好吧……真的晚了……但我有同样的问题,并找到了一些额外的信息来帮助扩展这篇文章。

正如已经说过的......显然不,你不能“添加/安装”额外的套件。但是...您可以更改哪些是活动的以及它们的首选顺序。所以,上面已经说过的是关于如何改变已经活动的顺序的链接......这很酷......但是,这只是我相信你寻求的答案的一部分。问题的另一半是“有什么可供选择?”为此,我想分享这个链接...

https://learn.microsoft.com/en-us/windows/win32/secauthn/cipher-suites-in-schannel

在该页面上,您应该找到更多“最新 Windows 操作系统”的链接列表(如果您想将 Windows XP 称为“最新”),并且每个后续链接将向您显示 1) 默认情况下启用的密码套件,2 ) 哪些密码套件可用,但默认情况下处于禁用状态,以及 3) 哪些预共享密钥套件可根据要求提供。在这三个列表之间,您可以选择要加载的密码套件以及加载顺序。

现在...棘手的部分...我无法弄清楚的部分...显然,操作系统可用的密码套件的完整列表可以通过 Microsoft 认为适合传递的各种 Windows 更新进行更新对我们来说。我不清楚在完全修补/更新后在哪里可以找到可用套件的完整列表。我在这一点上可能是错的,但我查过的地方似乎暗示了这样的事情。无论如何...我希望有一些命令行/PowerShell 方式来查看可供选择的可用套件的完整列表。我能找到的最好的方法是“Get-TlsCipherSuite”...它似乎只向您显示当前启用的套件列表中的内容...而不是可供选择的可用套件的完整列表。如果有人知道要输入的魔法词才能获得完整列表...这就是我感兴趣的。;)

无论如何......聚会迟到了......但希望这个金块可以帮助其他人完成同样的任务。 :)


0
投票

此 C 函数枚举密码套件:

#include <windows.h>
#include <stdio.h>
#include <Bcrypt.h>

#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#endif

int main()
{
    NTSTATUS status;
    ULONG uSize = 0;
    PCRYPT_CONTEXTS pContexts = NULL;

    // Get the contexts for the local machine. 
    // CNG will allocate the memory for us.
    status = BCryptEnumContexts(CRYPT_LOCAL, &uSize, &pContexts);
    if (NT_SUCCESS(status))
    {
        // Enumerate the context identifiers.
        for (ULONG uContextIndex = 0;
            uContextIndex < pContexts->cContexts;
            uContextIndex++)
        {
            wprintf(L"\nContext [ %s ]:\n",
                pContexts->rgpszContexts[uContextIndex]);

            // Get the functions for this context.
            // CNG will allocate the memory for us.
            PCRYPT_CONTEXT_FUNCTIONS pContextFunctions = NULL;
            status = BCryptEnumContextFunctions(
                CRYPT_LOCAL,
                pContexts->rgpszContexts[uContextIndex],
                NCRYPT_SCHANNEL_INTERFACE,
                &uSize,
                &pContextFunctions);
            if (NT_SUCCESS(status))
            {
                // Enumerate the functions.
                for (ULONG i = 0;
                    i < pContextFunctions->cFunctions;
                    i++)
                {
                    wprintf(L"\t%s\n",
                        pContextFunctions->rgpszFunctions[i]);
                }

                // Free the context functions buffer.
                BCryptFreeBuffer(pContextFunctions);
            }
        }

        // Free the contexts buffer.
        BCryptFreeBuffer(pContexts);
    }

    return status;
}
© www.soinside.com 2019 - 2024. All rights reserved.