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

Уведомление

Icon
Error

67 Страницы«<6263646566>»
Опции
К последнему сообщению К первому непрочитанному
Offline pd  
#631 Оставлено : 17 ноября 2020 г. 15:47:03(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC)
Сообщений: 1,442
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 31 раз
Поблагодарили: 412 раз в 306 постах
Автор: Norguhtar Перейти к цитате
Подскажите могу ли я из engine достать не только key пользователя, но и его сертификат? Если да то какие параметры надо передавать? А то хотелось бы указывать только контейнер а не экспортировать сертификат отдельно в файл.

Мы используем встроенные директивы, свои не придумываем.

Отредактировано пользователем 17 ноября 2020 г. 15:48:50(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline Norguhtar  
#632 Оставлено : 17 ноября 2020 г. 15:56:38(UTC)
Norguhtar

Статус: Участник

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

Поблагодарили: 2 раз в 2 постах
Да я уже посмотрел и нашел ответ

https://mta.openssl.org/...rs/2015-July/001830.html


Function

int ENGINE_load_certificate(ENGINE *e, const char *key id,
UI_METHOD *ui_method, void *callback_data)

is clearly missing from API.
Offline Norguhtar  
#633 Оставлено : 4 декабря 2020 г. 12:32:09(UTC)
Norguhtar

Статус: Участник

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

Поблагодарили: 2 раз в 2 постах
Эммм... А что шифрование не поддерживается?

openssl smime -gost89 -encrypt -out pkcs7_test.enc -in test.cer test.cer
Error creating PKCS#7 structure
140195340399744:error:21082096:PKCS7 routines:PKCS7_RECIP_INFO_set:encryption not supported for this key type:crypto/pkcs7/pk7_lib.c:488:
140195340399744:error:21073078:PKCS7 routines:PKCS7_encrypt:error adding recipient:crypto/pkcs7/pk7_smime.c:458:


при этом

openssl ciphers -v | grep GOST
GOST2012-GOST8912-GOST8912 TLSv1 Kx=GOST Au=GOST12 Enc=GOST89(256) Mac=GOST89
GOST2001-GOST89-GOST89 TLSv1 Kx=GOST Au=GOST01 Enc=GOST89(256) Mac=GOST89

Сертификат

Subject Public Key Info:
Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus
Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)

При этот если включить референс gost то все работает и шифруется с этим же ключом.

Если не работает, то можно как-то к примеру настроить совместную работу gost и gostengy чтобы через него только секретный ключ брать?

UPD Я посмотрел тему. Немного поясню, мне надо программными способами запустить шифрование. Что мне надо положить для получения корректного алгоритма шифрования в EVP_get_cipherbyname и отдает ли cryptopro в gostengy алгоритмы шифрования. И можно ли где-то подсмотреть это к примеру в nginx.

Отредактировано пользователем 4 декабря 2020 г. 12:50:41(UTC)  | Причина: Не указана

Offline pd  
#634 Оставлено : 4 декабря 2020 г. 14:02:29(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC)
Сообщений: 1,442
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 31 раз
Поблагодарили: 412 раз в 306 постах
Автор: Norguhtar Перейти к цитате
Эммм... А что шифрование не поддерживается?

openssl smime -gost89 -encrypt -out pkcs7_test.enc -in test.cer test.cer
Error creating PKCS#7 structure
140195340399744:error:21082096:PKCS7 routines:PKCS7_RECIP_INFO_set:encryption not supported for this key type:crypto/pkcs7/pk7_lib.c:488:
140195340399744:error:21073078:PKCS7 routines:PKCS7_encrypt:error adding recipient:crypto/pkcs7/pk7_smime.c:458:


при этом

openssl ciphers -v | grep GOST
GOST2012-GOST8912-GOST8912 TLSv1 Kx=GOST Au=GOST12 Enc=GOST89(256) Mac=GOST89
GOST2001-GOST89-GOST89 TLSv1 Kx=GOST Au=GOST01 Enc=GOST89(256) Mac=GOST89

Сертификат

Subject Public Key Info:
Public Key Algorithm: GOST R 34.10-2012 with 256 bit modulus
Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)

При этот если включить референс gost то все работает и шифруется с этим же ключом.

Если не работает, то можно как-то к примеру настроить совместную работу gost и gostengy чтобы через него только секретный ключ брать?

UPD Я посмотрел тему. Немного поясню, мне надо программными способами запустить шифрование. Что мне надо положить для получения корректного алгоритма шифрования в EVP_get_cipherbyname и отдает ли cryptopro в gostengy алгоритмы шифрования. И можно ли где-то подсмотреть это к примеру в nginx.

