Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

8 Страницы<1234>»
Опции
К последнему сообщению К первому непрочитанному
Offline NTMan  
#11 Оставлено : 14 марта 2013 г. 12:40:39(UTC)
NTMan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 18.02.2013(UTC)
Сообщений: 33
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 1 раз в 1 постах
Похоже никто незнает как при использовании curl указывать каким сертификатом аутентифицироваться.
Offline Татьяна  
#12 Оставлено : 14 марта 2013 г. 15:10:46(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Автор: NTMan Перейти к цитате
целая эпопея с подменой :)
Через LD_PRELOAD не получилось, прошлось делать симлинк с libcpcurl.so.4.2.0 на libcurl.so.3 и задавать LD_LIBRARY_PATH.

$ LD_LIBRARY_PATH=/opt/cprocsp/lib/amd64 ldd /usr/lib64/php/modules/curl.so
linux-vdso.so.1 => (0x00007fff4b730000)
libcurl.so.3 => /opt/cprocsp/lib/amd64/libcurl.so.3 (0x00002b08cf637000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b08cf798000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002b08cf99c000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002b08cfbca000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002b08cfe60000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002b08d0085000)
libidn.so.11 => /usr/lib64/libidn.so.11 (0x00002b08d0287000)
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00002b08d04b9000)
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00002b08d0724000)
libz.so.1 => /lib64/libz.so.1 (0x00002b08d0b2a000)
libc.so.6 => /lib64/libc.so.6 (0x00002b08d0d3f000)
librt.so.1 => /lib64/librt.so.1 (0x00002b08d1098000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b08d12a1000)
libcapi20.so.4 => /opt/cprocsp/lib/amd64/libcapi20.so.4 (0x00002b08d14be000)
libssp.so.4 => /opt/cprocsp/lib/amd64/libssp.so.4 (0x00002b08d16c8000)
/lib64/ld-linux-x86-64.so.2 (0x0000003ead200000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002b08d1843000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002b08d1a4c000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00002b08d1c4e000)
libcpext.so.4 => /opt/cprocsp/lib/amd64/libcpext.so.4 (0x00002b08d1e64000)
libcapi10.so.4 => /opt/cprocsp/lib/amd64/libcapi10.so.4 (0x00002b08d1fcf000)
librdrsup.so.4 => /opt/cprocsp/lib/amd64/librdrsup.so.4 (0x00002b08d20e3000)
libasn1data.so.4 => /opt/cprocsp/lib/amd64/libasn1data.so.4 (0x00002b08d220a000)
libpkivalidator.so.4 => /opt/cprocsp/lib/amd64/libpkivalidator.so.4 (0x00002b08d2968000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00002b08d2a90000)
libm.so.6 => /lib64/libm.so.6 (0x00002b08d2d91000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b08d3014000)
libcpalloc.so.0 => /opt/cprocsp/lib/amd64/libcpalloc.so.0 (0x00002b08d3222000)
libjemalloc.so.0 => /opt/cprocsp/lib/amd64/libjemalloc.so.0 (0x00002b08d3324000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00002b08d343d000)
libcplib.so.4 => /opt/cprocsp/lib/amd64/libcplib.so.4 (0x00002b08d3656000)
libocsp.so.4 => /opt/cprocsp/lib/amd64/libocsp.so.4 (0x00002b08d3766000)
libcpasn1.so.4 => /opt/cprocsp/lib/amd64/libcpasn1.so.4 (0x00002b08d38b2000)
libsepol.so.1 => /lib64/libsepol.so.1 (0x00002b08d3a2b000)

Пробую теперь разобраться с настройкой СКЗИ (с тем как задавать параментры для сертификата и ключей) в curl-е


