10
март
2022
Mozilla Firefox: замена USER_AGENT на Яндекс Браузер
17:14

Mozilla Firefox: замена USER_AGENT на Яндекс Браузер

10 март 2022 17:14

В последнее время некоторые веб сайты отказываются работать, если используемый браузер - не Яндекс.
Также, Яндекс рекомендуется для сайта Госуслуг (www.gosuslugi.ru). Но я хочу продолжать использовать Mozilla Firefox, т.к. он лучше поддаётся настройке и имеет полезные дополнения в магазине.

Очевидно, сервер проверяет строку HTTP-заголовка запроса клиента USER-AGENT, и если браузер не Яндекс Браузер, выводится сообщение о невозможности дальнейшей работы. Пример: сервис "360" от Яндекс для работы в "Личном кабинете" требует отечественного браузера. Конечно, можно установить Яндекс бороться, но можно сменить USER-AGENT на тот, который хочет видеть сайт.

Другая причина - сайт "Госуслуг" - браузеры отличные от Яндекс Браузер (разработчика ООО «ЯНДЕКС») и Атом (разработчика ООО «Мэйл.Ру») могут перестать работать из-за иностранного SSL-сертификата Sectigo RSA Domain Validation Secure Server CA. См. вторую часть данной статьи.

Москва. 9 марта. INTERFAX.RU - Пользователям Госуслуг рекомендуется установить браузеры, которые поддерживают российский сертификат безопасности связи, например, "Яндекс.Браузер" и "Атом", для лучшего доступа к порталу и другим сайтам, говорится в сообщении Минцифры.

Из-за одного сайта лично я не буду устанавливать DEB-файл с закрытым исходным кодом.

Часть 1. Замена USER AGENT

  1. Установил надстройку с официального магазина расширений Firefox: "Случайный User Agent" от автора Paramtamtam.
  2. Добавил в её настройки список User Agent, соответствующие Яндексу (нашёл их в сети) - 16 штук будут меняться по кругу случайным образом:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 YaBrowser/22.1.0 Yowser/2.5 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 YaBrowser/22.1.0 Yowser/2.5 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, как Gecko) Chrome/96.0.4664.174 YaBrowser/22.1.5.812 Yowser/2.5 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 YaBrowser/19.6.3.185 Yowser/2.5 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 YaBrowser/19.6.2.599 Yowser/2.5 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 YaBrowser/16.10.0.2564 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 YaBrowser/16.9.1.1192 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 YaBrowser/16.6.1.30117 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 YaBrowser/17.3.2.414 (beta) Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.12785 YaBrowser/13.12.1599.12785 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 YaBrowser/13.10.1500.9323 Safari/537.36
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1101.212 YaBrowser/1.5.1101.212 Safari/537.4
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1104.222 YaBrowser/1.5.1104.222 Safari/537.4
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1104.222 YaBrowser/17.4.1.919 Safari/537.4
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 YaBrowser/17.6.0 Safari/537.36
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 YaBrowser/14.4.1750.13414 Safari/537.36

ext

  1. Нажал кнопку "Сохранить изменения".
  2. Перезапустил браузер
  3. Проверка: я написал небольшой php-файл и запустил его на своём веб-сервере Apache

<?php

$user_agent = $_SERVER["HTTP_USER_AGENT"];

echo $user_agent;

?>

  • текст сохранил в домашнем каталоге (~) в файле "ua.php".

Если нет веб-сервера, для проверки можно из командной строки запустить встроенный веб-сервер PHP:

cd ~
php -S localhost:8000

Проверка: запустить браузер и перейти на адрес http://localhost:8000/ua.php

Результат:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.102 YaBrowser/17.6.0 Safari/537.36

Ещё один способ проверки User Agent:
Также, свой браузер можно узнать на сайте поисковика DuckDuckGo:

Дополнение от 28.11.2022: строки User Agent новых версий Yandex Browser 22.7.3 и 22.11.0, с которыми пускают все сайты РФ в 2022 году:

Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.167 YaBrowser/22.7.3.829 Yowser/2.5 Safari/537.36

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 YaBrowser/22.11.0.2506 Yowser/2.5 Safari/537.36


