Доступ к REST API, работающему на сервере, с использованием самоподписанного сертификата из приложения Android - PullRequest
0 голосов
/ 20 марта 2019

Я работаю над приложением для Android, которое взаимодействует с REST API на моем сервере, которое подписано самостоятельно.Мой API работает на узле с использованием фреймворка Loopback.

Прямо сейчас мой API не защищен, поэтому я могу отправлять запросы из моего приложения для Android, и он работает нормально.Только мой домен защищен.API работает на порте 3000. И теперь возникает проблема.

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

1.case

Когда пользователь открывает ссылку сброса в браузере, он попадает на HTTPS URL.Когда он вводит новый пароль и нажимает кнопку для изменения пароля, он отправляет запрос из HTTPS в незащищенный API по HTTP.

Это дает мне ошибку:

The page at xxx was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint xxx. This request has been blocked; the content must be served over HTTPS.

Вот моя функция:

function post() {
    const urlParams = new URLSearchParams(window.location.search);
    const token = urlParams.get('access_token');
    console.log("TOKEN:", token);
    const user = {
        newPassword: document.querySelector('#input-password-check').value,
    }
    const http = new XMLHttpRequest()
    http.open('POST', 'http://www.example.com:3000/api_path/reset-password')
    http.setRequestHeader('x-access-token', token)
    http.send(JSON.stringify(user)) 
    http.onload = function() {

        alert(http.responseText)
    }
}

2.case

Когда я защищаю свой API, чтобы и мой домен, и API были HTTPS, я мог сбросить пароль из сети, но когда я отправляю запрос, я получаю ERR_CERT_AUTHORITY_INVALID.А также из приложения для Android, так как он не доверяет моему сертификату.И я не смог найти решение, как заставить мое приложение доверять ему.

Я должен также сказать, что я парсирую токен из URL, и при сбросе пароля в приложении этот токен отправляется в заголовке, и я отправляюзапрос из моего приложения в Java ... Не открывается веб-сайт.Все идет через retrofix + rxjava.

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

1 Ответ

0 голосов
/ 20 марта 2019

Мне удалось решить эту проблему с помощью сертификатов Lets Encrypt.Ранее на моем сервере была установлена ​​программа Encrypt, но я создал новые самозаверяющие сертификаты для Loopback API, что было глупо, и я не знал, что я делаю.

Так что не забудьте установить путь сертификата для петлевого API к шифрованию.

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