Мы использовали российский криптопровайдер, который был обязательным для работы с госзакупками после импортозамещения. Я знал, что на прошлой неделе выходило обновление безопасности, и подозревал, что проблема в нем. Но как быстро это исправить, когда каждый час простоя стоит нам сотни тысяч рублей?
Первым делом я проверил статус криптопровайдера: sudo systemctl status cryptopro — сервис работал. Проверил список сертификатов: certmgr -list — сертификаты были на месте, срок действия не истек. Но почему тогда система их не видит?
Я открыл консоль разработчика в браузере (Chrome) и увидел ошибку: "Failed to load plugin: libcpkcs11-srv.so: cannot open shared object file: No such file or directory". Ага! После обновления путь к библиотеке изменился. Раньше библиотека лежала в /opt/cprocsp/lib/amd64/, а теперь ее перенесли в /usr/lib/cprocsp/amd64/.
Решение было простым, но требовало точности. Я нашел правильный путь к новой библиотеке:
sudo find / -name libcpkcs11-srv.so 2>/dev/null
Результат показал: /usr/lib/cprocsp/amd64/libcpkks11-srv.so (обратите внимание на опечатку в имени файла — это важно!)
Теперь нужно было обновить конфигурацию плагина для браузера. Я отредактировал файл конфигурации:
sudo nano /etc/opt/cprocsp/plugin/firefox.json
Внутри я заменил старый путь на новый, исправив опечатку в имени файла. После этого перезапустил браузер и... сертификаты появились! Но сайт ЕИС все равно ругался на сертификат.
Тут я вспомнил еще одну особенность российских криптопровайдеров — нужно обновить доверенные корневые сертификаты. Выполнил:
sudo certmgr -inst -store uRoot -file /opt/cprocsp/keys/root/rootcerts.cer
sudo systemctl restart cryptopro
После этого перезагрузил страницу — и все заработало. Мы успели подать заявку за 40 минут до окончания приема.
Самый ценный урок из этой истории: всегда делайте резервную копию конфигурационных файлов перед обновлением криптопровайдера. И проверяйте работу ЭЦП не только в браузере, но и в консоли с помощью csptest -sfs. Это простая команда покажет, видит ли система вашу подпись и может ли с ней работать.
Теперь я настроил автоматическое уведомление о выходе обновлений для криптопровайдера и тестирую их сначала на тестовом сервере. Лучше потратить час на тестирование, чем потерять контракт на миллионы.