Программиорвание OpenSSL проблема с созданием сертификата

Модератор: Fastman

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
CAMOJIET
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-07-25 3:23:27

Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение CAMOJIET » 2009-01-04 7:19:29

Код:

Код: Выделить всё

#include <openssl/bio.h>
#include <openssl/ssl.h>
#include <openssl/err.h>

#include <stdio.h>
#include <string.h>

main()
{
	BIO *sbio, *bbio, *acpt, *out;
	int len;
	char tmpbuf[1024];
	SSL_CTX *ctx;
	SSL *ssl;
	ERR_load_crypto_strings();
	ERR_load_SSL_strings();
	OpenSSL_add_all_algorithms();
	/* Might seed PRNG here */
	ctx = SSL_CTX_new(SSLv23_server_method());
	printf("Before Cert Load\n");
	if (!SSL_CTX_use_certificate_file(ctx,"server.crt",SSL_FILETYPE_PEM)
		|| !SSL_CTX_use_PrivateKey_file(ctx,"server.pem",SSL_FILETYPE_PEM)
		|| !SSL_CTX_check_private_key(ctx)) 
	{
		fprintf(stderr, "Error setting up SSL_CTX\n");
		ERR_print_errors_fp(stderr);
		return 0;
	}
	printf("After Cert Load\n	");
	/* Might do other things here like setting verify locations and
	* DH and/or RSA temporary key callbacks
	*/
	/* New SSL BIO setup as server */
	sbio=BIO_new_ssl(ctx,0);
	BIO_get_ssl(sbio, &ssl);
	if(!ssl) {
		fprintf(stderr, "Can't locate SSL pointer\n");
		/* whatever ... */
	}
	/* Don't want any retries */
	SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
	/* Create the buffering BIO */
	bbio = BIO_new(BIO_f_buffer());
	/* Add to chain */
	sbio = BIO_push(bbio, sbio);
	acpt=BIO_new_accept("4433");
	/* By doing this when a new connection is established
	* we automatically have sbio inserted into it. The
	* BIO chain is now 'swallowed' by the accept BIO and
	* will be freed when the accept BIO is freed.
	*/
	
	BIO_set_accept_bios(acpt,sbio);
	out = BIO_new_fp(stdout, BIO_NOCLOSE);
	/* Setup accept BIO */
	if(BIO_do_accept(acpt) <= 0) {
		fprintf(stderr, "Error setting up accept BIO\n");
		ERR_print_errors_fp(stderr);
		return 0;
	}
	/* Now wait for incoming connection */
	if(BIO_do_accept(acpt) <= 0) {
		fprintf(stderr, "Error in connection\n");
		ERR_print_errors_fp(stderr);
		return 0;
	}
	/* We only want one connection so remove and free
	* accept BIO
	*/
	sbio = BIO_pop(acpt);
	BIO_free_all(acpt);
	if(BIO_do_handshake(sbio) <= 0) 
	{
		fprintf(stderr, "Error in SSL handshake\n");
		ERR_print_errors_fp(stderr);
		return 0;
	}
	BIO_puts(sbio, "HTTP/1.0 200 OK\r\nContent-type: text/plain\r\n\r\n");
	BIO_puts(sbio, "\r\nConnection Established\r\nRequest headers:\r\n");
	BIO_puts(sbio, "--------------------------------------------------\r\n");
	for(;;) {
		len = BIO_gets(sbio, tmpbuf, 1024);
		if(len <= 0) break;
		BIO_write(sbio, tmpbuf, len);
		BIO_write(out, tmpbuf, len);
		/* Look for blank line signifying end of headers*/
		if((tmpbuf[0] == '\r') || (tmpbuf[0] == '\n')) break;
	}
	BIO_puts(sbio, "--------------------------------------------------\r\n");
	BIO_puts(sbio, "\r\n");
	/* Since there is a buffering BIO present we had better flush it */
	BIO_flush(sbio);
	BIO_free_all(sbio);
}

Стыренный с документации OpenSSL
После запуска кода

Код: Выделить всё