Engine для OpenSSL делали исключительно для поддержки функционала, который нельзя было получить альтернативными методами, например TLS в nginx.

Шифрование в сторону адресата вроде есть в cryptcp -encr.

Знания в базе знаний, поддержка в техподдержке
Offline Norguhtar  
#635 Оставлено : 4 декабря 2020 г. 14:05:53(UTC)
Norguhtar

Статус: Участник

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

Поблагодарили: 2 раз в 2 постах
Вы мне предлагаете подключать вашу либу напрямую? Ну такое себе решение. Учитывая что sign между прочим работает.
Просто не хватает только этого.

Отредактировано пользователем 4 декабря 2020 г. 14:06:45(UTC)  | Причина: Не указана

Offline pd  
#636 Оставлено : 4 декабря 2020 г. 14:13:01(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC)
Сообщений: 1,442
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 31 раз
Поблагодарили: 412 раз в 306 постах
Автор: Norguhtar Перейти к цитате
Вы мне предлагаете подключать вашу либу напрямую? Ну такое себе решение. Учитывая что sign между прочим работает.
Просто не хватает только этого.

Вы приводите пример вызова "openssl smime -encrypt", вам в ответ вроде равнозначное предложение "cryptcp -encr".

Куда напрямую подключать нашу либу? Уточните постановку вопроса тогда.
Знания в базе знаний, поддержка в техподдержке
Offline Norguhtar  
#637 Оставлено : 4 декабря 2020 г. 14:28:39(UTC)
Norguhtar

Статус: Участник

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

Поблагодарили: 2 раз в 2 постах
Автор: pd Перейти к цитате
Автор: Norguhtar Перейти к цитате
Вы мне предлагаете подключать вашу либу напрямую? Ну такое себе решение. Учитывая что sign между прочим работает.
Просто не хватает только этого.

Вы приводите пример вызова "openssl smime -encrypt", вам в ответ вроде равнозначное предложение "cryptcp -encr".

Куда напрямую подключать нашу либу? Уточните постановку вопроса тогда.



Поясняю у меня есть биндинг на golang к openssl. Я дописал туда функции

Код:

func LoadPrivateKeyFromEngine(engine *Engine, key_id string) (PrivateKey, error) {
	if engine == nil {
		return nil, errors.New("engine not found")
	}
	ckey_id := C.CString(key_id)
	defer C.free(unsafe.Pointer(ckey_id))

	key := C.ENGINE_load_private_key(engine.e, ckey_id, nil, nil)
	if key == nil {
		return nil, errors.New("ENGINE_load_private_key() failed")
	}

	p := &pKey{key: key}
	runtime.SetFinalizer(p, func(p *pKey) {
		C.X_EVP_PKEY_free(p.key)
	})
	return p, nil
}


Эта функция вынимает приватный ключ и позволяет использовать его. Эта часть работает нормально


Далее вынув приватный ключ я подписываю данные
Код:


func PKCS7Sign(certificate *Certificate, key PrivateKey, data []byte, flags int) (*PKCS7, error) {

	if certificate == nil {
		return nil, errors.New("sign certificate not found")
	}

	if len(data) == 0 {
		return nil, errors.New("empty data block")
	}

	bio := C.BIO_new_mem_buf(unsafe.Pointer(&data[0]),
		C.int(len(data)))
	if bio == nil {
		return nil, errors.New("failed creating bio")
	}
	defer C.BIO_free(bio)

	pkcs7 := C.PKCS7_sign(certificate.x, key.evpPKey(), nil, bio, C.int(flags))
	if pkcs7 == nil {
		return nil, errors.New("failed create signature pkcs7")
	}

	p := &PKCS7{pkcs7: pkcs7}

	return p, nil
}

Эта часть так же работает отлично.


Далее я сделал функцию для шифрования
Код:

func PKCS7Encrypt(certs []*Certificate, data []byte, cipher Cipher, flags int) (*PKCS7, error) {

	if len(certs) == 0 {
		return nil, errors.New("recipient certificates not found")
	}

	if len(data) == 0 {
		return nil, errors.New("empty data block")
	}

	//	var sk *C.struct_stack_st_X509

	sk := C.X_sk_X509_new_null()
	if sk == nil {
		return nil, errors.New("can't create new stack")
	}

	for _, cert := range certs {
		res := C.X_sk_X509_push(sk, cert.x)
		if res == 0 {
			return nil, errors.New("can't add cert into stack")
		}
	}

	bio := C.BIO_new_mem_buf(unsafe.Pointer(&data[0]),
		C.int(len(data)))
	if bio == nil {
		return nil, errors.New("failed creating bio")
	}
	defer C.BIO_free(bio)

	pkcs7 := C.PKCS7_encrypt(sk, bio, cipher.ptr, C.int(flags))
	if pkcs7 == nil {
		return nil, errors.New("failed create encrypt pkcs7")
	}

	p := &PKCS7{pkcs7: pkcs7}

	return p, nil
}


