srihash.org не работает для файла.js с caesiumjs.org

Я сгенерировал следующий код, используя https://www.srihash.org/ для URL https://cesiumjs.org/releases/1.21/Build/Cesium/Cesium.js:

<script src="https://cesiumjs.org/releases/1.21/Build/Cesium/Cesium.js"
integrity="sha384-CAN0Iz/H09oATWPeJZclEOAM/nF1cq3DSuAbxi9IMbZIx8m3ERInrpuk11n+lHRq"
crossorigin="anonymous"></script>

При попытке загрузить страницу, содержащую скрипт проверки целостности, я получаю следующую ошибку в Chrome 50 в Windows:

Не удалось найти действительный дайджест в атрибуте "целостность" для ресурса " https://cesiumjs.org/releases/1.21/Build/Cesium/Cesium.js" с вычисленной целостностью SHA-256 "vGCl/67DuYY5UzwNQGGpYh2gztA4PhvD+I4pcX7TWcU=". Ресурс был заблокирован.

Я также попытался сгенерировать хеш вручную (опять же, в Windows, openssl-1.0.2h), используя:

openssl dgst -sha384 -binary Cesium.js | openssl base64 -A

в результате чего:

X5EHALkqk8r9hyCKwav7y+6BOUg2dRH90/qSxdytan2SQQB9g8jsYYWLDKzNeKx4

Этот хэш работает при загрузке Cesium.js с Chrome. Тем не менее, возникает вопрос, какой из двух хэшей является правильным... Исключая маловероятную возможность MITM-атаки, я предполагаю, что это как-то связано с окончаниями строк или кодированием. Cesium.js кажется, что в Windows есть окончания строк, и HTTP-ответ о загрузке его в Chrome прилагается ниже.

Как объяснить разницу между двумя хэшами и какой из них правильный?


Заголовки ответа HTTP для Cesium.js:

HTTP/1.1 200 OK
Cache-Control: max-age=172800
Content-Length: 494091
Content-Type: application/javascript
Content-Encoding: gzip
Last-Modified: Mon, 02 May 2016 15:12:32 GMT
Accept-Ranges: bytes
Server: Microsoft-IIS/8.5
x-amz-id-2: giU2DeYQi87OAkuyr2qKeZx8KRihIY7TV9qcJShi/YVl+C5K50mHeSLFWYhA8k5Oc+A50Oxjh/4=
x-amz-request-id: 112881D9D52248F6
X-Powered-By: ARR/3.0
X-UA-Compatible: IE=edge
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type,X-Requested-With
Date: Mon, 30 May 2016 12:49:46 GMT

2 ответа

Решение

После некоторых копаний я обнаружил, что хеш, сгенерированный srihash.org, неверен.

Неправильный результат обусловлен сочетанием двух факторов:

Как вы и подозревали, это явно хромовая ошибка, связанная с кодированием. Другие люди сообщают о проблеме для других сценариев.

Проверьте эту страницу ошибок на несоответствия между chrome и openssl.

В качестве временного решения я бы добавил

vGCl/67DuYY5UzwNQGGpYh2gztA4PhvD+I4pcX7TWcU=

к вашим доверенным атрибутам целостности SHA256 (после проверки, что загруженный скрипт действительно правильный).

Chrome, вероятно, вычисляет этот хэш перед распаковкой, со специальной кодировкой.

Другие вопросы по тегам