Before Cert Load
Segmentation fault: 11 (core dumped)
Тобишь - SA - происходит во время загрузки сертификата и private key
Как я их делал -
openssl genrsa -rand /dev/random -des3 -out server.key 1024
openssl rsa -in server.key -out server.pem
openssl req -new -key server.pem -out server.crt
openssl x509 -req -days 365 -in server.crt -signkey server.key -out server.crt
Эти строки я стырил сдесь на форуме.
Я собственно и сам пытался сделать ключи по ману - теория и практика openssl и разными способами и тд и тп. Но сегментейшн фэйлд оказался сильнее меня :st:
И изначально в доках по openssl и в первой и во второй функции был только server.pem - я пробовал и так и сяк уже два дня страдаю на одном месте. :bn:
Помогите чем могите :oops:

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


CAMOJIET
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-07-25 3:23:27

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение CAMOJIET » 2009-01-04 13:11:10

Все что я понял как им пользоваться - это запустить прогу
Starting program: /usr/home/zwei/prog/realy_ssl/recv
(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...(no debugging symbols found)...After Cert Load

Program received signal SIGSEGV, Segmentation fault.
0x280a2913 in SSL_CTX_use_certificate_file () from /usr/lib/libssl.so.5
Судя по всему надо что то сделать с файлом сертификата. Читаю дальше. :bad:



paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение paradox » 2009-01-04 13:23:20

собирай с отладочной инфой свою прогу
и пересобери с отладочно инфой используемые библиотеки
-g
потом запускаешь
программа падает создает core
дальше
gdb программа -c программа.core
>bt<Enter>

CAMOJIET
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-07-25 3:23:27

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение CAMOJIET » 2009-01-04 13:33:59

Код: Выделить всё

Core was generated by `recv'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libssl.so.5...done.
Loaded symbols for /usr/lib/libssl.so.5
Reading symbols from /lib/libcrypto.so.5...done.
Loaded symbols for /lib/libcrypto.so.5
Reading symbols from /lib/libc.so.7...done.
Loaded symbols for /lib/libc.so.7
Reading symbols from /libexec/ld-elf.so.1...done.
Loaded symbols for /libexec/ld-elf.so.1
#0  0x280a2913 in SSL_CTX_use_certificate_file () from /usr/lib/libssl.so.5
(gdb) bt
#0  0x280a2913 in SSL_CTX_use_certificate_file () from /usr/lib/libssl.so.5
#1  0x08048bca in main () at ./recv.c:21

CAMOJIET
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-07-25 3:23:27

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение CAMOJIET » 2009-01-04 13:35:31

Погодь отладочно openssl пересобрать полностью?
Это как если в краце?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение paradox » 2009-01-04 13:39:48

ищи
опция debug должна быть в сборке
устанавливаешь и пересобираешь


либо как вариант
ищешь уже готовый пример и смотриш в него
как там загружаються сертификаты
и как создаються

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение hizel » 2009-01-04 14:00:43

ну явно где то с памятью не правильно работаете %:)
проверяйте в

Код: Выделить всё

man SSL_CTX_new
man SSL_CTX_use_certificate_file
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.


CAMOJIET
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-07-25 3:23:27

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение CAMOJIET » 2009-01-04 14:13:38

$ gcc -v
Using built-in specs.
Target: i386-undermydesk-freebsd
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 4.2.1 20070719 [FreeBSD]
Может быть из за версии gcc?

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение paradox » 2009-01-04 14:24:44

врядли gcc сдесь виноват
собирайте openssl с дебагом
и смотрите где что ни так

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение hizel » 2009-01-04 14:32:25

а если убрать server.crt и server.pem у программы?
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

CAMOJIET
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-07-25 3:23:27

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение CAMOJIET » 2009-01-04 15:04:37

Если убрать файлы то он ругается что их нет

Код: Выделить всё

After Cert Load
Error setting up SSL_CTX
44908:error:140A90A1:SSL routines:SSL_CTX_new:library has no ciphers:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/ssl_lib.c:1424:
44908:error:02001002:system library:fopen:No such file or directory:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:352:fopen('server.crt','r')
44908:error:20074002:BIO routines:FILE_CTRL:system lib:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:354:
44908:error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/ssl_rsa.c:470:
Блин не могу скомпилить с дебагом.
Разпаковал из distfiles добавил в Makefile к CFLAGS опцию -g - вроде проканало - а где библиотеки непонятно там, где они должны быть их нет
(/usr/lib/) вместо этого появилась папка /usr/local/ssl где есть пака lib где:

Код: Выделить всё

/usr/local/ssl/lib]# ls -l
total 7124
drwxr-xr-x  2 root  wheel      512 Jan  4 21:26 engines
-rw-r--r--  1 root  wheel  5704374 Jan  4 21:32 libcrypto.a
-rw-r--r--  1 root  wheel  1532940 Jan  4 21:32 libssl.a
drwxr-xr-x  2 root  wheel      512 Jan  4 21:26 pkgconfig
А so файлов нигде нет. :(

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение paradox » 2009-01-04 15:11:00

если с портов ставить то

Код: Выделить всё

security\openssl\Makefile
там добавляешь -g
пересобираешь
и переустанавлиаешь

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение hizel » 2009-01-04 16:11:20

что то странное, это openssl в корку падает тупо от левого файла сертификатов :shock:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

CAMOJIET
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-07-25 3:23:27

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение CAMOJIET » 2009-01-04 16:28:08

Код: Выделить всё

Core was generated by `recv'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libssl.so.5...done.
Loaded symbols for /usr/lib/libssl.so.5
Reading symbols from /lib/libcrypto.so.5...done.
Loaded symbols for /lib/libcrypto.so.5
Reading symbols from /lib/libc.so.7...done.
Loaded symbols for /lib/libc.so.7
Reading symbols from /lib/libthr.so.3...done.
Loaded symbols for /lib/libthr.so.3
Reading symbols from /libexec/ld-elf.so.1...done.
Loaded symbols for /libexec/ld-elf.so.1
#0  0x280b1b84 in SSL_CTX_use_certificate_file (ctx=0x0, file=0x8049054 "server.crt", type=Variable "type" is not available.
) at ssl_rsa.c:481
481			x=PEM_read_bio_X509(in,NULL,ctx->default_passwd_callback,ctx->default_passwd_callback_userdata);
[New Thread 0x28401100 (LWP 100129)]
(gdb) bt
#0  0x280b1b84 in SSL_CTX_use_certificate_file (ctx=0x0, file=0x8049054 "server.crt", type=Variable "type" is not available.
) at ssl_rsa.c:481
#1  0x08048bca in main () at ./recv.c:21