Часть 2. Установка сертификатов сайта Госуслуг в доверенные

Вторую часть можно не выполнять. Это "аварийный" вариант на случай, если SSL сертификат выданный сайту "Госуслуг" перестанет действовать. Добавление всех сертификатов Госуслуг в "доверенные корневые центры сертификации" (CA) по моему мнению должно решить подобную проблему.

Возможны два варианта:

  1. Если SSL сертификат сервера истечёт по времени. В этом случае, представленный способ не годится, ведь сертификат прекратит работать по дате. Но к тому времени (7 января 2023) появится удостоверяющий центр на территории Российской Федерации, или следующая версия Mozilla FireFox начнёт доверять сайту Gosuslugi.ru (после даты окончания действия SSL сертификата 7 января 2023).

  2. Если компания Sectigo Limited, которая выдала сертификат для Госуслуг, из-за санкций произведёт отзыв своего SSL-сертификата сайта *.gosuslugi.ru (что маловероятно): - как и в случае банка ВТБ будет выпущен "самостоятельно подписанный" (самоподписанный) SSL сертификат, которому будет доверять Яндекс Браузер, но не будет доверять Mozilla Firefox.

В браузере FireFox, если будет проблема с доверием, всегда есть возможность добавить сертификат в исключения и продолжить работу.

Предлагаю ещё один способ: можно попытаться добавить новый (подписанный РФ) сертификат в доверенные на данном ПК.

Разбор задачи:
Предполагаю, что нужно
1) сохранить все сертификаты с сайта в формате PEM: основной сертификат сайта и все сертификаты в цепочке доверия;
2) преобразовать PEM с CRT
3) добавить в доверенные сертификаты.

  1. Нашел замечательный способ сохранения всех сертификатов с сайта в файлы PEM

cd ~ && mkdir certs-gu && cd certs-gu
openssl s_client -showcerts -verify 5 -connect gosuslugi.ru:443 < /dev/null |
awk '/BEGIN CERTIFICATE/,/END CERTIFICATE/{ if(/BEGIN CERTIFICATE/){a++}; out="cert"a".pem"; print >out}'
for cert in *.pem; do
newname=$(openssl x509 -noout -subject -in $cert | sed -nE 's/.*CN ?= ?(.*)/\1/; s/[ ,.*]/_/g; s/__/_/g; s/_-_/-/; s/^_//g;p' | tr '[:upper:]' '[:lower:]').pem
echo "${newname}"; mv "${cert}" "${newname}"
done

Источник - https://unix.stackexchange.com/questions/

Разбор принципа работы данного bash - скрипта:
Первая часть:

  • вызов программы openssl в варианте s_cleint, команды показывает SSL-сертификаты
    openssl s_client -showcerts -verify 5 -connect gosuslugi.ru:443
    и выводит цепочку сертификатов глубиной до 5 штук с сайта gosuslugi.ru:443 (SSL HTTPS) в стандартный поток вывода (по умолчанию на экран).
    кусок < /dev/null нужен для завершения команды (до надписи DONE).

