Приветствую!
При использовании клиентских сертификатов, подписанных алгоритмом sha256WithRSAEncryption при попытке установки соединения nginx рвет его с ошибкой в логе:
[code]
SSL_do_handshake() failed (SSL: error:0D0C50A1:asn1 encoding routines:ASN1_item_verify:unknown message digest algorithm) while SSL handshaking
[/code]
Где-то в интернете наткнулся на информацию, что OpenSSL при стандартной инициализации подключает не все алгоритмы, и нужно отдельно вызывать OpenSSL_add_all_algorithms(). Собственно, после этого все заработало:
[code]
--- nginx-0.8.31/src/event/ngx_event_openssl.c 2009-11-23 17:09:57.000000000 +0300
+++ nginx-my/src/event/ngx_event_openssl.c 2010-02-06 16:04:14.871090623 +0300
@@ -106,6 +106,8 @@
ENGINE_load_builtin_engines();
+ OpenSSL_add_all_algorithms();
+
ngx_ssl_connection_index = SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);
if (ngx_ssl_connection_index == -1) {
--- nginx-0.8.31/src/event/ngx_event_openssl.h 2009-11-11 13:59:07.000000000 +0300
+++ nginx-my/src/event/ngx_event_openssl.h 2010-02-06 16:00:43.691095715 +0300
@@ -15,6 +15,7 @@
#include <openssl/err.h>
#include <openssl/conf.h>
#include <openssl/engine.h>
+#include <openssl/evp.h>
#define NGX_SSL_NAME "OpenSSL"
[/code]