○ openssl-1.0.1(rpm)

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

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

・fedoraのサポート期間が短いので、更新できなくなる時期がきます
・CentOS 6を使い続ける場合は、無理して入れ替えない方が良いです

・楕円曲線暗号モード(ECDH, ECDSA)が追加されています
・完璧なサポートかどうかはわかりません

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

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

○関連サイト

:openssl-1.0.1k-14.fc22.src.rpm  (http://dl.fedoraproject.org/)

○参照ファイル

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

○インストール環境

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

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



○openssl-1.0.1k

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

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

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

○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以降のデフォルト)
・patchファイルがfedoraのglibc用に最適化されているので修正します
・CentOS6では、crypto-policiesに対応していないので無効にします

# cd ~
[root@earth:~]
# mkdir src/openssl
# rpm -ivh --nosignature openssl-1.0.1k-14.fc22.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 .C67' openssl.spec
# mv openssl.spec ~/src/openssl
# cd ../RPMS/i686
[root@earth:~/rpmbuild/RPMS/i686]

・作成されたパッケージ
 openssl-1.0.1k-14.C67.i686.rpm
 oepnssl-libs-1.0.1k-14.C67.i686.rpm
 openssl-devel-1.0.1k-14.C67.i686.rpm
 openssl-perl-1.0.1k-14.C67.i686.rpm
 openssl-static-1.0.1k-14.C67.i686.rpm

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

・作成されたパッケージ
 oepnssl-1.0.1k-14.C67.src.rpm

# mv *.rpm ~/src/openssl

・インストール

# cd ~/src/openssl
[root@earth:~/src/openssl]
# rpm -Uvh openssl-devel* openssl-perl* \
openssl-libs* openssl-1.0.1k-14.C67.i686.rpm

・または

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

:~/rpmbuild/SPECS/openssl.spec

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

・省略

%package libs
Summary: A general purpose cryptography library with TLS implementation
Group: System Environment/Libraries
Requires: ca-certificates >= 2008-5
#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
Provides: openssl-fips = %{epoch}:%{version}-%{release}

・省略


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

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

[root@venus:~]
# ldconfig -p | grep -e libssl -e libcrypto
	libssl3.so (libc6) => /usr/lib/libssl3.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

・ファイルの確認

# cd /usr/lib
[root@venus:/usr/lib]
# ls -al | grep -e libssl -e libcrypto

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

--- openssl.cnf	2015-01-13 22:34:32.000000000 +0900
+++ openssl.cnf.rpmnew	2015-01-09 19:37:05.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
@@ -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?

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