Установка плагина GOST Proxy и компонентов КриптоПро#

Для использования модуля GOST Proxy (service_gost_proxy) необходимо выполнить установку плагина "GOST Proxy" и компонентов КриптоПро в соответствии с приведенным ниже описанием.

  1. Установка "GOST Proxy" плагина.

    Для установки плагина "GOST Proxy" необходимо выполнить скрипт установки installPlugin.sh. Пример запуска скрипта ниже:

    cd owned-distrib/bin/altlinux
    sudo im-sowa ./installPlugin.sh -i -f "GOST Proxy"
    

    Полный список ключей installPlugin.sh (должны быть указаны до названия плагина):

    Ключ

    Значение ключа

    -i

    Установка плагина и зависимостей.

    -u

    Удаление плагина и зависимостей.

    -f

    Подавляет пользовательский ввод о подтверждении установки.

    Также необходимо установить внешние библиотеки из party-дистрибутива:

    cd party-distrib/bin/altlinux
    sudo im-sowa ./installGostPartyLibs.sh
    
  2. Установка компонентов КриптоПро

    Для работы плагина "GOST Proxy" требуется установить внешний компонент - КриптоПро. В зависимости от того, какой провайдер планируется использовать - JCP или JCSP - на стенд устанавливается тот или иной набор ПО КриптоПро (JCP или Java CSP + CSP). Ниже рассмотрены оба варианта установки.

    Перед установкой JCP/JCSP необходимо создать папку /sowarun/.java/.systemPrefs с помощью следующей команды:

    mkdir -p /sowarun/.java/.systemPrefs
    

    2.1. Установка и настройка JCP

    Для установки JCP необходимы root права.

    Выполнить установку со следующими ключами (указывается путь в jdk/jre):

    sudo _JAVA_OPTIONS='-Djava.util.prefs.systemRoot=/sowarun/.java' ./setup_console.sh /etc/alternatives/jre
    
    1. Выбрать вариант install ( i ).

    2. Java CryptoGraphic provider - задать значение "yes".

    3. JRE – оставить текущее значение.

    4. Encryption module - задать значение "yes".

    5. Card Module - задать значение "no".

    6. Java TLS Provider - задать значение "yes".

    7. Cades module - задать значение "no".

    8. JCP trial - указать лицензионный ключ JCP или значение "yes", если лицензии нет.

    9. Java TLS provider trial - указать лицензионный ключ JTLS или значение "yes", если лицензии нет.

    10. Enable StrengthenedKeyUsageControl - no.

    В зависимости от версии JCP набор ключей, указанных выше, может отличаться.

    Пример вывода интерактивного скрипта инсталляции при установке триальной версии JCP:

    Введите тип операции[i - нажмите Enter]: i
    Выберите JRE[текущая - нажмите Enter]:
    Криптопровайдер JCP[yes - нажмите Enter]: yes
    Модуль шифрования[yes - нажмите Enter]: yes
    Модуль поддержки карт и токенов, требует OCF (устарел)[no - нажмите Enter]: no
    Модуль поддержки карт и токенов[no - нажмите Enter]: no
    TLS провайдер[no - нажмите Enter]: yes
    Модули CAdES, XAdES, требуют bouncycastle: bc*-jdk15on-1.50[no - нажмите Enter]: no
    Криптопровайдер JCP, серийный номер[триальная, 3 мес., yes - нажмите Enter]:
    TLS провайдер, серийный номер[триальная, 3 мес., yes - нажмите Enter]:
    Включить усиленный контроль использования ключей(yes/no)?[no - нажмите Enter]: no
    ----------------------------
    Список модулей:
    ** Криптопровайдер JCP
    серийный номер:
    усиленный режим контроля ключей: выключен
    ** Модуль шифрования
    ** TLS провайдер
    серийный номер:
      ** Провайдер по умолчанию:
    Java Cryptographic Provider (хэш, ЭЦП) и Crypto (шифрование)
    

    Для проверки информации о лицензиях JCP можно воспользоваться одной из следующих команд:

    java -Djava.util.prefs.systemRoot=/sowarun/.java ru.CryptoPro.JCP.tools.License
    java -Djava.util.prefs.systemRoot=/sowarun/.java ru.CryptoPro.JCP.tools.License -first
    java -Djava.util.prefs.systemRoot=/sowarun/.java ru.CryptoPro.JCP.tools.License -required
    

    Для серверов без доступа в интернет требуется отключить проверку списков отзыва для сертификатов с помощью следующих команд:

    sudo java -Djava.util.prefs.systemRoot=/sowarun/.java ru.CryptoPro.JCP.Util.SetPrefs -system -node ru/CryptoPro/ssl -key Enable_CRL_revocation_ofline_default -value false
    sudo java -Djava.util.prefs.systemRoot=/sowarun/.java ru.CryptoPro.JCP.Util.SetPrefs -system -node ru/CryptoPro/ssl -key Enable_revocation_default -value false
    

    Для явного определения местоположения хранилища закрытых ключей используется команда:

    sudo java -Djava.util.prefs.systemRoot=/sowarun/.java ru.CryptoPro.JCP.Util.SetPrefs -system -node ru/CryptoPro/JCP/KeyStore/HDImage -key HDImageStore_class_default -value /mnt/profiles
    

    В данном случае ключевой контейнер должен располагаться в каталоге /mnt/profiles/ и иметь права 664 на содержимое контейнера. Права 664 представляют собой минимальный набор прав для чтения криптоконтейнера процессом Gost Proxy.

    Для предоставления права 664 на /mnt/profiles/ необходимо выполнить следующую команду:

    chmod 664 /mnt/profiles/<container folder>/*
    

    2.2. Установка и настройка Java CSP + CSP

    Для установки Java CSP + CSP необходимы root права.

    Если JCP уже был установлен, то для использования JCSP необходимо сначала удалить JCP, а затем установить Java CSP + CSP. Удаление JCP выполняется из каталога с дистрибутивом JCP с помощью следующей команды:

    sudo _JAVA_OPTIONS='-Djava.util.prefs.systemRoot=/sowarun/.java' ./setup_console.sh /etc/alternatives/jre -uninstall
    

    В случае, если предварительное удаление не будет выполнено, то корректная работа криптопровайдера не гарантируется.

    Установка JCSP осуществляется аналогично установке JCP с помощью следующего скрипта:

    sudo _JAVA_OPTIONS='-Djava.util.prefs.systemRoot=/sowarun/.java' ./setup_console.sh /etc/alternatives/jre
    

    На шаге выбора криптопровайдера по умолчанию необходимо выбрать JCSP (обычно это значение 1).

    Для проверки информации о лицензиях JSCP можно воспользоваться следующей командой:

    java -Djava.util.prefs.systemRoot=/sowarun/.java ru.CryptoPro.JCSP.JCSPLicense
    

    Также для работы Java CSP необходимо установить нативную часть CSP (обычно поставляется в виде RPM-пакета).

    Для проверки информации о лицензиях CSP можно воспользоваться следующей командой:

    sudo /opt/cprocsp/sbin/amd64/cpconfig -license -view
    

    При использовании криптопровайдера JCSP, ключевой контейнер необходимо расположить в каталоге в /var/opt/cprocsp/keys/sowactl/.

  3. Настройка Java

    В файле /etc/alternatives/jre/lib/security/java.security заменить значения параметров с

    ssl.KeyManagerFactory.algorithm=GostX509
    ssl.TrustManagerFactory.algorithm=GostX509
    

    на следующие:

    ssl.KeyManagerFactory.algorithm=SunX509
    ssl.TrustManagerFactory.algorithm=SunX509
    

    Для Oracle JDK убрать экспортные ограничения java. Для этого необходимо скачать local_policy.jar и US_export_policy.jar и установить их в каталог /etc/alternatives/jre/lib/security, а также в каталог /usr/local/sowa/lib/gostLibs.

    https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/44/6/snjatie-ehksportnykh-ogrnichenijj

    Для настройки прав на окружение для пользователя sowactl необходимо выполнить следующие команды:

    sudo chown -R sowactl:sowactl /sowarun/.java/
    sudo chmod -R 775 /sowarun/.java/
    
  4. Особенности развертывания профиля GOST Proxy

    Отличительной чертой GOST Proxy является наличие ключевого контейнера, который должен располагаться в каталоге /mnt/profiles/ и иметь права 664 на содержимое контейнера.

    Для предоставления права 664 на /mnt/profiles/ необходимо выполнить следующую команду:

    chmod 664 /mnt/profiles/<container folder>/*
    

    Для запуска профиля на порту 443 рекомендуется выполнить следующие действия:

    1. Необходимо выставить capabilities для бинарника java под рутовым пользователем:

      setcap cap_net_bind_service=+ep /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/java
      

      После выполнения этого действия у пользователя с недостаточными правами может возникать ошибка: java: error while loading shared libraries: libjli.so.

    2. Для решения возникающей ошибки нужно добавить путь к либе в доверенные пути загрузчика ld.so:

      vi /etc/ld.so.conf.d/java.conf
      
      /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/lib/amd64/jli
      
    3. Далее необходимо перезапустить ldconfig.

      rm /etc/ld.so.cache
      
      ldconfig
      
    4. Проверить запуск java под обычным пользователем (ошибок не должно возникать):

      sudo -u sowacfg java -version
      openjdk version "1.8.0_322"
      OpenJDK Runtime Environment (build 1.8.0_322-b06)
      OpenJDK 64-Bit Server VM (build 25.322-b06, mixed mode)