Если вы используете IIS, похоже, вы можете добавить некоторые расширенные записи в журналы IIS.
https://cloudblogs.microsoft.com/microsoftsecure/2017/09/07/new-iis-functionality-to-help-identify-weak-tls-usage/
плагиат ... э ... цитируя потомство:
Чтобы включить эту новую функцию, эти четыре серверные переменные должны быть настроены как источники настраиваемых полей в 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 все четыре поля будут зарегистрированы как '-'.
Я снова:
Похоже, что CRYPT_PROTOCOL
может быть 400
для TLS1.2, 40
для TLS 1.0, 10
для SSLv3 в текстовых журналах IIS.
Из примеров видно, что в каждом запросе могут быть значения ServerVariable, если вы хотите попытаться включить их внастраиваемые журналы, которые немного проще настроить, чем сам журнал IIS.
Отличный вопрос!и я могу иметь возможность использовать этот ответ сам.
Итак ... похоже, вы МОЖЕТЕ получить ServerVariables из WebAPI, но только неожиданным способом.Смотрите фрагмент ниже.Кажется, если вы перечислите коллекцию или вызовете свойство Keys, все, что вы получите, это некоторое подмножество переменных.Но если вы явно запросите переменные CRYPT_ * перед любым из этих действий, то вы can indeed
получите их от своего контроллера.Я пытался сделать это на WebAPI 5.2.6, ориентируясь на .net 4.6.2, работающую под IIS в качестве облачной службы Azure Classic.Я предлагаю попробовать это и посмотреть, работает ли это для вас.Если у вас есть более свежая справка по серверным переменным, отредактируйте этот ответ и замените 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");
}
}