Эта функция отлично работает с референсным gost, но работает с вашей реализацией. Код выглядит так

Код:

func TestPKCS7Encrypt(t *testing.T) {
	certBytes, err := ioutil.ReadFile("test.cer")
	if err != nil {
		t.Fatal(err)
	}

	cert, err := LoadCertificateFromPEM(certBytes)
	if err != nil {
		t.Fatal(err)
	}

	cipher, err := GetCipherByName("gost89")
	if err != nil {
		t.Fatal(err)
	}

	data, err := ioutil.ReadFile("pkcs7_test.go")
	if err != nil {
		t.Fatal(err)
	}

	pkcs7, err := PKCS7Encrypt([]*Certificate{cert}, data, *cipher, PKCS7_DETACHED|PKCS7_BINARY|PKCS7_PARTIAL)
	if err != nil {
		t.Fatal(err)
	}

	encryptBytes, err := pkcs7.MarshalPKCS7DER()
	if err != nil {
		t.Fatal(err)
	}

	err = ioutil.WriteFile("pkcs7_test.enc", encryptBytes, 0644)
	if err != nil {
		t.Fatal(err)
	}
}


И код у меня ломается на PKCS7Encrypt. А именно на C.PKCS7_encrypt(sk, bio, cipher.ptr, C.int(flags))

Как я вижу в него не верно отдается алгоритм шифрования. Как я понимаю это или связано с отсутствием реализации с вашей стороны или с тем что я неверно указываю алгоритм.

Отредактировано пользователем 4 декабря 2020 г. 14:29:35(UTC)  | Причина: Не указана

Offline pd  
#638 Оставлено : 4 декабря 2020 г. 14:53:20(UTC)
pd

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

Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC)
Сообщений: 1,442
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 31 раз
Поблагодарили: 412 раз в 306 постах
Автор: Norguhtar Перейти к цитате

Поясняю у меня есть биндинг на golang к openssl. Я дописал туда функции

...

И код у меня ломается на PKCS7Encrypt. А именно на C.PKCS7_encrypt(sk, bio, cipher.ptr, C.int(flags))

Как я вижу в него не верно отдается алгоритм шифрования. Как я понимаю это или связано с отсутствием реализации с вашей стороны или с тем что я неверно указываю алгоритм.

Всё верно, мы реализовали gost89-cnt и gost89-cnt-12, они используются в TLS, остальное не является для нас целевым использованием.

А также, да, имея возможность менять код, можно и нужно использовать наши библиотеки, тем более если это ваше приложение.

Отредактировано пользователем 4 декабря 2020 г. 14:54:06(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline Norguhtar  
#639 Оставлено : 4 декабря 2020 г. 14:59:57(UTC)
Norguhtar

Статус: Участник

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

Поблагодарили: 2 раз в 2 постах
Автор: pd Перейти к цитате
Автор: Norguhtar Перейти к цитате

Поясняю у меня есть биндинг на golang к openssl. Я дописал туда функции

...

И код у меня ломается на PKCS7Encrypt. А именно на C.PKCS7_encrypt(sk, bio, cipher.ptr, C.int(flags))

Как я вижу в него не верно отдается алгоритм шифрования. Как я понимаю это или связано с отсутствием реализации с вашей стороны или с тем что я неверно указываю алгоритм.

Всё верно, мы реализовали gost89-cnt и gost89-cnt-12, они используются в TLS, остальное не является для нас целевым использованием.

А также, да, имея возможность менять код, можно и нужно использовать наши библиотеки, тем более если это ваше приложение.


А добавить в engine никак? Это сильно бы упростило интеграцию. А при использовании ваших библиотек мне придется биндинг фактически писать с нуля и привязываться в том числе и к вашей реализации.

Если нельзя, то есть ли какие-то ограничение на использование ваших библиотек, если к примеру я решу сделать engine по типу gostengy и выложить в opensource?
Offline Norguhtar  
#640 Оставлено : 4 декабря 2020 г. 15:14:14(UTC)
Norguhtar

Статус: Участник

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

Поблагодарили: 2 раз в 2 постах
И еще вопрос. Я могу отключить обработку шифрования в вашем модуле при помощи default_algorithms, а брать gost89 из модуля gost?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
67 Страницы«<6263646566>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.