Вторая часть:

  • awk '/BEGIN/,/END/ вырезает лишнее за границами обозначенными BEGIN CERTIFICATE и END CERTIFICATE
    | awk '/BEGIN/,/END/{ if(/BEGIN/){a++}; out="cert"a".pem"; print >out}'; for cert in *.pem; do newname=$(openssl x509 -noout -subject -in $cert | sed -nE 's/.*CN ?= ?(.*)/\1/; s/\[ ,.*\]/_/g; s/__/_/g; s/_-_/-/; s/^\_//g;p'
    создает по границам BEGIN несколько файлов с именами cert1.pem, cert2.pem.... cert5.pem (где 1, 2, 3 задаются переменной a++
    и каждый файл подается на вход второй команде openssl в варианте запуска x509 (работа с сертификатами x509)

Для помощи по ключам команды, необходимо выполнить вызов openssl s_client --help или openssl x509 --help

где фрагмент "openssl x509" - промежуточная команда для вывода имени сертификата в стандартный вывод.
openssl x509 -noout -subject -in $cert
где $cert - переменная, содержащая имя входого файла (cert1.pem, cert2.pem...).
Команда "openssl x509 -noout -subject" отвечает за извлечение поля "subject" из SSL-сертификата как написано в примерах openssl

Вызов:
openssl x509 -noout -subject -in cert1.pem

Результат:
subject=CN = *.gosuslugi.ru

После символа конвейера "|" следует вызов текстового процессора sed, который удаляет служебные символы буквы "CN":
| sed -nE 's/.*CN ?= ?(.*)/\1/; s/[ ,.*]/_/g; s/__/_/g; s/_-_/-/; s/^_//g;p'

На входе:
subject=CN = *.gosuslugi.ru
На выходе:
gosuslugi_ru

Подготовленное название сертификата передаётся третьему фрагменту - команде переименования файлов из "cert1.pem" в "gosusliugi.pem" и т. д.

tr '[:upper:]' '[:lower:]').pem; echo "${newname}"; mv "${cert}" "${newname}"


  1. Далее, я создал команду для преобразования PEM в DER (расширение CRT). Выполняется командой:

    for cert in *.pem; do $(openssl x509 -outform der -in $cert -out $cert.crt); done

Небольшой недостаток команды - двойное расширение ".pem.crt" у имени выходного файла cert_someting.pem.crt игнорируем, он пригодится в дальнейшем - для отличия подготовленных данным способом файлов .CRT от других файлов сертификатов.

  1. Затем я добавил (скопировал) сертификаты с расширением CRT в каталог "/usr/local/share/ca-certificates" - папка корневых удостоверяющих центров (CA):

    sudo cp *.crt /usr/local/share/ca-certificates

  2. Для регистрации новых SSL-сертификатов в системе необходимо установить пакет ca-certificates:

    sudo apt-get install ca-certificates

  3. Добавление CA сертификатов (корневых) в операционную систему производится командой:

    sudo update-ca-certificates

Результат:

Updating certificates in /etc/ssl/certs...
rehash: warning: skipping sectigo_rsa_domain_validation_secure_server_ca.pem.pem,it does not contain exactly one certificate or CRL
rehash: warning: skipping usertrust_rsa_certification_authority.pem.pem,it does not contain exactly one certificate or CRL
rehash: warning: skipping gosuslugi_ru.pem.pem,it does not contain exactly one certificate or CRL
3 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...

Adding debian:gosuslugi_ru.pem.pem
Adding debian:sectigo_rsa_domain_validation_secure_server_ca.pem.pem
Adding debian:usertrust_rsa_certification_authority.pem.pem
done.
done.

  1. Проверка. Госуслуги как работали так и работают, в Mozilla Firefox.
    Полноценно проверить добавление цепочки от российских CA возможности нет, т.к. сертификат Sectigo действует до 31.12.2030.

Чтобы откатить изменения, нужно удалить из папки /usr/local/share/ca-certificates файлы сертификатов (3 шт.) имена которых указаны выше и выполнить команду update-ca-certificates.

cd /usr/local/share/ca-certificates
ls *.pem.crt | sudo rm -f
sudo update-ca-certificates


Добавление от 11.03.2022 - несколько слов по поводу самозаверенных (самоподписанных) сертификатов.

Самозаверенный сертификат выпускается владельцем ресурса, его невозможно отозвать.
(Например, как у попавшего под санкции банка ВТБ https://online.vtb.ru:443)
Такой сертификат нормально воспринимается Mozilla FireFox и никаких действий принимать не нужно. В крайнем случае, потребуется один раз добавить исключение в настройки Сертификатов.

  1. Вызывать меню три полоски справа - "Настройки"
  2. Ввести в строку поиска "Сертификаты"
    Настройки - Сертификаты
  3. Нажать кнопку "Просмотр сертификатов"
  4. На закладке "Серверы" нажать кнопку "Добавить исключение"
    Добавить исключение
  5. Ввести адрес сайта https://esia.gosuslugi.ru и нажать "Получить сертификат"
    Получить сертификат
  6. Установить галочку "Постоянно хранить это исключение", если хотим доверять сертификату сайта всегда.
  7. Нажать кнопку "Подтвердить исключение безопасности".

Если сертификат действующий, то браузер не даст сохранить исключение безопасности, т.к. это исключение не требуется.
certs4



Похожие публикации