Приложение ASP.Net MVC по умолчанию TLS 1.0 - PullRequest
0 голосов
/ 19 сентября 2019

У нас есть приложение ASP.Net MVC, которое использует межсерверную связь для получения некоторой информации.

Когда мы запускаем установку в облаке AWS, запрос не выполняется, потому что по умолчанию WebRequest используетTLS 1.0, который мы отключили в нашей среде.Использование того же кода в другом проекте по умолчанию TLS 1.2.Кроме того, жесткое кодирование протокола в ServicePointManager устраняет проблему.

Есть ли у кого-нибудь опыт с аналогичной проблемой и ее основной причиной?Я хотел бы исправить это без жесткого кодирования протокола, потому что он не рассчитан на будущее.

1 Ответ

1 голос
/ 19 сентября 2019

У меня была похожая проблема, и в итоге я просто настроил ее как конфигурационный параметр:


//read setting as comma-separated string from wherever you want to store settings
//e.g. "SSL3, TLS, TLS11, TLS12"
string tlsSetting = GetSetting('tlsSettings')

//by default, support whatever mix of protocols you want..
var tlsProtocols = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

if (!string.IsNullOrEmpty(tlsSetting))
{
    //we have an explicit setting, So initially set no protocols whatsoever.
    SecurityProtocolType selOpts = (SecurityProtocolType)0;

    //separate the comma-separated list of protocols in the setting.
    var settings = tlsSetting.Split(new[] { ',' });

    //iterate over the list, and see if any parse directly into the available
    //SecurityProtocolType enum values.  
    foreach (var s in settings)
    {
        if (Enum.TryParse<SecurityProtocolType>(s.Trim(), true, out var tmpEnum))
        {
            //It seems we want this protocol.  Add it to the flags enum setting
            // (bitwise or)
            selOpts = selOpts | tmpEnum;
        }
    }

    //if we've allowed any protocols, override our default set earlier.
    if ((int)selOpts != 0)
    {
        tlsProtocols = selOpts;
    }
}

//now set ServicePointManager directly to use our protocols:
ServicePointManager.SecurityProtocol = tlsProtocols;

Таким образом, вы можете включать / отключать определенные протоколы, и если какие-либо значения добавляются или удаляются в enumопределение, вам даже не нужно повторно посещать код.

Очевидно, что разделенный запятыми список вещей, которые отображаются на перечисление, немного недружелюбен в качестве параметра, но вы могли бы установить какой-то видкартографирование или что-то еще, если вам нравится, конечно ... это хорошо соответствовало нашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...