wladich / nakarte

Source code of site http://nakarte.me
MIT License
160 stars 38 forks source link

Добавить сертификат Росреестра в proxy.nakarte.me #1204

Closed svintuss closed 1 year ago

svintuss commented 1 year ago

Добрый день. Скажите, пожалуйста, возможно ли установить сертификат сайта Росреестра (сертификат Минцифры) на хост proxy.nakarte.me? Например, если самостоятельно добавить карту https://pkk.rosreestr.ru в nakarte.me, то сама карта в браузере отображается, но экспорт в .JNX не работает.

Сам сертифиат можно скачать тут: http://reestr-pki.ru/cdp/subca_ssl_rsa2022.crt

wladich commented 1 year ago

Проблема не в сертификате, а в том, что сайт pkk.rosreestr.ru блокирует соединения по IP, предположительно все из за рубежа. А мой сервер находится как раз с другой стороны границы от росреестра...

$ nmap -p 80,443 pkk.rosreestr.ru -Pn
Starting Nmap 7.80 ( https://nmap.org ) at 2023-06-18 20:36 CEST
Nmap scan report for pkk.rosreestr.ru (217.77.104.195)
Host is up.
rDNS record for 217.77.104.195: 195-104-77-217.host.cirex.ru

PORT    STATE    SERVICE
80/tcp  filtered http
443/tcp filtered https

Nmap done: 1 IP address (1 host up) scanned in 3.73 seconds
svintuss commented 1 year ago

Печально, спасибо за ответ. Просить найти решение этой проблемы будет уже чересчур. Вы могли бы подсказать, как можно самостоятельно настроить CORS-прокси аналогичный proxy.nakarte.me? Может быть, есть подробная инструкция или готовый репозиторий с настройками?

wladich commented 1 year ago

Возможных решений я вижу 3:

  1. Убедить админов сайта росреестра перестать страдать фигнёй (блокировать зарубежный трафик).
  2. поднять лично для себя прокси, не обязательно с CORS, и в кастомных слоях использовать его.
  3. Посмотреть, есть ли CORS заголовки в их тайлах, и если есть, то сказать мне, я добавлю домен росреестра в исключения, чтобы запросы ходили из браузера напрямую на pkk.rosreestr.ru, без proxy.nakarte.me

Зачем вам CORS-прокси я не совсем понимаю, если только зеркало nakarte поднимать... Но ответ есть в https://github.com/wladich/nakarte/issues/600

svintuss commented 1 year ago

Спасибо!

Откровенно говоря, к сожалению, я пока плохо понимаю, что делает CORS-прокси. Зеркало nakarte.me я поднял, чтобы добавить retromap.ru, но не смог изменить referer и origin заголовки в запросах.

Запрос к тайлам росреестра выглядит так:

:method: GET
:scheme: https
:authority: pkk.rosreestr.ru
:path: /GISWebServiceSE/service.php?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=PKKm&STYLE=default&TILEMATRIXSET=GoogleMapsCompatible&TILEMATRIX=4&TILEROW=3&TILECOL=1&FORMAT=image%2Fpng
Accept: image/webp,image/avif,video/*;q=0.8,image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9
Cache-Control: no-cache
Connection: keep-alive
Cookie: session-cookie=176a990aac4aac0b3d1da55fe59e4e02ebfd83c7ca4586f7cbc9d09bedab26c4530bd69058b374fd1ebb1facb2407b9e
Host: pkk.rosreestr.ru
Origin: https://pkk.rosreestr.ru
Pragma: no-cache
Referer: https://pkk.rosreestr.ru/
Sec-Fetch-Dest: image
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15
wladich commented 1 year ago

Покажите пожалуйста заголовки ответа сервера

Про CORS: если в ответе сервера нет заголовка "access-control-allow-origin" с подходящим значением, то тайл нельзя использовать для создания PDF или JNX.

Мы делаем запрос вместо сервера к CORS-прокси, указывая ему адрес нужного нам тайла. Прокси запрашивает этот тайл, добавляет нужный заголовок access-control-allow-origin и возвращает нам.

Для ознакомления с технологией CORS (не прокси): https://en.wikipedia.org/wiki/Cross-origin_resource_sharing

При запросе из браузера вы не можете изменить Referer и Origin

svintuss commented 1 year ago

Спасибо, буду разбираться.

Ответ сервера ниже:

:status: 200
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With, Set-Cookie, Cookie
Access-Control-Allow-Methods: POST, OPTIONS, GET, PUT, DELETE
Access-Control-Allow-Origin: https://pkk.rosreestr.ru
Cache-Control: public, max-age=86400
Content-Type: image/png
Date: Wed, 21 Jun 2023 07:42:39 GMT
Server: nginx/1.20.1
Vary: Accept-Encoding
x-cache-source: Redis
x-cache-status: HIT
x-t: 21/Jun/2023:10:42:39.895
x-ta: -2
wladich commented 1 year ago

Этот ответ, я так понимаю, при просмотре на их сайте. Посмотрите ещё, какие будут заголовки при запросе из кастомного слоя nakarte или от вашего зеркала

svintuss commented 1 year ago

Вот ответ при подключении к nakarte.me:

:status: 200
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With, Set-Cookie, Cookie
Access-Control-Allow-Methods: POST, OPTIONS, GET, PUT, DELETE
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=86400
Content-Type: image/png
Date: Fri, 23 Jun 2023 20:18:12 GMT
Server: nginx/1.20.1
Set-Cookie: session-cookie=176b622660e34d2b3d1da55fe59e4e02ced7ca5aa80a4ad5c66e3353c5472ea82d8b2939d0ccaa0aa31ed47fc62c9e38; Max-Age=86400; Path=/; HttpOnly; Secure
Vary: Accept-Encoding
x-cache-source: Redis
x-cache-status: HIT
x-t: 23/Jun/2023:23:18:12.586
x-ta: 0
wladich commented 1 year ago

Судя по заоловкам, должно работать и без прокси. Добавил сайт росреестра в исключения, выложил тестовую версию на https://stage.nakarte.me/ Пожалуйста проверьте, как работает скачивание pdf и jnx

svintuss commented 1 year ago

Спасибо, проверил, работает.

wladich commented 1 year ago

Выложил на прод