зачем вам LD_PRELOAD и подмена? Есть два простых способа использования библиотеки:
1. в тексте вашей программы открыть библиотеку при помощи dlopen, заполнить таблицу функций функциями из библиотеки (curl_global_init, curl_global_cleanup, curl_easy_init, curl_easy_cleanup, curl_easy_getinfo, curl_easy_setopt, curl_easy_perform, curl_formadd, curl_formfree, curl_slist_free_all, curl_slist_append), использовать эти функции.
2. слинковаться сразу с нашей библиотекой (в опциях линкера указать -L/opt/cprocsp/lib/<архитектура>/ -lcpcurl)

С этими способами что-то не так?

По поводу опций выбора сертификата: curl можно передать thumbprint клиентского сертфиката, делается это так:
Код:

    //если хранилище пользователя, то "CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_CURRENT_USER:MY"
    code = curl_global_handle.curl_easy_setopt( h.handle, CURLOPT_SSLCERTTYPE, "CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_LOCAL_MACHINE:MY");
    if( code != CURLE_OK )
        goto fin;
	    
    code = curl_global_handle.curl_easy_setopt( h.handle, CURLOPT_SSLCERT, thumbprint.c_str() );
    if( code != CURLE_OK )
        goto fin;
Татьяна
ООО Крипто-Про
thanks 1 пользователь поблагодарил Татьяна за этот пост.
NTMan оставлено 14.03.2013(UTC)
Offline Татьяна  
#13 Оставлено : 14 марта 2013 г. 15:13:25(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Автор: NTMan Перейти к цитате
Еще вопрос. Получается для каждого nix пользователя ключи и сертификаты отдельно надо прогружать?


Поясните пожалуйста, что вы имеете в виду. Вы не можете в рамках одной установленной TLS сессии использовать сразу два клиентских сертификата, поэтому мне не понятно что такое "не отдельно".
Татьяна
ООО Крипто-Про
Offline NTMan  
#14 Оставлено : 14 марта 2013 г. 15:19:21(UTC)
NTMan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 18.02.2013(UTC)
Сообщений: 33
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 1 раз в 1 постах
Автор: Татьяна Перейти к цитате
Поясните пожалуйста, что вы имеете в виду. Вы не можете в рамках одной установленной TLS сессии использовать сразу два клиентских сертификата, поэтому мне не понятно что такое "не отдельно".


Нет, имелось в виду что у каждого nix пользователя свое хранилище сертификатов. А можно сделать общее для всех пользователей?
Offline Татьяна  
#15 Оставлено : 14 марта 2013 г. 15:25:01(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Автор: NTMan Перейти к цитате
Автор: Татьяна Перейти к цитате
Поясните пожалуйста, что вы имеете в виду. Вы не можете в рамках одной установленной TLS сессии использовать сразу два клиентских сертификата, поэтому мне не понятно что такое "не отдельно".


Нет, имелось в виду что у каждого nix пользователя свое хранилище сертификатов. А можно сделать общее для всех пользователей?


Если вам нужно разграничение доступа к сертификатам пользователей -- надо хранить все сертификаты в разных хранилищах(каждый сертификат в хранилище своего пользователя), тогда только пользователь-владелец будет иметь доступ к его сертификату. Если не нужно разграничение доступа -- поставьте все сертификаты в хранилище компьютера или выберите специального пользователя, к которому вы поставите все сертификаты. Очевидно, нельзя сделать так, чтобы разграничение доступа было, но при этом курл, запущенный от имени одного из пользователей, имел доступ к любым сертификатам.

Отредактировано пользователем 14 марта 2013 г. 15:28:00(UTC)  | Причина: запятую забыла:)

Татьяна
ООО Крипто-Про
thanks 1 пользователь поблагодарил Татьяна за этот пост.
NTMan оставлено 14.03.2013(UTC)
Offline NTMan  
#16 Оставлено : 14 марта 2013 г. 15:34:48(UTC)
NTMan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 18.02.2013(UTC)
Сообщений: 33
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 1 раз в 1 постах
Опытным путем было установленно, что thumbprint это SHA1 Hash. :)

