darksky api: требования TLS изменены, библиотека больше не работает - PullRequest
0 голосов
/ 14 марта 2020

Я использовал эту C# библиотечную оболочку для darksky API:

 https://github.com/amweiss/dark-sky-core

В моей реализации я опрашиваю каждые 3 минуты, чтобы получить прогноз, который я использую в своей домашней сети термостатов. :

    async void GetForecast()
    {
        // https://darksky.net/dev/docs#forecast-request
        float Temp, DewPoint, WindSpeed, WindChill, Humidity, HeatIndex;
        var client = new DarkSkyService("user-api-key");
        try
        {
            Forecast fc = await client.GetWeatherDataAsync(38.329444, -87.412778);
            Temp = (float)Math.Floor(fc.Currently.Temperature);
            PublishTemp(Temp);

            // for database, get temp,  dewpoint, calculate windchill, calculate heatindex
            DewPoint = (float)fc.Currently.DewPoint;
            WindSpeed = (float)fc.Currently.WindSpeed;
            Humidity = (float)fc.Currently.Humidity;  // range: 0-1
            WindChill = (float)CalculateWindChill(Temp, WindSpeed);
            HeatIndex = (float)CalculateHeatIndex(Temp, Humidity);
            SaveToDatabase(Temp, DewPoint, WindChill, HeatIndex);

            RxForecast = true;
            if (DateTime.Now.Hour != LastForecastHour)
            {
                LatestForecast = fc;
                LastForecastHour = DateTime.Now.Hour;
                PublishForecasts();
            }
        }
        catch (Exception s) {
            RxForecast = false;
        }
     ForecastWaitTime = RxForecast ? FAST_FORECAST_CYCLE : SLOW_FORECAST_CYCLE;
    }

Это работало нормально около 4 месяцев, прежде чем оно внезапно перестало работать неделю go. Служба поддержки Darksky заявила, что они недавно внедрили обновления безопасности и больше не поддерживают самые распространенные шифры TLS (цитирование):

- TLS 1.0
- TLS 1.1
- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
- TLS_RSA_WITH_AES_128_GCM_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA256
- TLS_RSA_WITH_AES_128_CBC_SHA
- TLS_RSA_WITH_AES_256_GCM_SHA384
- TLS_RSA_WITH_AES_256_CBC_SHA256
- TLS_RSA_WITH_AES_256_CBC_SHA

You can definitively determine whether your app works with the new SSL permissions by testing against
https://api.darksky.net:4433/. If you decide to update SSL on your end, you can test the API by sending a request here: https://api.darksky.net:4433/v1/status.txt.

Note that we will be making additional security-related updates in the coming weeks so there will be more changes in the near future. We don't have a notification system for alerting users to changes made on our backend but we do offer a feed for our status page, which often includes information about updates that have been or will be made (https://status.darksky.net/). We'll do our very best to make sure we communicate them as we're able to. Additionally, to avoid future disruptions we strongly recommend switching to one of the following, which should carry you through any of the additional security updates that will be applied in the near future:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

Я не знаю, какие изменения мне нужно внести в этот код для «обновления TLS», и я не могу получить больше информации от darksky. Между тем, моя сигнализация находится в тупике.

Одна вещь, которую я не понимаю, это то, что, если я наберу этот URL в браузере:

https://api.darksky.net/forecast/my-api-key/38.329444, -87.412778

Она работает нормально, и немедленно возвращает огромную строку прогноза JSON. Попытка сделать это с HttpWebRequest, HttpClient или WebClient , в коде приводит к различным исключениям «произошли ошибки». В целом, я бы предпочел использовать библиотеку для возвращаемого объекта Forecast , который легко интерпретировать.

Является ли это обновление TLS чем-то, что я делаю на системном уровне, вне среды разработки?

Или есть ли какие-нибудь альтернативы Даркскому, на которых я мог бы перейти?

1 Ответ

0 голосов
/ 15 марта 2020

У вас есть два варианта:

1: обновить используемую библиотеку и перекомпилировать. Об этой проблеме сообщалось на странице github:

https://github.com/jcheng31/DarkSkyApi/issues/28

2: Это немного трудоемко, но вы можете переместить модуль прогноза в Linux / Raspberry Pi, где TLS12 уже настроен. Для этого вам придется переписать подпрограмму в Python. Я убедился, что этот подход будет работать в моей собственной сети PI.

...