httpdのバージョンが上がったらそのうち対応されて直ると思いますが
それまでは使えると思うのでメモっておきます。
具体的には次のようなエラーがでた場合の対処です。
1 2 3 4 5 6 7 8 9 10 |
ssl_engine_init.c:54:12: error: static declaration of 'DH_set0_pqg' follows non-static declaration static int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g) ^ In file included from /usr/local/libressl/include/openssl/dsa.h:83:0, from /usr/local/libressl/include/openssl/x509.h:99, from /usr/local/libressl/include/openssl/pem.h:71, from /usr/local/libressl/include/openssl/ssl.h:150, from ssl_private.h:90, from ssl_engine_init.c:29: /usr/local/libressl/include/openssl/dh.h:195:5: note: previous declaration of 'DH_set0_pqg' was here |
LibreSSLのopenssl/dh.hでDH_set0_pqgが宣言されているのに
mod_sslのssl_engine_init.cでDH_set0_pqgがstaticで実装されていて合っていないというエラーです。
このDH_set0_pqgという関数はOpenSSL1.1未満では実装されていないため、
mod_sslはOpenSSLが1.1未満の場合に自前の実装を使うようになっています。
プリプロセッサ的にはMODSSL_USE_OPENSSL_PRE_1_1_APIがONになっていれば
mod_ssl側でDH_set0_pqgを実装する形です。
このMODSSL_USE_OPENSSL_PRE_1_1_APIはLibreSSLを使うとONになるようになっているため
DH_set0_pqgが実装されたLibreSSL 2.7以降と合わせると不整合という状態になってしまいます。
(LibreSSLは基本的にOpenSSL 1.0.1ベースだが、LibreSSL 2.7でOpenSSL 1.0.2や1.1.0の機能がいくらか追加された)
対処としてはmod_ssl側の実装を削除してしまうだけです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
--- modules/ssl/ssl_engine_init.c 2018-02-14 08:43:36.000000000 +0900 +++ modules/ssl/ssl_engine_init.c.mod 2018-04-05 13:20:58.117148437 +0900 @@ -48,29 +48,6 @@ #define KEYTYPES "RSA or DSA" #endif -#if MODSSL_USE_OPENSSL_PRE_1_1_API -/* OpenSSL Pre-1.1.0 compatibility */ -/* Taken from OpenSSL 1.1.0 snapshot 20160410 */ -static int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g) -{ - /* q is optional */ - if (p == NULL || g == NULL) - return 0; - BN_free(dh->p); - BN_free(dh->q); - BN_free(dh->g); - dh->p = p; - dh->q = q; - dh->g = g; - - if (q != NULL) { - dh->length = BN_num_bits(q); - } - - return 1; -} -#endif - /* * Grab well-defined DH parameters from OpenSSL, see the BN_get_rfc* * functions in for all available primes. |
mod_sslとLibreSSLでは微妙に実装内容が違うのですが、きっとLibreSSL側の実装の方が信用できる。
mod_sslの方が信用できるよ派の人はssl_engine_init.c内のDH_set0_pqgを適当にリネームでもすればよいと思います。
あと私はApacheよりNginx派です。