弁財天
ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」
ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」
RHEL5.11に付属するHTTPサーバはhttpd-2.2.31-1.el5で
openssl-0.9.8e-40.el5_11のmod_sslを使ってる。
なのでTLS1.2で喋ることができない。
TLS_DHE_RSA_WITH_AES_256_CBC_SHA、鍵長 256 bit、TLS 1.0)
このままではまたしてもプードルに殺されてしまうかもw
なのでRHEL5環境にTLS1.2を導入して
TLS_DHE_RSA_WITH_AES_256_CBC_SHA、鍵長 256 bit、TLS 1.0
を
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、鍵長 256 bit、TLS 1.2
へのアップグレードを試みる。
じゃぁ、openssl-1.1.0cまでyum updateすればいいだけなんじゃね?
と思ったら大間違い。
# rpm -e openssl-0.9.8e-40.el5_11.x86_64 エラー: 依存性の欠如: libcrypto.so.6()(64bit) は (インストール済み)curl-7.15.5-17.el5_9.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)gnupg-1.4.5-18.el5_10.1.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)wget-1.11.4-3.el5_8.2.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)OpenIPMI-libs-2.0.16-16.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)libwvstreams-4.2.2-2.1.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)neon-0.25.5-10.el5_4.1.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)cadaver-0.22.3-4.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)OpenIPMI-2.0.16-16.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)vorbis-tools-1.1.1-3.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)tcpdump-3.9.4-15.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)slrn-0.9.8.1pl1-1.2.2.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)elinks-0.11.1-8.el5_9.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)nspluginwrapper-1.3.0-9.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)python-libs-2.4.3-56.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)m2crypto-0.16-9.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)wpa_supplicant-0.5.10-10.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)openssh-4.3p2-82.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)cyrus-sasl-2.1.22-7.el5_8.1.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)python-ldap-2.2.0-2.1.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)hplip-1.6.7-6.el5_6.1.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)pyOpenSSL-0.6-2.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)fipscheck-1.2.0-1.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)fetchmail-6.3.6-4.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)mutt-1.4.2.2-6.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)openssh-clients-4.3p2-82.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)openssh-server-4.3p2-82.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)ipsec-tools-0.6.5-14.el5_8.5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)pam_ccreds-3-5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)libsane-hpaio-1.6.7-6.el5_6.1.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)gnome-vfs2-2.16.2-12.el5_9.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)evolution-data-server-1.12.3-18.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)net-snmp-libs-5.3.2.2-25.el5_11.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)net-snmp-5.3.2.2-25.el5_11.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)openldap-2.3.43-29.el5_11.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)bind-libs-9.3.6-25.P1.el5_11.11.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)sendmail-8.13.8-10.el5_11.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)bind-utils-9.3.6-25.P1.el5_11.11.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)stunnel-4.15-2.el5.2.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)ntp-4.2.2p1-18.el5_11.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)postgresql84-libs-8.4.20-1.el5_10.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)postgresql84-8.4.20-1.el5_10.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)postgresql84-server-8.4.20-1.el5_10.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)postgresql-libs-8.1.23-10.el5_10.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)cyrus-sasl-devel-2.1.22-7.el5_8.1.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)postgresql84-devel-8.4.20-1.el5_10.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)pkcs11-helper-1.08-1.el5.rf.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)openvpn-2.3.13-1.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)mysql-5.0.95-5.el5_9.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)postfix-2.3.3-7.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)distcache-1.4.5-14.1.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)httpd-tools-2.2.31-1.el5.x86_64 に必要とされています libcrypto.so.6()(64bit) は (インストール済み)mod_ssl-2.2.31-1.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)curl-7.15.5-17.el5_9.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)gnupg-1.4.5-18.el5_10.1.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)wget-1.11.4-3.el5_8.2.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)libwvstreams-4.2.2-2.1.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)neon-0.25.5-10.el5_4.1.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)cadaver-0.22.3-4.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)vorbis-tools-1.1.1-3.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)slrn-0.9.8.1pl1-1.2.2.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)elinks-0.11.1-8.el5_9.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)nspluginwrapper-1.3.0-9.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)python-libs-2.4.3-56.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)m2crypto-0.16-9.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)wpa_supplicant-0.5.10-10.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)python-ldap-2.2.0-2.1.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)python-rhsm-1.11.3-5.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)pyOpenSSL-0.6-2.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)fetchmail-6.3.6-4.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)mutt-1.4.2.2-6.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)quota-3.13-8.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)gnome-vfs2-2.16.2-12.el5_9.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)evolution-data-server-1.12.3-18.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)openldap-2.3.43-29.el5_11.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)sendmail-8.13.8-10.el5_11.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)stunnel-4.15-2.el5.2.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)postgresql84-libs-8.4.20-1.el5_10.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)postgresql84-8.4.20-1.el5_10.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)postgresql84-server-8.4.20-1.el5_10.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)postgresql-libs-8.1.23-10.el5_10.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)postgresql84-devel-8.4.20-1.el5_10.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)openvpn-2.3.13-1.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)mysql-5.0.95-5.el5_9.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)postfix-2.3.3-7.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)distcache-1.4.5-14.1.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)httpd-tools-2.2.31-1.el5.x86_64 に必要とされています libssl.so.6()(64bit) は (インストール済み)mod_ssl-2.2.31-1.el5.x86_64 に必要とされています #こんなかんじでありとあらゆるプログラムがopenssl-0.9.8eを使ってるので
しかし既存の環境をTLS1.2にアップグレードしなければならないサイトは多いはず。
なのでTLS1.2をサポートするためにopensslとhttpdをソースからビルドしてRHEL5に導入してみる。
https://www.openssl.org/source/
2016年11月25日の最新版は
5058 2016-Nov-10 14:15:12 openssl-1.1.0c.tar.gz (SHA256) (PGP sign) (SHA1)
5183 2016-Sep-26 10:04:14 openssl-1.0.2j.tar.gz (SHA256) (PGP sign) (SHA1)
https://httpd.apache.org/
Apache HTTP Serverの最新は
Apache httpd 2.4.23 Released
openssl-1.1.0cに2.4.23がまだ対応できてないとかで、openssl-1.0.2jを使う。
openssl-1.0.2jをconfigするのにperl-5.10以上が必要なのだけどRHEL5はperl-5.8.8なので ソースから最新のperl-5.24.0をビルドして導入した。
/usr/local/など他のプログラムと競合するディレクトリは避ける。/opt/openssl-1.0.2j/に導入してみる。
./config --prefix=/opt/openssl-1.0.2j --openssldir=/opt/openssl-1.0.2j sharedmake clean;make;make installして導入。
次はhttpd 2.4.23
環境変数の設定はこんな。
/home/hoge/src/C_httpd-2.4.23.setEnv
export PKG_CONFIG_PATH=/opt/openssl-1.0.2j export LIBS=-ldl export LDFLAGS="-lssl -lcrypto -ldl" export LD_LIBRARY_PATH=/opt/openssl-1.0.2j/lib export CPPFLAGS="-I/opt/openssl-1.0.2j/include"
./configure -prefix=/opt/httpd-2.4.23_openssl-1.0.2j \ --enable-ssl=shared \ --with-ssl=/opt/openssl-1.0.2j \ --with-mpm=prefork --enable-modules="all" \ --enable-mods-shared="most" \ --with-included-aprmake;make installして導入。
/opt/httpd-2.4.23_openssl-1.0.2j/conf/httpd.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf
オレオレ証明書とパスワード無しのキー証明書を配置。
server.crtの代りにserver_cert.pemを、
server.keyの代りにserver_key_nopass.pemを、
server-ca.crtの代りにcacert.pemを置くだけ。
#SSLCertificateFile "/opt/httpd-2.4.23_openssl-1.0.2j/conf/server.crt" SSLCertificateFile "/opt/httpd-2.4.23_openssl-1.0.2j/conf/server_cert.pem" #SSLCertificateKeyFile "/opt/httpd-2.4.23_openssl-1.0.2j/conf/server.key" SSLCertificateKeyFile "/opt/httpd-2.4.23_openssl-1.0.2j/conf/server_key_nopass.pem" #SSLCertificateChainFile "/opt/httpd-2.2.31_openssl-1.0.2j/conf/server-ca.crt" SSLCertificateChainFile "/opt/httpd-2.2.31_openssl-1.0.2j/conf/cacert.pem"
/opt/httpd-2.4.23_openssl-1.0.2j/bin/apachectl startする前に 環境変数(LD_LIBRARY_PATH)が必要。
# export LD_LIBRARY_PATH=/opt/openssl-1.0.2j/lib
export PKG_CONFIG_PATH=/opt/openssl-1.1.0c export LIBS=-ldl export LDFLAGS="-lssl -lcrypto -ldl" export LD_LIBRARY_PATH=/opt/openssl-1.1.0c/lib export CPPFLAGS="-I/opt/openssl-1.1.0c/include"
/configure -prefix=/opt/httpd-2.4.23_openssl-1.1.0c \ --enable-ssl=shared \ --with-ssl=/opt/openssl-1.1.0c \ --with-mpm=prefork --enable-modules="all" \ --enable-mods-shared="most" \ --with-included-apr
--with-included-aprを使うので、 ./srclibの下に最新のapr-1.5.2.tar.gzを展開してディレクトリ名をapr-1.5.2からaprに直す。 apr-util-1.5.4.tar.gzも展開してapr-util-1.5.4をapr-utilに変更する。
/home/hoge/src/httpd-2.4.23/srclib/apr/libtool --silent --mode=compile gcc -std=gnu99 -I/opt/openssl-1.1.0c/include -g -O2 -pthread -DLINUX -D_REENTRANT -D_GNU_SOURCE -I/opt/openssl-1.0.2j/include \ -I. -I/home/hoge/src/httpd-2.4.23/os/unix -I/home/hoge/src/httpd-2.4.23/include -I/home/hoge/src/httpd-2.4.23/srclib/apr/include -I/home/hoge/src/httpd-2.4.23/srclib/apr-util/include -I/usr/local/include -I/home/hoge/src/httpd-2.4.23/modules/aaa -I/home/hoge/src/httpd-2.4.23/modules/cache -I/home/hoge/src/httpd-2.4.23/modules/core -I/home/hoge/src/httpd-2.4.23/modules/database -I/home/hoge/src/httpd-2.4.23/modules/filters -I/home/hoge/src/httpd-2.4.23/modules/ldap -I/home/hoge/src/httpd-2.4.23/modules/loggers -I/home/hoge/src/httpd-2.4.23/modules/lua -I/home/hoge/src/httpd-2.4.23/modules/proxy -I/home/hoge/src/httpd-2.4.23/modules/session -I/home/hoge/src/httpd-2.4.23/modules/ssl -I/home/hoge/src/httpd-2.4.23/modules/test -I/home/hoge/src/httpd-2.4.23/server -I/home/hoge/src/httpd-2.4.23/modules/arch/unix -I/home/hoge/src/httpd-2.4.23/modules/dav/main -I/home/hoge/src/httpd-2.4.23/modules/generators -I/home/hoge/src/httpd-2.4.23/modules/mappers -prefer-non-pic -static -c ab.c && touch ab.lo ab.c: In function 'main': ab.c:2357: warning: implicit declaration of function 'SSLv2_client_method' ab.c:2357: warning: assignment makes pointer from integer without a cast ab.c:2365: warning: 'TLSv1_1_client_method' is deprecated (declared at /opt/openssl-1.1.0c/include/openssl/ssl.h:1604) ab.c:2367: warning: 'TLSv1_2_client_method' is deprecated (declared at /opt/openssl-1.1.0c/include/openssl/ssl.h:1610) ab.c:2370: warning: 'TLSv1_client_method' is deprecated (declared at /opt/openssl-1.1.0c/include/openssl/ssl.h:1598) ab.c:2416: warning: implicit declaration of function 'CRYPTO_malloc_init' /home/hoge/src/httpd-2.4.23/srclib/apr/libtool --silent --mode=link gcc -std=gnu99 -g -O2 -pthread -L/opt/openssl-1.1.0c/lib -lssl -lcrypto -luuid -lrt -lcrypt -lpthread \ -ldl -o ab ab.lo /home/hoge/src/httpd-2.4.23/srclib/apr-util/libaprutil-1.la -lexpat /home/hoge/src/httpd-2.4.23/srclib/apr/libapr-1.la -luuid -lrt -lcrypt -lpthread -lm ab.o: In function `main': /home/hoge/src/httpd-2.4.23/support/ab.c:2416: undefined reference to `CRYPTO_malloc_init' /home/hoge/src/httpd-2.4.23/support/ab.c:2357: undefined reference to `SSLv2_client_method' collect2: ld returned 1 exit status make[2]: *** [ab] エラー 1 make[2]: ディレクトリ `/home/hoge/src/httpd-2.4.23/support' から出ます make[1]: *** [all-recursive] エラー 1 make[1]: ディレクトリ `/home/hoge/src/httpd-2.4.23/support' から出ます make: *** [all-recursive] エラー 1こんなエラーになる。httpd-2.4.23はopenssl-1.1.0cに対応できてないw
C_httpd-2.2.31.setEnv
export PKG_CONFIG_PATH=/opt/openssl-1.0.2j export LIBS=-ldl export LDFLAGS="-L/opt/openssl-1.0.2j/lib -lssl -lcrypto -ldl" export LD_LIBRARY_PATH=/opt/openssl-1.0.2j/lib export CPPFLAGS="-I/opt/openssl-1.0.2j/include"
./configure -prefix=/opt/httpd-2.2.31_openssl-1.0.2j \ --enable-ssl=shared \ --with-ssl=/opt/openssl-1.0.2j \ --with-mpm=prefork --enable-modules="all" \ --enable-mods-shared="most" \ --with-included-apr
make clean;make;make install
/opt/httpd-2.2.31_openssl-1.0.2j/conf/httpd.conf
Include conf/extra/httpd-ssl.conf2.2.31もTLS1.2が喋れるようになった。
Bonaponta in Network 2016年11月25日 午後 07:11 JST
Tags: オレオレ証明書