А как поставить все сертификаты в хранилище компьютера?
У меня в папке /var/opt/cprocsp/keys только пользовательские папки.


Да кстати большое спасибо, curl работает!

По поводу

Автор: Татьяна Перейти к цитате

зачем вам LD_PRELOAD и подмена? Есть два простых способа использования библиотеки:
1. в тексте вашей программы открыть библиотеку при помощи dlopen, заполнить таблицу функций функциями из библиотеки (curl_global_init, curl_global_cleanup, curl_easy_init, curl_easy_cleanup, curl_easy_getinfo, curl_easy_setopt, curl_easy_perform, curl_formadd, curl_formfree, curl_slist_free_all, curl_slist_append), использовать эти функции.
2. слинковаться сразу с нашей библиотекой (в опциях линкера указать -L/opt/cprocsp/lib/<архитектура>/ -lcpcurl)


это все конечно можно, но сейчас у меня была задача, чтобы это все работало в не кастомизированной сборке php, позже, возможно я вернусь к вопросу, чтобы создать патчь и протолкнуть его в апстрим.

Если интерсно вот пример на PHP для включение в ваше SDK

Код:
$ch = curl_init($address);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);

curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_CURRENT_USER:MY');
//curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'CERT_SHA1_HASH_PROP_ID:CERT_SYSTEM_STORE_LOCAL_MACHINE:MY');
curl_setopt($ch, CURLOPT_SSLCERT, '53be6850031bf03bff056fd5215a46c07b2248d6');
if(isset($proxy)) curl_setopt($ch, CURLOPT_PROXY, $proxy);
$response = curl_exec($ch);
echo 'Error code: ' . curl_errno ($ch)."\n";
echo 'Curl error: ' . curl_error($ch)."\n";

Отредактировано пользователем 14 марта 2013 г. 16:33:34(UTC)  | Причина: Не указана

Offline NTMan  
#17 Оставлено : 15 марта 2013 г. 6:46:37(UTC)
NTMan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 18.02.2013(UTC)
Сообщений: 33
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 1 раз в 1 постах
Еще два вопроса в догонку:

1. Устанавливать сертификаты в хранилище компьютера может только root? Если это так, то можно ли сделать, чтобы это мог делать какойнибудь не привелигированный пользователь?

2. Как я понимю, если будет обновление сертификатов, то у новых сертификатов измениться thumbprint и придется вновить изменения еще и в настройки программы. Можно ли организвать выборку сертификата по какому либо не изменяемому параметру? Например по email на который сертификат выдан, с целью максимальной прозрачности процесса обновления сертификатов от сопровождения программы.
Offline Татьяна  
#18 Оставлено : 15 марта 2013 г. 16:50:23(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Автор: NTMan Перейти к цитате
Еще два вопроса в догонку:

1. Устанавливать сертификаты в хранилище компьютера может только root? Если это так, то можно ли сделать, чтобы это мог делать какойнибудь не привелигированный пользователь?

Можно вручную дать права пользователю на запись в хранилища (/var/opt/cprocsp/users/stores/) и в ключи (/var/opt/cprocsp/keys/), но с точки зрения безопасности это то же самое, что поставить сертификаты в хранилище этого пользователя. Поэтому я бы рекомендовала не трогать настройки прав, а ставить всё в хранилище нужного вам пользователя.

Автор: NTMan Перейти к цитате

2. Как я понимю, если будет обновление сертификатов, то у новых сертификатов измениться thumbprint и придется вновить изменения еще и в настройки программы. Можно ли организвать выборку сертификата по какому либо не изменяемому параметру? Например по email на который сертификат выдан, с целью максимальной прозрачности процесса обновления сертификатов от сопровождения программы.

