○ OpenSSLのインストール 4 Xen

・CentOS 6.9 では openssl-1.0.1e がrpmでインストールされます

・各アプリケーションで独自のSSLを使う
・fedoraのパッケージをCentOS用にアレンジします
・openssl-1.0.2k-1.fc25を使います
・make はメンテナンスマシンで行っています

・fedoraのサポート期間が短いので、更新できなくなる時期がきます
・CentOS 6を使い続ける場合は、無理して入れ替えない方が良いです
・1.0.1eと1.0.2kはシンボリックリンクでSOVERSIONを同じにしています

・楕円曲線暗号モード(ECDH, ECDSA)が追加されています

・既存を使う場合は十分調査して下さい
・ソースの取得、削除は省略します
・エディタ、ファイラーの操作は省略します
・ソースを展開したら説明文を読みましょう
・Enterキーを省略します

・ログイン端末で "#" はroot、"$" は一般ユーザのプロンプトの記号です
・設定ファイルで "#" で始まる行はコメントとして解釈されます

○関連サイト

:openssl-1.0.2k-1.fc25.src.rpm  (http://dl.fedoraproject.org/)

○参照ファイル

パッケージの追加
最初の設定 (Xen)

○インストール環境

:OS CentOS 6.9
:selinux disabled
:インストール先  /usr
:作業 ~/src ~/rpmbuild
:言語 LANG=en_US.UTF-8
:ユーザー rootで実行

・メンテナンスの場合は一般ユーザから行います



○openssl-1.0.2k

○opensslの関連するソースファイル

・新バージョン(1.0.2)のlibraryを使うには、下記の再構築をして下さい

openssh, proftpd, vsftpd, ntp, bind, mysql, postfix, dovecot, bincimap, imap,
curl, httpd, php, mod_security, samba, tripwire, Net_SSLeay, etc.

○必要な開発パッケージのインストール

・perl-generatorsはepelレポから入れます

[root@mars:~]
# yum install epel-release
# yum install --enablerepo=epel perl-generators

○nmコマンドでglibcライブラリを調べます

・libc.so.6のシンボルsecure_getenvを調べます
・__secure_getenv (アンダーバー2つになっているので注意)
・シンボルに合わせてpatchファイルを修正します(次項で)

# nm /lib/libc.so.6 | grep "secure_getenv"
0002dc70 t __GI___secure_getenv
0002dc70 T __secure_getenv

○ソースの展開・ビルド

・libcrypto.a、libssl.a が devel から staticパッケージ に移されています
・全てのパッケージがi686で作成されます(CentOS6以降のデフォルト)
・sctpオプションにはlksctp-tools-develが必要です
・patchファイルがfedoraのglibc用に最適化されているので修正します
・CentOS6では、crypto-policiesに対応していないので無効にします

# cd ~
[root@earth:~]
# mkdir src/openssl
# rpm -ivh --nosignature openssl-1.0.2k-1.fc25.src.rpm

・patchファイルの検索(secure_getenv)
・patchファイルの修正(secure_getenv to __secure_getenv)
・patchファイルの確認(__secure_getenv)

# cd rpmbuild/SOURCES
[root@earth:~/rpmbuild/SOURCES]
# grep -n "secure_getenv" *.patch
# sed -i -e "s/secure_getenv/__secure_getenv/g" *.patch
# grep -n "__secure_getenv" *.patch

・specファイルを修正します(下記参照)

# cd ../SPECS
[root@earth:~/rpmbuild/SPECS]
# vi openssl.spec

・rpmパッケージの作成

# rpmbuild -ba --clean --rmsource \
--define 'dist .mn' openssl.spec
# mv openssl.spec ~/src/openssl
# cd ../RPMS/i686
[root@earth:~/rpmbuild/RPMS/i686]

・作成されたパッケージ
 openssl-1.0.2k-1.mn.i686.rpm
 oepnssl-libs-1.0.2k-1.mn.i686.rpm
 openssl-devel-1.0.2k-1.mn.i686.rpm
 openssl-perl-1.0.2k-1.mn.i686.rpm
 openssl-static-1.0.2k-1.mn.i686.rpm

# rm *debuginfo*
# mv *.rpm ~/src/openssl
# cd ../../SRPMS
[root@earth:~/rpmbuild/SRPMS]

・作成されたパッケージ
 oepnssl-1.0.2k-1.mn.src.rpm

# mv *.rpm ~/src/openssl

・インストール

# cd ~/src/openssl
[root@earth:~/src/openssl]
# rpm -Uvh openssl-devel* openssl-perl* \
openssl-libs* openssl-1.0.2k-1.mn.i686.rpm

・または

# cd ~/src/openssl
[root@earth:~/src/openssl]
# yum localinstall openssl-devel* openssl-perl* \
openssl-libs* openssl-1.0.2k-1.mn.i686.rpm

:~/rpmbuild/SPECS/openssl.spec

・crypto-policyはfc25でSSL/TLSのポリシーをコマンドで変更するツールです
・CentOS6では、crypto-policyに対応していないので無効にします
・CentOS6では、rc5は無効にされています

--- openssl.spec~	2017-02-07 00:58:48.000000000 +0900
+++ openssl.spec	2017-02-08 10:18:38.659338297 +0900
@@ -113,7 +113,7 @@ protocols.
 Summary: A general purpose cryptography library with TLS implementation
 Group: System Environment/Libraries
 Requires: ca-certificates >= 2008-5
-Requires: crypto-policies
+#Requires: crypto-policies
 # Needed obsoletes due to the base/lib subpackage split
 Obsoletes: openssl < 1:1.0.1-0.3.beta3
 Obsoletes: openssl-fips < 1:1.0.1e-28
@@ -295,7 +295,7 @@ sslarch=linux-generic64
 	--prefix=%{_prefix} --openssldir=%{_sysconfdir}/pki/tls ${sslflags} \
 	--system-ciphers-file=%{_sysconfdir}/crypto-policies/back-ends/openssl.config \
 	zlib sctp enable-camellia enable-seed enable-tlsext enable-rfc3779 \
-	enable-cms enable-md2 enable-rc5 \
+	enable-cms enable-md2 no-rc5 \
 	no-mdc2 no-ec2m no-gost no-srp \
 	--with-krb5-flavor=MIT --enginesdir=%{_libdir}/openssl/engines \
 	--with-krb5-dir=/usr shared  ${sslarch} %{?!nofips:fips}

○キャッシュ情報とファイルの確認

・libssl3.soはnssパッケージにに含まれます

[root@venus:~]
# ldconfig -p | grep -e libssl.so -e libcrypto.so
libssl.so.10 (libc6) => /usr/lib/libssl.so.10
libssl.so (libc6) => /usr/lib/libssl.so
libcrypto.so.10 (libc6) => /usr/lib/libcrypto.so.10
libcrypto.so (libc6) => /usr/lib/libcrypto.so

・ライブラリに埋め込まれたSONAME

# objdump -p /usr/lib/libssl.so.1.0.2k|grep SONAME
  SONAME               libssl.so.10

・ファイルの確認

# cd /usr/lib
[root@venus:/usr/lib]
# ls -al | grep -e libssl.so -e libcrypto.so |awk '{print $9,$10,$11}'
libcrypto.so -> libcrypto.so.1.0.2k
libcrypto.so.10 -> libcrypto.so.1.0.2k
libcrypto.so.1.0.2k  
.libcrypto.so.1.0.2k.hmac  
.libcrypto.so.10.hmac -> .libcrypto.so.1.0.2k.hmac
libssl.so -> libssl.so.1.0.2k
libssl.so.10 -> libssl.so.1.0.2k
libssl.so.1.0.2k  
.libssl.so.1.0.2k.hmac  
.libssl.so.10.hmac -> .libssl.so.1.0.2k.hmac

○openssl.cnfの差異 (1.0.1e - 1.0.2j)

--- openssl.cnf-101e	2016-09-22 18:33:50.000000000 +0900
+++ openssl.cnf-102k	2017-02-07 00:58:43.000000000 +0900
@@ -72,7 +72,7 @@ cert_opt 	= ca_default		# Certificate fi
 
 default_days	= 365			# how long to certify for
 default_crl_days= 30			# how long before next CRL
-default_md	= default		# use public key default MD
+default_md	= sha256		# use SHA-256 by default
 preserve	= no			# keep passed DN ordering
 
 # A few difference way of specifying how similar the request should look
@@ -104,7 +104,7 @@ emailAddress		= optional
 ####################################################################
 [ req ]
 default_bits		= 2048
-default_md		= sha1
+default_md		= sha256
 default_keyfile 	= privkey.pem
 distinguished_name	= req_distinguished_name
 attributes		= req_attributes
@@ -135,7 +135,7 @@ stateOrProvinceName		= State or Province
 #stateOrProvinceName_default	= Default Province
 
 localityName			= Locality Name (eg, city)
-localityName_default	= Default City
+localityName_default		= Default City
 
 0.organizationName		= Organization Name (eg, company)
 0.organizationName_default	= Default Company Ltd
@@ -341,7 +341,7 @@ signer_key	= $dir/private/tsakey.pem # T
 default_policy	= tsa_policy1		# Policy if request did not specify it
 					# (optional)
 other_policies	= tsa_policy2, tsa_policy3	# acceptable policies (optional)
-digests		= md5, sha1		# Acceptable message digests (mandatory)
+digests		= sha1, sha256, sha384, sha512	# Acceptable message digests (mandatory)
 accuracy	= secs:1, millisecs:500, microsecs:100	# (optional)
 clock_precision_digits  = 0	# number of digits after dot. (optional)
 ordering		= yes	# Is ordering defined for timestamps?



○openssl-1.0.1eの依存関係

・rpmに --test オプションを付けて削除を実行してみます
・表示は、インストールされているrpmパッケージのみです

# cd ~
[root@earth:~]
# rpm -e --test openssl

・fedoraのパッケージでは

# rpm -e --test openssl-libs

libcrypto.so.10 is needed by (installed)
    libssh2-1.4.2-2.el6_7.1.i686
    bind-libs-32:9.8.2-0.62.rc1.el6.i686
    mysql-libs-5.1.73-8.el6_8.i686
    fipscheck-1.2.0-7.el6.i686
    openssh-5.3p1-122.el6.i686
    ntpdate-4.2.6p5-10.el6.centos.2.i686
    cyrus-sasl-2.1.23-15.el6_6.2.i686
    python-libs-2.6.6-66.el6_8.i686
    ntp-4.2.6p5-10.el6.centos.2.i686
    openssh-server-5.3p1-122.el6.i686
    openssh-clients-5.3p1-122.el6.i686
    tcpdump-14:4.0.0-11.20090921gitdf3cb4.2.el6.i686
    bind-utils-32:9.8.2-0.62.rc1.el6.i686
    wget-1.12-10.el6.i686
    sendmail-8.14.4-9.el6_8.1.i686
    net-snmp-libs-1:5.5-60.el6.i686
    trousers-0.3.13-2.el6.i686
    libarchive-2.8.3-7.el6_8.i686
    openssl-devel-1.0.1e-57.el6.i686
    ecryptfs-utils-82-6.el6_1.3.i686
    net-snmp-1:5.5-60.el6.i686
    net-snmp-utils-1:5.5-60.el6.i686
    nmap-2:5.51-6.el6.i686
    m2crypto-0.20.2-9.el6.i686
    fetchmail-6.3.17-1.el6.i686
    cyrus-sasl-md5-2.1.23-15.el6_6.2.i686

libcrypto.so.10(OPENSSL_1.0.1) is needed by (installed)
    openssh-5.3p1-122.el6.i686
    ntpdate-4.2.6p5-10.el6.centos.2.i686
    ntp-4.2.6p5-10.el6.centos.2.i686
    openssh-server-5.3p1-122.el6.i686
    openssh-clients-5.3p1-122.el6.i686
    sendmail-8.14.4-9.el6_8.1.i686
    net-snmp-libs-1:5.5-60.el6.i686

libcrypto.so.10(OPENSSL_1.0.1_EC) is needed by (installed)
    openssh-5.3p1-122.el6.i686
    openssh-server-5.3p1-122.el6.i686
    openssh-clients-5.3p1-122.el6.i686

libcrypto.so.10(libcrypto.so.10) is needed by (installed)
    libssh2-1.4.2-2.el6_7.1.i686
    bind-libs-32:9.8.2-0.62.rc1.el6.i686
    mysql-libs-5.1.73-8.el6_8.i686
    openssh-5.3p1-122.el6.i686
    ntpdate-4.2.6p5-10.el6.centos.2.i686
    cyrus-sasl-2.1.23-15.el6_6.2.i686
    python-libs-2.6.6-66.el6_8.i686
    ntp-4.2.6p5-10.el6.centos.2.i686
    openssh-server-5.3p1-122.el6.i686
    openssh-clients-5.3p1-122.el6.i686
    tcpdump-14:4.0.0-11.20090921gitdf3cb4.2.el6.i686
    wget-1.12-10.el6.i686
    sendmail-8.14.4-9.el6_8.1.i686
    net-snmp-libs-1:5.5-60.el6.i686
    trousers-0.3.13-2.el6.i686
    net-snmp-utils-1:5.5-60.el6.i686
    nmap-2:5.51-6.el6.i686
    cyrus-sasl-md5-2.1.23-15.el6_6.2.i686

libssl.so.10 is needed by (installed)
    libssh2-1.4.2-2.el6_7.1.i686
    mysql-libs-5.1.73-8.el6_8.i686
    python-libs-2.6.6-66.el6_8.i686
    wget-1.12-10.el6.i686
    sendmail-8.14.4-9.el6_8.1.i686
    trousers-0.3.13-2.el6.i686
    openssl-devel-1.0.1e-57.el6.i686
    nmap-2:5.51-6.el6.i686
    m2crypto-0.20.2-9.el6.i686
    fetchmail-6.3.17-1.el6.i686

libssl.so.10(libssl.so.10) is needed by (installed)
    mysql-libs-5.1.73-8.el6_8.i686
    python-libs-2.6.6-66.el6_8.i686
    wget-1.12-10.el6.i686
    sendmail-8.14.4-9.el6_8.1.i686
    nmap-2:5.51-6.el6.i686

openssl = 1.0.1e-57.el6 is needed by (installed)
    openssl-devel-1.0.1e-57.el6.i686
    openssl-perl-1.0.1e-57.el6.i686

○ Copyright(c) 528p.com All Rights Reserved.