如果我有十二个端点,并且我的WebAPI服务配置为<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<textarea class="inbox_message_textarea"></textarea>
和TLS 1.1
,如何检查每个传入的端点请求以查看协商了哪个版本?
因此,如果我端点的使用者当前仅支持TLS 1.2
和TLS 1.0
,他们(显然吗?)将协商TLS 1.1
握手。但是,如果其他消费者支持TLS 1.1
和TLS 1.2
,他们(显然吗?)将协商TLS 1.3
握手。
我想跟踪我所有的消费者,以了解正在协商哪些握手。我该如何执行每个请求?
答案 0 :(得分:1)
如果您使用的是IIS,则可以将一些扩展日志记录添加到IIS日志中。
pla窃... er ...引用后代:
要启用此新功能,这四个服务器变量需要 被配置为IIS中自定义字段的源 applicationHost.config。可以在以下任一位置配置自定义日志记录 服务器级别或站点级别。这是一个示例站点级配置:
<site name="Default Web Site" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="C:\inetpub\wwwroot" />
</application>
<bindings>
<binding protocol="https" bindingInformation="*:443:" />
</bindings>
<logFile>
<customFields>
<clear />
<add logFieldName="crypt-protocol" sourceName="CRYPT_PROTOCOL" sourceType="ServerVariable" />
<add logFieldName="crypt-cipher" sourceName="CRYPT_CIPHER_ALG_ID" sourceType="ServerVariable" />
<add logFieldName="crypt-hash" sourceName="CRYPT_HASH_ALG_ID" sourceType="ServerVariable" />
<add logFieldName="crypt-keyexchange" sourceName="CRYPT_KEYEXCHANGE_ALG_ID" sourceType="ServerVariable" />
</customFields>
</logFile>
</site>
每个SSL信息字段是一个十六进制数字,它映射到 安全协议版本或密码套件算法。对于HTTP 纯文本请求,所有四个字段都将记录为“-”。
又是我:
在IIS文本日志中,对于TLS1.2,CRYPT_PROTOCOL
可能是400
,对于TLS 1.0可能是40
,对于SSLv3,可能是10
。
在示例中,如果您想尝试将自定义日志包含在比IIS日志本身更容易自定义的日志中,则看起来每个请求上可能都有ServerVariable值。
好问题!我可能有机会亲自使用这个答案。
所以...看来您可以从WebAPI获取ServerVariables,但只是以一种意外的方式。请参见下面的代码段。看来,如果枚举集合或调用Keys属性,您得到的仅仅是变量的一些子集。但是,如果您在任何这些操作之前明确请求CRYPT_ *变量,则可以can indeed
从控制器中获取它们。我在WebAPI 5.2.6上对此进行了尝试,该WebAPI定位在IIS下作为Azure经典云服务运行的.net 4.6.2。我建议尝试一下,看看是否适合您。如果您有关于服务器变量的最新参考,请编辑此答案,并用链接替换https://docs.microsoft.com/en-us/iis/web-dev-reference/server-variables。
以下在列出的环境撰写本文之日为我工作。将来可能会改变。对于生产,我肯定会将其转换为辅助方法。
if (Request.Properties.TryGetValue("MS_HttpContext", out object context))
{
if (context is HttpContextWrapper wrapper)
{
var v = wrapper.Request?.ServerVariables;
if (v != null)
{
var headers = response.Headers;
const string CRYPT_PROTOCOL = nameof(CRYPT_PROTOCOL);
try
{
headers.Add($"SV_{CRYPT_PROTOCOL}", $"[{v[CRYPT_PROTOCOL].Replace("\r", "0x0D").Replace("\n", "0x0A")}]");
}
catch (Exception ex)
{
headers.Add($"SV_{CRYPT_PROTOCOL}", ex.Message);
}
foreach (string key in v.AllKeys)
{
headers.Add($"SV_{key}", v[key].Replace("\r", "0x0D").Replace("\n", "0x0A"));
}
headers.Add($"SV_DONE", "All Server Variables Replaced");
}
}