Re: сборка с ssl

Igor Sysoev igor на sysoev.ru
Вс Дек 13 10:45:26 MSK 2009


On Sun, Dec 13, 2009 at 12:53:39AM +0300, Maxim Dounin wrote:

> Hello!
> 
> On Sat, Dec 12, 2009 at 11:57:05PM +0300, Nikolay Grebnev wrote:
> 
> > Добрый день.
> > 
> > Чего-то напрочь не удается собрать с поддержкой ssl нормально.
> > 
> > OS - CentOS 5.2 (вроде как - или 5.1)
> > 
> > При сборке с базовыми либами ругается
> >         objs/ngx_modules.o \
> >         -lcrypt -lpcre -lssl -lcrypto -ldl -lz
> > objs/src/http/ngx_http_request.o: In function `ngx_http_ssl_servername':
> > ngx_http_request.c:(.text+0xc85): undefined reference to
> > `SSL_get_servername'
> > ngx_http_request.c:(.text+0xd76): undefined reference to `SSL_set_SSL_CTX'
> > collect2: выполнение ld завершилось с кодом возврата 1
> > make[1]: *** [objs/nginx] Ошибка 1
> > make[1]: Leaving directory `/root/nginx-ssl/nginx-0.8.29'
> > make: *** [build] Ошибка 2
> 
> Вероятно, библиотека openssl в системе и её заголовочные файлы 
> несинхронизированы между собой.  Не знаю как в центосе, по вообще 
> в мире линуксов популярна идея делать отдельными пакетам openssl и 
> openssl-dev, и их рассинхронизация обычно доставляет.
> 
> > При сборке с внешним ssl -
> > ./configure --with-openssl=/root/nginx-ssl/openssl-0.9.8l
> > --with-http_ssl_module
> > 
> > # make -j 5
> > make -f objs/Makefile
> > make[1]: Entering directory `/root/nginx-ssl/nginx-0.8.29'
> > cd /root/nginx-ssl/openssl-0.9.8l \
> >         && make clean \
> >         && ./config --prefix=/root/nginx-ssl/openssl-0.9.8l/.openssl
> > no-shared  no-threads \
> >         && make \
> >         && make install
> > make[2]: Entering directory `/root/nginx-ssl/openssl-0.9.8l'
> > rm -f *.map *.so *.so.* *.dll engines/*.so engines/*.dll *.a engines/*.a
> > */lib */*/lib
> > rm: невозможно удалить `openssl/lib': Это каталог
> > make[2]: *** [libclean] Ошибка 1
> 
> Не отрабатывает 'make clean' в openssl.  Судя по всему - не 
> отрабатывает из-за того, что с этими же исходниками собирали nginx 
> 0.7.*.
> 
> Решение:
> 
> rm -r /root/nginx-ssl/openssl-0.9.8l/openssl

Да, в 0.7 собранный openssl ставится в openssl-0.9.8l/openssl. Из-за того,
что "make clean" потом его не может удалить, в 0.8.17 openssl ставится в
openssl-0.9.8l/.openssl

> > make[2]: Leaving directory `/root/nginx-ssl/openssl-0.9.8l'
> > make[1]: *** [/root/nginx-ssl/openssl-0.9.8l/.openssl/include/openssl/ssl.h]
> > Ошибка 2
> > make[1]: Leaving directory `/root/nginx-ssl/nginx-0.8.29'
> > make: *** [build] Ошибка 2
> > 
> > 
> > Это был 0.8.29.
> > =====================
> > 
> > 0.7.64 собирается с собственным ssl (./configure
> > --with-openssl=/root/nginx-ssl/openssl-0.9.8l --with-http_ssl_module)
> > # /usr/local/nginx/sbin/nginx -V
> > nginx version: nginx/0.7.64
> > TLS SNI support enabled
> > configure arguments: --with-openssl=/root/nginx-ssl/openssl-0.9.8l
> > --with-http_ssl_module
> > 
> > но не может запуститься
> > # /usr/local/nginx/sbin/nginx -t -c conf/nginx.conf-ssl
> > [emerg]: SSL_CTX_use_certificate_chain_file("/usr/local/nginx/conf/srv.pem")
> > failed (SSL: error:0906D066:PEM routines:PEM_read_bio:bad end line
> > error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib)
> > configuration file /usr/local/nginx/conf/nginx.conf-ssl test failed
> > 
> > 
> > Жутко умаялся, посоветуйте плиз что делать.
> > 
> > Да, ssl самый простенький от globessl.
> > srv.pem собирался из 2 файлов - crt и ca-bundle
> 
> Судя по ругани от openssl - в srv.pem что-то не так.  К такой 
> ругане должна приводить ошибка в строке
> 
> -----END CERTIFICATE-----
> 
> например - отсутствие перевода строки в конце, или наличие его в 
> неправильном виде (CR LF вместо LF).

Что показывает
grep -1 'BEGIN CERTIFICATE' /usr/local/nginx/conf/srv.pem | hexdump -C


-- 
Игорь Сысоев
http://sysoev.ru



Подробная информация о списке рассылки nginx-ru