Тут возникает ряд вопросов. Thimbprint -- уникальная характеристика сертификата. А сертификатов с одним и тем же адресом электронной почты может стоять десяток. Какой из них выбрать?
Вы можете написать код, который будет реализовывать вашу логику выбора сертификата, получать его thumbprint и отдавать курлу. Есть много способов получения thumbprint -- от вызовов CAPILite до парсинга вывода утилиты certmgr или openssl.
Татьяна
ООО Крипто-Про
Offline NTMan  
#19 Оставлено : 15 марта 2013 г. 17:14:46(UTC)
NTMan

Статус: Активный участник

Группы: Участники
Зарегистрирован: 18.02.2013(UTC)
Сообщений: 33
Российская Федерация

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 1 раз в 1 постах
Я так и не понял как ставить сертификаты в хранилище компьютера.
Для пользователя я делал так:
1. копировал ключи в папку /var/opt/cprocsp/keys/%логин_пользователя%
2. потом узнавал id хранилища /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
3. затем добавлял сертификат в хранилище /opt/cprocsp/bin/amd64/certmgr -inst -cont '\\.\HDIMAGE\%id_хранилища%' -file ИМЯ_ФАЙЛА_СЕРТИФИКАТА.cer '\\.\HDIMAGE\%id_хранилища%'
4. ставил crl сертификат
certmgr -inst -crl -store ca -file %путь_к_файлу%
5. затем ставил корневые сертификаты
certmgr -inst -store root -file cacer.p7b

Как произвести установку в хранилище компьютера даже не представляю.

Автор: Татьяна Перейти к цитате
Тут возникает ряд вопросов. Thimbprint -- уникальная характеристика сертификата. А сертификатов с одним и тем же адресом электронной почты может стоять десяток. Какой из них выбрать?
Вы можете написать код, который будет реализовывать вашу логику выбора сертификата, получать его thumbprint и отдавать курлу. Есть много способов получения thumbprint -- от вызовов CAPILite до парсинга вывода утилиты certmgr или openssl.

Если я писал бы логику я б взял первый действующий, как вариант, раз указывается характеристика не позволяющая однозначно идентифицировать конечный сертификат.
Offline Татьяна  
#20 Оставлено : 15 марта 2013 г. 17:24:00(UTC)
Татьяна

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Автор: NTMan Перейти к цитате
Я так и не понял как ставить сертификаты в хранилище компьютера.
Для пользователя я делал так:
1. копировал ключи в папку /var/opt/cprocsp/keys/%логин_пользователя%
2. потом узнавал id хранилища /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
3. затем добавлял сертификат в хранилище /opt/cprocsp/bin/amd64/certmgr -inst -cont '\\.\HDIMAGE\%id_хранилища%' -file ИМЯ_ФАЙЛА_СЕРТИФИКАТА.cer '\\.\HDIMAGE\%id_хранилища%'
4. ставил crl сертификат
certmgr -inst -crl -store ca -file %путь_к_файлу%
5. затем ставил корневые сертификаты
certmgr -inst -store root -file cacer.p7b

Как произвести установку в хранилище компьютера даже не представляю.


Я бы всё-таки рекомендовала использовать хранилища специального пользователя, если нужно всё делать под специальным пользователем.
В хранилище компьютера сертификат ставят почти так же:

1. скопировать ключи в папку /var/opt/cprocsp/keys/ без логина пользователя
2. потом узнать id контейнера /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc -machinekeys
3. затем добить сертификат в хранилище /opt/cprocsp/bin/amd64/certmgr -inst -cont '\\.\HDIMAGE\%id_контейнера%' -file ИМЯ_ФАЙЛА_СЕРТИФИКАТА.cer -store mmy
4. поставить crl сертификат
certmgr -inst -crl -store ca -file %путь_к_файлу%
5. затем поставить корневые сертификаты
certmgr -inst -store root -file cacer.p7b
Татьяна
ООО Крипто-Про
thanks 1 пользователь поблагодарил Татьяна за этот пост.
NTMan оставлено 15.03.2013(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
8 Страницы<1234>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.