- Работа с КриптоПро на linux сервере
- С жесткого диска
- Проверка успешности установки закрытого ключа
- Добавление тестового сертификата
- Удаление сертификата
- Проверка сертификата
- Просмотр всех атрибутов сертификата
- Экспорт сертификатов на другую машину
- Подписание документа ЭЦП
- Проверка подписи ЭЦП
- Получение исходного файла
- Настройка службы точного времени
- Как исправить ошибку “команда не найдена” в Linux
- Понимание переменных среды и чувствительности к регистру
- 1. Проверьте наличие синтаксических ошибок
- 2. Укажите путь к вашему исполняемому файлу
- 3. Используйте переменные среды
Работа с КриптоПро на linux сервере
Скопировать в корень дискеты или флэшки сертификат и приватный ключ (из каталога 999996.000 , 999996 — название (alias) контейнера):
cp -R /path/to/key/999996.000 /media/flashdrive/ cp /path/to/cert/client.cer /media/flashdrive/
Выполнить команду по копированию ключа с флэшки на диск, ключ попадет в пользовательское хранилище My .
gate@example.com — то, что прописано в поле E сертификата (можно посмотреть командой keytool —printcert -file /path/to/cert/client.cer ):
csptest -keycopy -src '\\.\FLASH\gate@example.com' -dest '\\.\HDIMAGE\999996'
С жесткого диска
Скопировать приватный ключ в хранилище (контейнер), где — имя пользователя linux:
cp -R /path/to/key/999996.000 /var/opt/cprocsp/keys/username>/
Поставить «минимальные» права:
chmod 600 /var/opt/cprocsp/keys/username>/999996.000/*
Узнать реальное название контейнера:
csptest -keyset -enum_cont -verifycontext -fqcn
Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище My :
certmgr -inst -file /path/to/file/client.cer -cont '\\.\HDIMAGE\999996'
Если следующая ошибка, нужно узнать реальное название контейнера (см. выше):
Failed to open container \\.\HDIMAGE\ [ErrorCode: 0x00000002]
Установить сертификат УЦ из-под пользователя root командой:
certmgr -inst -store uroot -file /path/to/file/CA.cer
Проверка успешности установки закрытого ключа
Если выводится PrivateKey Link: Yes. Container: HDIMAGE\\999996.000\D7BB , то есть и сертификат, и приватный ключ, а если выводится PrivateKey Link: No — связи нет, и использовать такой контейнер для подписи не удастся.
Добавление тестового сертификата
Добавление работает только на той же машине, и в тот же контейнер, где был сформированы следующий запрос на добавление:
cryptcp -creatrqst -dn 'cn=test' -cont '\\.\hdimage\test' test.csr
Ввести пароль на контейнер test123 .
cryptcp -creatrqst -dn 'e=email@test.ru,cn="тест тест",c=rus,l="москва",o="текст тест"' -cont '\\.\hdimage\myname' myname.csr
cryptcp -instcert -cont '\\.\hdimage\test' certnew.cer
Ввести пароль на контейнер. По-умолчанию: 12345678
Удаление сертификата
Проверка сертификата
1------- Issuer : E=cpca@cryptopro.ru, C=RU, L=Москва, O=ООО КРИПТО-ПРО, CN=УЦ KPИПTO-ПPO Subject : E=info@site.ru, C=RU, L=г. Москва, O="ООО ""Верес""", OU=Руководство, CN=Иванов Иван Иванович, T=Генеральный директор Serial : 0x75F5C86A000D00016A5F SHA1 Hash : 0x255c249150efe3e48f1abb3bc1928fc8f99980c4 Not valid before : 08/12/2014 09:04:00 UTC Not valid after : 08/12/2019 09:14:00 UTC PrivateKey Link : No
Подписание пустого файла (размер 0) проходит успешно, но при просмотре сертификатов этого файла выдается ошибка:
Can't open certificate store: '/tmp/tmp.G8cd13vzfZ.sig'. Error: No certificate found. /dailybuilds/CSPbuild/CSP/samples/CPCrypt/Certs.cpp:312: 0x2000012D [ErrorCode: 0x2000012d]
Просмотр всех атрибутов сертификата
В cryptcp нет необходимых инструментов для получения всех атрибутов сертификата. Поэтому следует использовать openssl , но настроив его.
certmgr -list -f file.sig | grep 'SHA1 Hash'
В цикле извлекаем сертификаты:
cryptcp -nochain -copycert -thumbprint 255c249150efe3e48f1abb3bc1928fc8f99980c4 -f file.sig -df certificate.der -der
openssl x509 -in certificate.der -inform der -text -noout
openssl_conf = openssl_def # Это в начало файла #Все что ниже в конец [openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] engine_id = gost dynamic_path = /usr/lib/ssl/engines/libgost.so # заменить реальным файлом default_algorithms = ALL CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
openssl ciphers | tr ":" "\n" | grep -i gost GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89
Экспорт сертификатов на другую машину
Закрытые ключи к сертификатам находятся тут: /var/opt/cprocsp/keys . Поэтому эти ключи переносятся просто: создаем архив и переносим на нужную машину в тот же каталог.
Экспорт самих сертификатов (если их 14):
for i in `seq 1 14`; do echo $i | certmgr -export -dest $i.cer; done
Переносим эти файлы на машину и смотрим, какие контейнеры есть:
csptest -keyset -enum_cont -verifycontext -fqcn
И как обычно, связываем сертификат и закрытый ключ:
certmgr -inst -file 1.cer -cont '\\.\HDIMAGE\container.name'
Если закрытый ключ и сертификат не подходят друг к другу, будет выведена ошибка:
Can not install certificate Public keys in certificate and container are not identical
Если нет закрытого ключа, то просто ставим сертификат:
Подписание документа ЭЦП
cryptcp -sign (КПС1) -nochain -pin pincode src.txt dest.txt.sig
Пример создания ЭЦП (по SHA1 Hash):
cryptcp -sign -thumbprint 255c249150efe3e48f1abb3bc1928fc8f99980c4 -nochain -pin test test.txt test.txt.sig
[ReturnCode: x] | Описание | Возвращаемый код завершения в баше $? |
---|---|---|
0 | успешно | 0 |
0x8010006b | Введен неправильный PIN | 107 |
0x2000012d | Сертификат не найден | 45 |
0x20000065 | Не удалось открыть файл | 101 |
Проверка подписи ЭЦП
Для верифицирования сертификатов нужен сертификат удостоверяющего центра и актуальный список отзыва сертификатов, либо настроенный для этого revocation provider.
Корневой сертификат УЦ, список отзыва сертификата является одним из реквизитов самого сертификата.
Контрагенты когда открывают подписи в КриптоАРМ используют revocation provider, он делает проверки отзыва сертификата онлайн. Как реализована проверка в Шарепоинте не знаю. Знаю только что используется библиотека Крипто.Net
Проверка конкретной подписи из локального хранилища по его хешу:
cryptcp -verify -thumbprint 255c249150efe3e48f1abb3bc1928fc8f99980c4 -nochain test.txt.sig
Проверить, взяв сертификат из file1.sig , подпись файла file2.sig . Практически, надо использовать один и тот же файл:
cryptcp -verify -norev -f file1.sig file2.sig
Certificates found: 2 Certificate chains are checked. Folder './': file.xls.sig. Signature verifying. Signer: Старший инженер, Иванов Иван Иванович, Отдел закупок, ООО «Верес», Москва, RU, info@site.ru Signature's verified. Signer: Генеральный директор, Сидоров Иван Петрович, Руководство, ООО «Кемоптика», Москва, RU, info@site.ru Signature's verified. [ReturnCode: 0]
[ReturnCode: x] | Текст | Описание | Возвращаемый код завершения в баше $? |
---|---|---|---|
0 | Успешно | 0 | |
0x80091004 | Invalid cryptographic message type | Неправильный формат файла | 4 |
0x80091010 | The streamed cryptographic message is not ready to return data | Пустой файл | 16 |
Получение исходного файла
Получение исходного файла (сообщения):
cryptcp -verify -nochain file.sig file.txt
Будет ругаться на сертификат (так как не будет проверки), но подпись удалит. Вариант с проверкой:
cryptcp -verify -nochain -f file.sig file.sig file.txt
Настройка службы точного времени
apt-get install ntp ntpdate
Необходимо добавить сервера:
# You do need to talk to an NTP server or two (or three). #server ntp.your-provider.example server ntp1.stratum2.ru server ntp2.stratum2.ru
Как исправить ошибку “команда не найдена” в Linux
Существуют различные причины, по которым оболочка Linux выдает ошибку «команда не найдена». Вот как это исправить.
Если вы являетесь пользователем Linux, вы, скорее всего, сталкивались с ошибкой “команда не найдена” в терминале Linux.
Часто, когда вы сталкиваетесь с этой ошибкой, вы получаете предложение установить программу, однако существует несколько потенциальных причин ошибки «команда не найдена».
Понимание переменных среды и чувствительности к регистру
Прежде чем мы приступим к устранению распространенных причин ошибки, важно оценить несколько важных свойств команд Linux.
В отличие от Windows, все команды, имена файлов и каталогов в системах Linux и Unix чувствительны к регистру. Это означает, что все команды и их соответствующие аргументы или параметры должны отображаться точно так, как они обозначены. Конечно, большинство команд написаны строчными буквами.
Переменные среды играют важную роль в Linux. Они содержат ценную информацию о вашем сеансе входа в систему и другие важные детали.
Когда вы запускаете команду в Linux, ваша система будет искать в ваших текущих переменных, в частности в переменной PATH, чтобы найти команду или программу, которую вы хотите запустить. Если команда не найдена, вы получите сообщение об ошибке, что она не найдена.
1. Проверьте наличие синтаксических ошибок
Вы должны запускать все команды Linux точно так, как они отображаются в регистре. Например, оболочка обрабатывает “ls” и “LS” как разные команды в Linux.
Кроме того, если ваша команда содержит аргументы, убедитесь, что вы используете правильный регистр. Команда ssh для переадресации портов принимает формат:
Аргументы “L” и “N” в этом случае должны быть прописными, иначе вы получите сообщение об ошибке.
В некоторых случаях для параметров или аргументов может потребоваться предшествующий дефис (-) или двойной дефис (—), а некоторые аргументы, возможно, потребуется заключить в кавычки или скобки.
Убедитесь, что вы используете правильную команду. Дважды проверьте написание команды, которую вы пытаетесь использовать, и убедитесь, что вы используете правильный регистр.
2. Укажите путь к вашему исполняемому файлу
Скрипты играют жизненно важную роль в Linux, поскольку они позволяют автоматизировать рутинные задачи. Если вы пишете свою собственную программу Bash или используете некоторые сторонние программы, вам нужно будет указать полный путь к программе для ее успешного выполнения.
Например, когда вы загружаете Open Virtualization Format Tool, вы можете установить его в любой каталог по своему вкусу. Теперь, когда вы пытаетесь запустить команду ovftool из каталога, отличного от того, в котором она была установлена, вы получите сообщение об ошибке “команда не найдена”.
Чтобы выполнить команду правильно, вам необходимо указать полный путь к исполняемому файлу программы. Если, например, вы установили ovftool в каталог / opt / ovf , то для запуска ovftool вам нужно будет использовать следующую команду:
Кроме того, обратите внимание на косые черты. В отличие от Windows, которая использует обратные косые черты, Linux использует прямые косые черты. Используйте функцию автозаполнения вкладок вашего терминала, чтобы избежать опечаток в именах каталогов.
3. Используйте переменные среды
Если вы обнаружите, что указывать целый каталог для команды утомительно, подумайте о добавлении исполняемого файла программы в переменную среды PATH.
Чтобы добавить исполняемый файл программы в PATH, просто запустите команду в следующем формате:
Переменные среды записываются в файл ~/.bashrc в Bash или в файл ~/.zshrc , если вы используете оболочку Z.
Чтобы обновить и применить внесенные изменения к файлу ~/.bashrc без выхода из системы, выполните исходную команду следующим образом:
Вы можете проверить, успешно ли добавлен путь к вашей программе в переменную PATH с помощью команды: