Надежно проверить цепочку сертификатов JWS и домен - PullRequest
0 голосов
/ 27 февраля 2020

Я пишу код для проверки JWS из Google Safet yNet API, в Node.JS. Я был удивлен, что не нашел легкодоступного модуля для этого, поэтому я начал смотреть на простую проверку JWS с использованием доступных библиотек:

Прежде всего, Google говорит, что это необходимые шаги:

  1. Извлечение цепочки сертификатов SSL из сообщения JWS.
  2. Проверка цепочки сертификатов SSL и использование сопоставления имени хоста SSL для проверки того, что листовой сертификат был выдан для свидетельства имени хоста. android .com.
  3. Используйте сертификат для проверки подписи сообщения JWS.
  4. Проверьте данные сообщения JWS и убедитесь, что они совпадают с данными в исходном запросе. В частности, убедитесь, что отметка времени была проверена и что одноразовые номера, имя пакета и хэши сертификатов подписи приложения соответствуют ожидаемым значениям.

(из https://developer.android.com/training/safetynet/attestation#verify -attestation-response )

Я обнаружил node-jose , который предлагал простой интерфейс для проверки JWS, и у него была возможность разрешить встроенный ключ. Я пытаюсь точно понять, что делает этот процесс, и достаточно ли этого для проверки подлинности JWS?

const {JWS} = require('node-jose');
const result = await JWS.createVerify({allowEmbeddedKey: true}).verify(jws);

if (result.key.kid === 'attest.android.com') {
  // Are we good to go or do we manually need to verify the certificate chain further?
}

Действительно ли использование встроенного ключа проверяет цепочку встроенных сертификатов x5c с использованием root CA, а подпись под сертификатом? Или мне нужно явно получить ключ publi c от Google, чтобы проверить сертификат отдельно?

Затем, несколько связанный вопрос касается API Google для выполнения этой проверки: существует API https://www.googleapis.com/androidcheck/v1/attestations/verify?key=..., который выполняет эту точную операцию, но, похоже, он был удален из документов Google и может быть найден только по ссылке. в устаревших статьях и SO-ответах о Safet yNet, таких как , этот , который, по-видимому, предполагает, что этот API предназначен только для тестирования, а в процессе производства следует выполнить проверку сертификата самостоятельно. Кто-нибудь знает, хорош ли этот API для производственного использования или нет? Если все хотят вручную проверить JWS, я нахожу несколько удивительным, что Google не предлагает больше документации и примеров кода, поскольку этот процесс довольно подвержен ошибкам, и ошибки могут иметь серьезные последствия? До сих пор я нашел только некоторые сторонние примеры в Java, но нет примеров серверного кода от Google.

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