CAMOJIET
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-07-25 3:23:27

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение CAMOJIET » 2009-01-04 17:10:42

Если вторая функция то вывод такой

Код: Выделить всё

Loaded symbols for /libexec/ld-elf.so.1
#0  0x280afe19 in SSL_CTX_use_PrivateKey_file (ctx=0x0, 
    file=0x80488e3 "server.pem", type=1) at ssl_rsa.c:654
654			pkey=PEM_read_bio_PrivateKey(in,NULL,
[New Thread 0x28401100 (LWP 100127)]
(gdb) bt
#0  0x280afe19 in SSL_CTX_use_PrivateKey_file (ctx=0x0, 
    file=0x80488e3 "server.pem", type=1) at ssl_rsa.c:654
#1  0x080487fa in main () at ./recv.c:22

CAMOJIET
ефрейтор
Сообщения: 62
Зарегистрирован: 2008-07-25 3:23:27

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение CAMOJIET » 2009-01-12 2:28:46

Времени то прошло времени то сколько проблема осталась, но мне уже пофиг - вчера девушка бросила - пью капитанский ром сижу с открытым окном курю сигареты (я бросил (три месяца не курил)) и незнаю что делать. Столько мыслей в голове, столько мыслей (Извиняюсь за оффтоп(тысяча извинений)) я пяный ужос и плачу. Спасибо что вы есть мужики с новым годом))) :bn:

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: Программиорвание OpenSSL проблема с созданием сертификата

Непрочитанное сообщение zingel » 2009-02-15 5:43:33

откройте для себя все ltrace && truss
Z301171463546 - можно пожертвовать мне денег