Крипто про мы установили в этом посте
Скрипт для Подписи и шифрования файлов
Ложим файл для подписи и шифрования рядом со скриптом
(путь желательно папка пользователя или на латинице без пробелов иначе может не отработать Рабочий стол содержит пробелы надо экранировать команду с путями будет !!!)
Файл архивируется
Создается путь /file-edk/file-signature сюда перемещается исходный файл и сжатый файл
Далее файл подписывается нашим ключом Используется параметр SN= это значит фамилия можно использовать другие варианты
После данный файл начинается шифроваться для других пользователей по фамилии указанных в переменной так же создается папка с фамилией туда попадает готовый файл сжатый подписанный зашифрованный
В скрипте прописываем свои переменные Имя учетной записи, Имя файла с которым будем работать, Фамилия Личного сертификата для подписи и Фамилии на кого шифруем
Отключена проверка путей сертификации для ускорения -nochain
Подпись-шифрование.sh
Показать
#!/bin/bash
# Скрипт для подписи и шифрования файла (Крипто АРМ)
# Файл из Базы должен быть в одной папке со скриптом
# Папка пользователя в домашней директории
user=program
# Переменная имя Файла из Базы
G=G21UUU09
#Переменная Фамилия подписывающего файл
fam=Мамзиков
#Добавить файл в архив
zip -r -9 $G.DBF.zip $G.DBF
#Создание директории
mkdir -m777 /home/$user/file-edk
mkdir -m777 /home/$user/file-edk/file-signature
#Переместить файл dbf и сжатый файл
mv $G.DBF /home/$user/file-edk/file-signature/$G.DBF
mv $G.DBF.zip /home/$user/file-edk/file-signature/$G.DBF.zip
#Добавление подписи в файл для организаций
cryptcp -sign -dn "SN=$fam" -nochain /home/$user/file-edk/file-signature/$G.DBF.zip /home/$user/file-edk/file-signature/$G.DBF.zip.sig
# Фамилии других сертификатов пользователи для цикла создания папки и шифрования
surname="Петров Иванов Смирнов"
#Цикл
for F in $surname
do
#Создание директории
mkdir -m777 /home/$user/file-edk/file-signature/$F
#Шифрование для организаций
cryptcp -encr -dn "SN=$F" -nochain /home/$user/file-edk/file-signature/$G.DBF.zip.sig /home/$user/file-edk/file-signature/$F/$G.DBF.zip.sig.enc
done
# Скрипт для подписи и шифрования файла (Крипто АРМ)
# Файл из Базы должен быть в одной папке со скриптом
# Папка пользователя в домашней директории
user=program
# Переменная имя Файла из Базы
G=G21UUU09
#Переменная Фамилия подписывающего файл
fam=Мамзиков
#Добавить файл в архив
zip -r -9 $G.DBF.zip $G.DBF
#Создание директории
mkdir -m777 /home/$user/file-edk
mkdir -m777 /home/$user/file-edk/file-signature
#Переместить файл dbf и сжатый файл
mv $G.DBF /home/$user/file-edk/file-signature/$G.DBF
mv $G.DBF.zip /home/$user/file-edk/file-signature/$G.DBF.zip
#Добавление подписи в файл для организаций
cryptcp -sign -dn "SN=$fam" -nochain /home/$user/file-edk/file-signature/$G.DBF.zip /home/$user/file-edk/file-signature/$G.DBF.zip.sig
# Фамилии других сертификатов пользователи для цикла создания папки и шифрования
surname="Петров Иванов Смирнов"
#Цикл
for F in $surname
do
#Создание директории
mkdir -m777 /home/$user/file-edk/file-signature/$F
#Шифрование для организаций
cryptcp -encr -dn "SN=$F" -nochain /home/$user/file-edk/file-signature/$G.DBF.zip.sig /home/$user/file-edk/file-signature/$F/$G.DBF.zip.sig.enc
done
Ложим файл для подписи и шифрования рядом со скриптом
(путь желательно папка пользователя или на латинице без пробелов иначе может не отработать Рабочий стол содержит пробелы надо экранировать команду с путями будет !!!)
Так как файл прилетает обратно кто как сделал в плане *.zip.sig.enc или *.7z.sig.enc *.zip.enc *.dbf.zip.sig.enc расширение может быть любым пред .enc а так же регистр маленькие большие буквы. То оставляем только номер района организации месяц и в конце расширение .enc
Например *2102008*.enc и ищем файл с данным содержанием символов рядом со скриптом и расшифровываем
Аналогично происходит и со снятием подписи sig
Далее номера организаций сопоставляем с фамилиями сертификатов этих ор-ций индексами для выполнения цикла и подстановки снятия подписи И готовые файлы после снятия подписи отправляем в одну директорию /file-edk/file-decrypted если файл не был подписан а только был шифрован остается рядом со скриптом
Меняем переменные под себя и пользуемся
Отключена проверка путей сертификации для ускорения -nochain
Так же если Переменные организации не соответствуют Индекса фамилий или их количество с момента не соответствия не будут подставятся фамилии так как не будет работать индекс
Расшифровка-снятие-подписи.sh
Показать
#!/bin/bash
# Скрипт для расшифрования и снятия подписи с файла (Крипто АРМ)
# Шифрованный подписанный файл должен быть в одной папке со скриптом
# Папка пользователя в домашней директории
user=programm
# Переменная Номер района
X=21
#Переменная Месяц за который расшифровываем файл
M=08
#Переменная Фамилия подписывающего файл
fam=Мамзиков
#Создание директории для расшифрованных файлов из формата sig
mkdir -m777 /home/$user/file-edk
mkdir -m777 /home/$user/file-edk/file-decrypted
#Номерорганизации в имени файлов переменная (число 0 интерпретироваться как восьмеричное 08 028 09 и тп выдают ошибку добавляем переменную района в начало)
fileout="${X}004 ${X}013 ${X}017 ${X}020 ${X}021 ${X}022 ${X}025 ${X}027 ${X}028 ${X}031 ${X}032 ${X}033 ${X}034 ${X}035 ${X}036 ${X}037"
#Снятие подписи с файлов ор-ции
#Фамилии других сертификатов пользователй для цикла снятия подписи с использованием индекса соответствия к файлу
array=([${X}004]=Смирнов [${X}013]=Петров [${X}017]=Сидоров [${X}020]=Иванов [${X}021]=Ф [${X}022]=Ф [${X}025]=Ф [${X}027]=Ф [${X}028]=Ф [${X}031]=Ф [${X}032]=Ф [${X}033]=Ф [${X}034]=Ф [${X}035]=Ф [${X}036]=Ф [${X}037]=Ф)
#Цикл
for I in $fileout
do
#Имя с расширениями для вывода (поиск файлов убрать расширение .enc убрать в начале ./)
outdecr=$(find . -maxdepth 1 -iname "*${I}${M}*.enc" | sed 's/\.[^.]*$//' | sed 's/^[./\t]*//')
#Дешифровка файлов из организации
cryptcp -decr -dn "SN=$fam" -nochain *$I$M*.enc $outdecr
#Имя с расширениями для вывода
outverify=$(find . -maxdepth 1 -iname "*${I}${M}*.sig" | sed 's/\.[^.]*$//' | sed 's/^[./\t]*//')
#Снятие подписи с файла
cryptcp -verify -dn "SN=${array[$I]}" -nochain *$I$M*.sig /home/$user/file-edk/file-decrypted/$outverify
# Для тестов просмотр переменных
#echo "SN=${array[$I]}" *$I$M* $outdecr $outverify
done
# Скрипт для расшифрования и снятия подписи с файла (Крипто АРМ)
# Шифрованный подписанный файл должен быть в одной папке со скриптом
# Папка пользователя в домашней директории
user=programm
# Переменная Номер района
X=21
#Переменная Месяц за который расшифровываем файл
M=08
#Переменная Фамилия подписывающего файл
fam=Мамзиков
#Создание директории для расшифрованных файлов из формата sig
mkdir -m777 /home/$user/file-edk
mkdir -m777 /home/$user/file-edk/file-decrypted
#Номерорганизации в имени файлов переменная (число 0 интерпретироваться как восьмеричное 08 028 09 и тп выдают ошибку добавляем переменную района в начало)
fileout="${X}004 ${X}013 ${X}017 ${X}020 ${X}021 ${X}022 ${X}025 ${X}027 ${X}028 ${X}031 ${X}032 ${X}033 ${X}034 ${X}035 ${X}036 ${X}037"
#Снятие подписи с файлов ор-ции
#Фамилии других сертификатов пользователй для цикла снятия подписи с использованием индекса соответствия к файлу
array=([${X}004]=Смирнов [${X}013]=Петров [${X}017]=Сидоров [${X}020]=Иванов [${X}021]=Ф [${X}022]=Ф [${X}025]=Ф [${X}027]=Ф [${X}028]=Ф [${X}031]=Ф [${X}032]=Ф [${X}033]=Ф [${X}034]=Ф [${X}035]=Ф [${X}036]=Ф [${X}037]=Ф)
#Цикл
for I in $fileout
do
#Имя с расширениями для вывода (поиск файлов убрать расширение .enc убрать в начале ./)
outdecr=$(find . -maxdepth 1 -iname "*${I}${M}*.enc" | sed 's/\.[^.]*$//' | sed 's/^[./\t]*//')
#Дешифровка файлов из организации
cryptcp -decr -dn "SN=$fam" -nochain *$I$M*.enc $outdecr
#Имя с расширениями для вывода
outverify=$(find . -maxdepth 1 -iname "*${I}${M}*.sig" | sed 's/\.[^.]*$//' | sed 's/^[./\t]*//')
#Снятие подписи с файла
cryptcp -verify -dn "SN=${array[$I]}" -nochain *$I$M*.sig /home/$user/file-edk/file-decrypted/$outverify
# Для тестов просмотр переменных
#echo "SN=${array[$I]}" *$I$M* $outdecr $outverify
done
должна быть папка уже с готовыми актами
Подписываем .doc АКТ приема передачи
Показать
!/bin/bash
# Скрипт для подписи АКТа (Крипто АРМ)
# Папка пользователя в домашней директории
user=program
#Создать директории если не созданны
mkdir -m777 /home/$user/file-edk
mkdir -m777 /home/$user/file-edk/file-signature
#Переменная Фамилия подписывающего файл
fam=Мамзиков
K=akt.doc
# АКТЫ для организаций (шаблонные)
num="4 13 17 20 21 22 25 28 31 32 33 35 36 37"
#Для распределения актов по папкам с использованием индекса соответствия к файлу
array=([4]=Петров [13]=Иванов [17]=Петрова [20]=Смирнов [21]=Ф [22]=Ф [25]=Ф [28]=Ф [31]=Ф [32]=Ф [33]=Ф [35]=Ф [36]=Ф [37]=Ф)
#Цикл
for I in $num
do
#Создание директории
mkdir -m777 /home/$user/file-edk/file-signature/${array[$I]}
#Добавить файл в архив
zip -r -9 $I${K}.zip /home/$user/file-edk/shablon-akt/$I${K}
#Добавление подписи в файл для организаций
cryptcp -sign -dn "SN=$fam" -nochain $I$K.zip /home/$user/file-edk/file-signature/${array[$I]}/$I$K.zip.sig
#Удалить архивы
rm -f $I$K.zip
#Цикл
for F in $num
do
#Шифрование актов для организаций
cryptcp -encr -dn "${array[$F]}" -nochain /home/$user/file-edk/file-signature/${array[$F]}/$F$K.zip.sig /home/$user/file-edk/file-signature/${array[$F]}/$F$K.zip.sig.enc
done
done
# Скрипт для подписи АКТа (Крипто АРМ)
# Папка пользователя в домашней директории
user=program
#Создать директории если не созданны
mkdir -m777 /home/$user/file-edk
mkdir -m777 /home/$user/file-edk/file-signature
#Переменная Фамилия подписывающего файл
fam=Мамзиков
K=akt.doc
# АКТЫ для организаций (шаблонные)
num="4 13 17 20 21 22 25 28 31 32 33 35 36 37"
#Для распределения актов по папкам с использованием индекса соответствия к файлу
array=([4]=Петров [13]=Иванов [17]=Петрова [20]=Смирнов [21]=Ф [22]=Ф [25]=Ф [28]=Ф [31]=Ф [32]=Ф [33]=Ф [35]=Ф [36]=Ф [37]=Ф)
#Цикл
for I in $num
do
#Создание директории
mkdir -m777 /home/$user/file-edk/file-signature/${array[$I]}
#Добавить файл в архив
zip -r -9 $I${K}.zip /home/$user/file-edk/shablon-akt/$I${K}
#Добавление подписи в файл для организаций
cryptcp -sign -dn "SN=$fam" -nochain $I$K.zip /home/$user/file-edk/file-signature/${array[$I]}/$I$K.zip.sig
#Удалить архивы
rm -f $I$K.zip
#Цикл
for F in $num
do
#Шифрование актов для организаций
cryptcp -encr -dn "${array[$F]}" -nochain /home/$user/file-edk/file-signature/${array[$F]}/$F$K.zip.sig /home/$user/file-edk/file-signature/${array[$F]}/$F$K.zip.sig.enc
done
done
Варианты критерия выбора сертификата ключа
Показать
CN Общее имя Наименование ЮЛ (если ИНН начинается с "00") или ФИО владельца. Длина не более 64 символов
SN Фамилия
GN/G Имя Отчество Общая длина текста в полях SN и G должна быть не более 64 символов (с учетом одного пробела между текстом из Фамилии и текстом из Имени)
emailAddress/E Адрес электронной почты ivanov@mail.mail
SNILS СНИЛС Должно быть записано 11 цифр (допускается 11 нулей для иностранных граждан).
INN ИНН 12 цифр, для ЮЛ первые две цифры 00
C Страна Двухсимвольный код страны (RU)
S Регион Наименование субъекта РФ ЮЛ: по адресу местонахождения,
L Населенный пункт Наименование населенного пункта (Калининград)
street Название улицы, номер дома Пр-т Победы 14 кв.3
O Организация Полное или сокращенное наименование организации (только для ЮЛ)
OU Подразделение В случае выпуска СКПЭП на должностное лицо – соответствующее подразделение организации (только для ЮЛ)
T Должность В случае выпуска СКПЭП на должностное лицо – его должность (только для ЮЛ)
OGRN ОГРН
SN Фамилия
GN/G Имя Отчество Общая длина текста в полях SN и G должна быть не более 64 символов (с учетом одного пробела между текстом из Фамилии и текстом из Имени)
emailAddress/E Адрес электронной почты ivanov@mail.mail
SNILS СНИЛС Должно быть записано 11 цифр (допускается 11 нулей для иностранных граждан).
INN ИНН 12 цифр, для ЮЛ первые две цифры 00
C Страна Двухсимвольный код страны (RU)
S Регион Наименование субъекта РФ ЮЛ: по адресу местонахождения,
L Населенный пункт Наименование населенного пункта (Калининград)
street Название улицы, номер дома Пр-т Победы 14 кв.3
O Организация Полное или сокращенное наименование организации (только для ЮЛ)
OU Подразделение В случае выпуска СКПЭП на должностное лицо – соответствующее подразделение организации (только для ЮЛ)
T Должность В случае выпуска СКПЭП на должностное лицо – его должность (только для ЮЛ)
OGRN ОГРН
cryptcp -verify -dn “Иванов” ./FondKR.zip.sig ./FondKR.zip
где
Иванов – фамилия владельца сертификата, чью подпись проверяем.
./FondKR.zip.sig – полный путь к файлу с подписью
./FondKR.zip – полный путь до выходного файла (файла, с удаленной подписью). Если не прописать, то подпись не будет удалена из файла – выполнится только проверка Вывод результата проверки: Добавление ЭЦП в файл.
Перед выполнением операции подписи файла, подключить носитель (рутокен, флешку, дискету) к компьютеру.
cryptcp –sign –dn “Иванов” ./FondKR.zip ./Fond.zip.sig
где
Иванов – фамилия владельца сертификата, которым подписываем файл.
./FondKR.zip.sig – полный путь к файлу, который необходимо подписать.
./FondKR.zip – полный путь до выходного файла (файла с подписью). Если не указать, то подпись будет добавлена к исходному файлу, расширение файла при этом не изменится. Команда cryptcp запросит pin-код для доступа к носителю: Вводим pin-код (внимание, при вводе pin-кода не отображаются вводимые символы), нажимаем Enter.
Вывод результата: Шифрование файл пример
cryptcp -encr -dn “Михельсон” ./FondKR.zip.sig ./FondKR.zip.sig.enc
где
Михельсон - фамилия владельца сертификата, для которого шифруется файл. Сертификат должен быть установлен в локальное хранилище личных сертификатов,
./FondKR.zip.sig – полный путь к файлу, который необходимо зашифровать. В данном примере – это подписанный файл из команды пункт 13.2
./FondKR.zip.sig.enc - полный путь до выходного зашифрованого файла. Если не указать, то будет зашифрован исходный файл, расширение файла при это не изменится. Результат выполнения команды: Дешифрование файла.
cryptcp -decr -dn “Иванов” ./03.zip.sig.enc ./03.zip.sig
где
Иванов – фамилия владельца сертификата, которым расшифровывается файл.
./03.zip.sig.enc – полный путь к зашифрованному файлу.
./03.zip.sig – полный путь к выходному (расшифрованному) файлу. Команда cryptcp запросит pin-код для доступа к носителю: Вводим pin-код (внимание, при вводе pin-кода не отображаются вводимые символы), нажимаем «Enter».
Результат выполнения команды: