Как доверять всем моим самозаверяющим сертификатам в моем приложении - PullRequest
2 голосов
/ 14 февраля 2020

У меня есть приложение Android, которое связывается с моим хост-сервером. Приложение и сервер обмениваются данными через SSL. Каждый год мне приходится обновлять (самоподписанный) сертификат на хост-сервере. Каждый раз, когда срок действия сертификата истекает, я должен соответствующим образом обновлять свое приложение Android, создавая собственный TrustManager и напрямую доверяя новому сертификату. Это работает отлично.

Дело в том, что я не хочу изменять свое приложение Android каждый раз, когда истекает срок действия моего сертификата. Итак, вопрос в том, как мне доверять всем самозаверяющим сертификатам, которые я выдаю? Опять же, только самозаверяющие сертификаты от меня.

Это ограничения:

  1. Могут использоваться только самозаверяющие сертификаты
  2. Я могу создавать только новые Сертификаты действительны в течение 12 месяцев максимум

Вот как я генерирую сертификат:

openssl req -newkey rsa:4096 \
        -x509 \
        -sha256 \
        -days 365 \
        -nodes \
        -out selfSignedCert.crt \
        -keyout newPrivate.key

Буду признателен за вашу помощь.

Ответы [ 2 ]

5 голосов
/ 26 февраля 2020

Создание сертификата CA со сроком действия 10 лет. Подпишите сертификат сервера с сертификатом CA. Сертификат сервера должен иметь срок действия 1 год или менее. В вашем приложении включите сертификат CA и добавьте его в свой собственный TrustManager. Теперь вам нужно выпускать новое приложение только каждые 10 лет после истечения срока действия сертификата CA. Ваш TrustManager должен принять все сертификаты, которые подписаны вашим сертификатом CA.

Подробные шаги: 1. Создайте ключ CA

    sudo openssl genrsa -out  CA/rocketCA.key 1024
Создание сертификата CA Запрос
    openssl req -new -key CA/rocketCA.key -out CA/rocketCA.csr
Сам подписать сертификат CA
    sudo openssl x509 -req -days 3650 -in CA/rocketCA.csr -out CA/rocketCA.crt -signkey CA/rocketCA.key
Проверка содержимого сертификата CA
    openssl x509 -in CA/hitenCA.crt -text
создайте закрытый ключ веб-сервера, используя полное имя DNS, например rocket.example.com, ИЛИ используйте IP-адрес. Когда вас попросят ввести пароль, введите пароль, который вы можете запомнить.
    sudo openssl genrsa -des3 -out server/keys/rocket.example.com.key 1024
создать запрос сертификата веб-сервера, используя то же полное DNS-имя / IP-адрес, который вы использовали для закрытого ключа
    openssl req -new -key server/keys/rocket.example.com.key -out server/requests/rocket.example.com.csr
подписать сертификат веб-сервера ключом CA
    sudo openssl ca -days 3650 -in server/requests/rocket.example.com.csr -cert CA/rocketCA.crt -keyfile CA/rocketCA.key -out server/certificates/rocket.example.com.crt
Чтобы проверить содержимое сертификата веб-сервера, используйте следующую команду
    openssl x509 -in server/certificates/rocket.example.com.crt -text

Ключевые значения для поиска:

Subject CN=rocket.example.com
Issuer CN=rocketCA

Ссылка для подробных шагов: (Вы не требуется взаимная аутентификация)

http://www.cafesoft.com/products/cams/ps/docs32/admin/ConfiguringApache2ForSSLTLSMutualAuthentication.html

2 голосов
/ 14 февраля 2020

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

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