【Linux】【CentOS6】Apache で「自己証明書(オレオレ証明書)」を作成して HTTPS でアクセスできるようにする手順

今回はあえて「CentOS7」ではなく「CentOS6」を使って「自己証明書(オレオレ証明書)」を作成し、HTTPS でアクセスできるようにサーバーを構築する手順を解説します。

※自己証明書(オレオレ証明書)とは、ベリサインやセコムなどのパブリック認証局(CA)が発行した証明書ではなく、自分で発行した証明書のことを言います。

通常ならより新しく、セキュリティアップデートを重ねている「CentOS7」を使うのが当然なのですが、アプリなど様々な環境に縛られて過去の OS を使わざるを得ない場合もあります。

そこは柔軟に対応しつつもセキュリティ等はしっかりと設定していきたいところです。

 

 

今回やりたいこと

今回は以下の環境を構築して実際に TLS 1.2 で暗号化されて通信されているか検証します。

  • CentOS 6 で Webサーバー構築
  • Webサーバーは「Apache」を利用する
  • Webアクセスは「https」経由(SSLを使用する)
  • 証明書は自分で作成する(オレオレ証明書)
  • SSLのバージョン(TLSのバージョン)は、TLS1.2
  • TLS 1.2 は OpenSSL で暗号化する
  • 実際に TLS 1.2 で通信されているか tcpdump で確認

 

【Linux】【CentOS6】Apache で「自己証明書(オレオレ証明書)」を作成して HTTPS でアクセスできるようにする手順

HTTPS 環境の設計

最初に設計をします。

バージョンは CentOS 6 の最新版(6.9)とします。

 

  • OS:CentOS6(6.9)
  • httpd(Apache):2.2
  • SSL証明書:自己証明書(オレオレ証明書)
  • アクセス:https://192.168.1.11

 

 

環境

すでに VMware vSphere ESXi Hypervisor 6.5 上に「CentOS 6.9」の仮想マシンがあるので、今回はこの仮想マシンを使って手順と動作を検証します。

VMware 関連の手順については以下の記事を参照してください。

 

VMware ESXi 上で仮想マシンを構築する手順

 

iptables の設定

iptables はデフォルトで「自動起動(on)」なので特に何も設定変更をしなければ起動しています。

今回は作業時に邪魔にならないように、HTTPS でアクセス確認ができるまで停止しておきます。

[root@cent06 ~]# chkconfig iptables off ← 一旦 iptables の自動起動を停止します。
[root@cent06 ~]# chkconfig ← 自動起動が「off」になっていることを確認します。
auditd       0:off 1:off 2:on 3:on 4:on 5:on 6:off
blk-availability  0:off 1:on 2:on 3:on 4:on 5:on 6:off
crond        0:off 1:off 2:on 3:on 4:on 5:on 6:off
htcacheclean    0:off 1:off 2:off 3:off 4:off 5:off 6:off
httpd        0:off 1:off 2:on 3:on 4:on 5:on 6:off
ip6tables      0:off 1:off 2:on 3:on 4:on 5:on 6:off
iptables      0:off 1:off 2:off 3:off 4:off 5:off 6:off
iscsi        0:off 1:off 2:off 3:on 4:on 5:on 6:off
iscsid       0:off 1:off 2:off 3:on 4:on 5:on 6:off
lvm2-monitor    0:off 1:on 2:on 3:on 4:on 5:on 6:off
mdmonitor      0:off 1:off 2:on 3:on 4:on 5:on 6:off
multipathd     0:off 1:off 2:off 3:off 4:off 5:off 6:off
netconsole     0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs        0:off 1:off 2:off 3:on 4:on 5:on 6:off
network       0:off 1:off 2:on 3:on 4:on 5:on 6:off
postfix       0:off 1:off 2:on 3:on 4:on 5:on 6:off
rdisc        0:off 1:off 2:off 3:off 4:off 5:off 6:off
restorecond     0:off 1:off 2:off 3:off 4:off 5:off 6:off
rsyslog       0:off 1:off 2:on 3:on 4:on 5:on 6:off
saslauthd       0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd        0:off 1:off 2:on 3:on 4:on 5:on 6:off
udev-post      0:off 1:on 2:on 3:on 4:on 5:on 6:off
[root@cent06 ~]# /etc/init.d/iptables stop ← iptables を停止します。
iptables: チェインをポリシー ACCEPT へ設定中filter   [ OK ]
iptables: ファイアウォールルールを消去中:       [ OK ]
iptables: モジュールを取り外し中:           [ OK ]
[root@cent06 conf.d]# 

 

 

selinux の設定

selinux もデフォルトで「enforcing」の設定なので変更しなければ有効になっています。

selinux も作業時に邪魔にならないように、「disable」にしておきます。

[root@cent06 conf.d]# vi /etc/selinux/config ← config ファイルを開いて編集します。

 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing – SELinux security policy is enforced.
# permissive – SELinux prints warnings instead of enforcing.
# disabled – No SELinux policy is loaded.
#SELINUX=enforcing ← デフォルトの設定をコメントアウトします。
SELINUX=disable ← 「SELINUX=disable」の設定を追加します。
# SELINUXTYPE= can take one of these two values:
# targeted – Targeted processes are protected,
# mls – Multi Level Security protection.
SELINUXTYPE=targeted

 

設定を反映させるために再起動します。

[root@cent06 .ssh]# reboot

 

 

 

HTTPS 化にするために導入するパッケージ一覧

以下のパッケージを導入します。

  • httpd
  • openssl
  • mod_ssl

※すでに導入している場合はアップデートをして最新の状態にします。(古い状態のままだと脆弱性が出る可能性があります)

httpd のバージョン確認とアップデート

現環境のチェックからします。

httpd のバージョンをチェックします。

# rpm -qa | grep httpd
httpd-tools-2.2.15-59.el6.centos.x86_64
httpd-2.2.15-59.el6.centos.x86_64 ← Apache 2.2.15-59 です。

 

パッケージをアップデートできるか確認します。

# yum update httpd
読み込んだプラグイン:fastestmirror
更新処理の設定をしています
Determining fastest mirrors
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
base | 3.7 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
updates/primary_db | 2.5 MB 00:00
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> Package httpd.x86_64 0:2.2.15-59.el6.centos will be 更新
—> Package httpd.x86_64 0:2.2.15-60.el6.centos.4 will be an update ← 2.2.15-60 にアップデート可能です。
–> 依存性の処理をしています: httpd-tools = 2.2.15-60.el6.centos.4 のパッケージ: httpd-2.2.15-60.el6.centos.4.x86_64
–> トランザクションの確認を実行しています。
—> Package httpd-tools.x86_64 0:2.2.15-59.el6.centos will be 更新
—> Package httpd-tools.x86_64 0:2.2.15-60.el6.centos.4 will be an update
–> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
========================================================================================================
更新:
httpd x86_64 2.2.15-60.el6.centos.4 updates 839 k
依存性関連での更新をします。:
httpd-tools x86_64 2.2.15-60.el6.centos.4 updates 80 k

トランザクションの要約
========================================================================================================
アップグレード 2 パッケージ

総ダウンロード容量: 919 k
これでいいですか? [y/N]y ← y を入力します。
パッケージをダウンロードしています:
(1/2): httpd-2.2.15-60.el6.centos.4.x86_64.rpm | 839 kB 00:00
(2/2): httpd-tools-2.2.15-60.el6.centos.4.x86_64.rpm | 80 kB 00:00
——————————————————————————————————–
合計 1.4 MB/s | 919 kB 00:00
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
更新 : httpd-tools-2.2.15-60.el6.centos.4.x86_64 1/4
更新 : httpd-2.2.15-60.el6.centos.4.x86_64 2/4
整理中 : httpd-2.2.15-59.el6.centos.x86_64 3/4
整理中 : httpd-tools-2.2.15-59.el6.centos.x86_64 4/4
Verifying : httpd-2.2.15-60.el6.centos.4.x86_64 1/4
Verifying : httpd-tools-2.2.15-60.el6.centos.4.x86_64 2/4
Verifying : httpd-tools-2.2.15-59.el6.centos.x86_64 3/4
Verifying : httpd-2.2.15-59.el6.centos.x86_64 4/4

更新:
httpd.x86_64 0:2.2.15-60.el6.centos.4

依存性を更新しました:
httpd-tools.x86_64 0:2.2.15-60.el6.centos.4

完了しました!

 

 

mod_ssl のインストールとバージョン確認

mod_ssl のインストール確認と、インストールされていたらバージョンアップ確認をします。

「mod_ssl」「OpenSSL」を利用することで「Apache」「SSL 機能」が追加されます。

[root@cent06 conf.d]# rpm -qa | grep mod_ssl
[root@cent06 conf.d]#  ← 何も表示されないので「mod_ssl」はインストールされていません。

[root@cent06 conf.d]# yum install mod_ssl ← 「mod_ssl」をインストールします。
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
base | 3.7 kB 00:00
extras | 3.4 kB 00:00
updates | 3.4 kB 00:00
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> Package mod_ssl.x86_64 1:2.2.15-60.el6.centos.4 will be インストール
–> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
========================================================================================================
インストールしています:
mod_ssl x86_64 1:2.2.15-60.el6.centos.4 updates 98 k

トランザクションの要約
========================================================================================================
インストール 1 パッケージ

総ダウンロード容量: 98 k
インストール済み容量: 187 k
これでいいですか? [y/N]y ← yを入力します。
パッケージをダウンロードしています:
mod_ssl-2.2.15-60.el6.centos.4.x86_64.rpm | 98 kB 00:00
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
インストールしています : 1:mod_ssl-2.2.15-60.el6.centos.4.x86_64 1/1
Verifying : 1:mod_ssl-2.2.15-60.el6.centos.4.x86_64 1/1

インストール:
mod_ssl.x86_64 1:2.2.15-60.el6.centos.4

完了しました!
[root@cent06 conf.d]#

 

mod_ssl とは一体何か?

簡潔にまとめると

  • Apache で SSL 暗号化通信をするために必要(他には OpenSSL も必要)
  • yum で簡単にインストールができる
  • SSL v3 と TLS 1.x をサポートしている(SSL v2 はサポートしていない)

です。

 

OpenSSLのバージョンとアップデート確認

今回は「自己証明書(オレオレ証明書)」を作成するため、OpenSSL も利用するので OpenSSL のバージョンとアップデート確認をします。

# rpm -qa | grep openssl ← すでにインストールされているか確認します。
openssl-1.0.1e-57.el6.x86_64

# openssl version ← openssl コマンドで OpenSSL のバージョンを確認します。
OpenSSL 1.0.1e-fips 11 Feb 2013

# yum update openssl ← OpenSSL がアップデート可能か確認します。
読み込んだプラグイン:fastestmirror
更新処理の設定をしています
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
更新と設定されたパッケージがありません。 ← 最新バージョンでした。

 

 

OpenSSLで何ができるのか?

ここで「OpenSSL」ついて解説します。

「OpenSSL」はフリーの暗号化モジュールです。

SSL/TLS での通信の暗号化を実装します。

※「実装する」とは「SSL/TLS」などの規格(概念)を実現化することを言います。この場合は「SLL/TLS」の規格を「OpenSSL」で実装することによりSSL での通信暗号化が実現します。

 

今回 OpenSSL を利用してプロトコル「TSL 1.2」での暗号化通信を検証しようとしていますが、プロトコル「TSL 1.2」と言っても1種類のアルゴリズムだけで実現しているわけではありません。

「コンピュータA」から「コンピュータB」に「データ」を送信するために、暗号化通信を達成するための多数のアルゴリズムが混在しています。

例えば現在 CentOS 6 で利用できる多数のアルゴリズムの組み合わせを確認するとこんな感じになっています。

[test@cent06 ~]$ openssl ciphers -v
ECDHE-RSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH    Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH    Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384    TLSv1.2 Kx=ECDH    Au=RSA Enc=AES(256) Mac=SHA384
ECDHE-ECDSA-AES256-SHA384   TLSv1.2 Kx=ECDH    Au=ECDSA Enc=AES(256) Mac=SHA384
ECDHE-RSA-AES256-SHA      SSLv3  Kx=ECDH    Au=RSA Enc=AES(256) Mac=SHA1
ECDHE-ECDSA-AES256-SHA        SSLv3  Kx=ECDH    Au=ECDSA Enc=AES(256) Mac=SHA1
DHE-DSS-AES256-GCM-SHA384   TLSv1.2 Kx=DH     Au=DSS Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-GCM-SHA384   TLSv1.2 Kx=DH     Au=RSA Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256     TLSv1.2 Kx=DH     Au=RSA Enc=AES(256) Mac=SHA256
DHE-DSS-AES256-SHA256     TLSv1.2 Kx=DH     Au=DSS Enc=AES(256) Mac=SHA256
DHE-RSA-AES256-SHA       SSLv3  Kx=DH     Au=RSA Enc=AES(256) Mac=SHA1
DHE-DSS-AES256-SHA       SSLv3  Kx=DH     Au=DSS Enc=AES(256) Mac=SHA1
DHE-RSA-CAMELLIA256-SHA     SSLv3  Kx=DH     Au=RSA Enc=Camellia(256) Mac=SHA1
DHE-DSS-CAMELLIA256-SHA     SSLv3  Kx=DH     Au=DSS Enc=Camellia(256) Mac=SHA1
ECDH-RSA-AES256-GCM-SHA384   TLSv1.2 Kx=ECDH/RSA  Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(256) Mac=AEAD
ECDH-RSA-AES256-SHA384     TLSv1.2 Kx=ECDH/RSA  Au=ECDH Enc=AES(256) Mac=SHA384
ECDH-ECDSA-AES256-SHA384    TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA384
ECDH-RSA-AES256-SHA      SSLv3  Kx=ECDH/RSA  Au=ECDH Enc=AES(256) Mac=SHA1
ECDH-ECDSA-AES256-SHA     SSLv3  Kx=ECDH/ECDSA Au=ECDH Enc=AES(256) Mac=SHA1
AES256-GCM-SHA384       TLSv1.2 Kx=RSA     Au=RSA Enc=AESGCM(256) Mac=AEAD
AES256-SHA256         TLSv1.2 Kx=RSA     Au=RSA Enc=AES(256) Mac=SHA256
AES256-SHA           SSLv3  Kx=RSA     Au=RSA Enc=AES(256) Mac=SHA1
CAMELLIA256-SHA        SSLv3  Kx=RSA     Au=RSA Enc=Camellia(256) Mac=SHA1
PSK-AES256-CBC-SHA       SSLv3  Kx=PSK     Au=PSK Enc=AES(256) Mac=SHA1
ECDHE-RSA-AES128-GCM-SHA256   TLSv1.2 Kx=ECDH    Au=RSA Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH    Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-SHA256    TLSv1.2 Kx=ECDH    Au=RSA Enc=AES(128) Mac=SHA256
ECDHE-ECDSA-AES128-SHA256   TLSv1.2 Kx=ECDH    Au=ECDSA Enc=AES(128) Mac=SHA256
ECDHE-RSA-AES128-SHA      SSLv3  Kx=ECDH    Au=RSA Enc=AES(128) Mac=SHA1
ECDHE-ECDSA-AES128-SHA     SSLv3  Kx=ECDH    Au=ECDSA Enc=AES(128) Mac=SHA1
DHE-DSS-AES128-GCM-SHA256   TLSv1.2 Kx=DH     Au=DSS Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-GCM-SHA256   TLSv1.2 Kx=DH     Au=RSA Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-SHA256     TLSv1.2 Kx=DH     Au=RSA Enc=AES(128) Mac=SHA256
DHE-DSS-AES128-SHA256     TLSv1.2 Kx=DH     Au=DSS Enc=AES(128) Mac=SHA256
DHE-RSA-AES128-SHA       SSLv3  Kx=DH     Au=RSA Enc=AES(128) Mac=SHA1
DHE-DSS-AES128-SHA       SSLv3  Kx=DH     Au=DSS Enc=AES(128) Mac=SHA1
DHE-RSA-SEED-SHA        SSLv3  Kx=DH     Au=RSA Enc=SEED(128) Mac=SHA1
DHE-DSS-SEED-SHA        SSLv3  Kx=DH     Au=DSS Enc=SEED(128) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA    SSLv3  Kx=DH     Au=RSA Enc=Camellia(128) Mac=SHA1
DHE-DSS-CAMELLIA128-SHA    SSLv3  Kx=DH     Au=DSS Enc=Camellia(128) Mac=SHA1
ECDH-RSA-AES128-GCM-SHA256   TLSv1.2 Kx=ECDH/RSA  Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-ECDSA-AES128-GCM-SHA256  TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AESGCM(128) Mac=AEAD
ECDH-RSA-AES128-SHA256     TLSv1.2 Kx=ECDH/RSA  Au=ECDH Enc=AES(128) Mac=SHA256
ECDH-ECDSA-AES128-SHA256    TLSv1.2 Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA256
ECDH-RSA-AES128-SHA      SSLv3  Kx=ECDH/RSA  Au=ECDH Enc=AES(128) Mac=SHA1
ECDH-ECDSA-AES128-SHA     SSLv3  Kx=ECDH/ECDSA Au=ECDH Enc=AES(128) Mac=SHA1
AES128-GCM-SHA256       TLSv1.2 Kx=RSA     Au=RSA Enc=AESGCM(128) Mac=AEAD
AES128-SHA256         TLSv1.2 Kx=RSA     Au=RSA Enc=AES(128) Mac=SHA256
AES128-SHA           SSLv3  Kx=RSA     Au=RSA Enc=AES(128) Mac=SHA1
SEED-SHA            SSLv3  Kx=RSA     Au=RSA Enc=SEED(128) Mac=SHA1
CAMELLIA128-SHA        SSLv3  Kx=RSA     Au=RSA Enc=Camellia(128) Mac=SHA1
PSK-AES128-CBC-SHA       SSLv3  Kx=PSK     Au=PSK Enc=AES(128) Mac=SHA1
ECDHE-RSA-DES-CBC3-SHA     SSLv3  Kx=ECDH    Au=RSA Enc=3DES(168) Mac=SHA1
ECDHE-ECDSA-DES-CBC3-SHA    SSLv3  Kx=ECDH    Au=ECDSA Enc=3DES(168) Mac=SHA1
EDH-RSA-DES-CBC3-SHA      SSLv3  Kx=DH      Au=RSA Enc=3DES(168) Mac=SHA1
EDH-DSS-DES-CBC3-SHA      SSLv3  Kx=DH     Au=DSS Enc=3DES(168) Mac=SHA1
ECDH-RSA-DES-CBC3-SHA     SSLv3  Kx=ECDH/RSA  Au=ECDH Enc=3DES(168) Mac=SHA1
ECDH-ECDSA-DES-CBC3-SHA    SSLv3  Kx=ECDH/ECDSA Au=ECDH Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA          SSLv3  Kx=RSA     Au=RSA Enc=3DES(168) Mac=SHA1
IDEA-CBC-SHA          SSLv3  Kx=RSA     Au=RSA Enc=IDEA(128) Mac=SHA1
PSK-3DES-EDE-CBC-SHA      SSLv3  Kx=PSK     Au=PSK Enc=3DES(168) Mac=SHA1
KRB5-IDEA-CBC-SHA       SSLv3  Kx=KRB5    Au=KRB5 Enc=IDEA(128) Mac=SHA1
KRB5-DES-CBC3-SHA       SSLv3  Kx=KRB5    Au=KRB5 Enc=3DES(168) Mac=SHA1
KRB5-IDEA-CBC-MD5       SSLv3  Kx=KRB5    Au=KRB5 Enc=IDEA(128) Mac=MD5
KRB5-DES-CBC3-MD5       SSLv3  Kx=KRB5    Au=KRB5 Enc=3DES(168) Mac=MD5
ECDHE-RSA-RC4-SHA       SSLv3  Kx=ECDH    Au=RSA Enc=RC4(128) Mac=SHA1
ECDHE-ECDSA-RC4-SHA      SSLv3  Kx=ECDH    Au=ECDSA Enc=RC4(128) Mac=SHA1
ECDH-RSA-RC4-SHA        SSLv3  Kx=ECDH/RSA  Au=ECDH Enc=RC4(128) Mac=SHA1
ECDH-ECDSA-RC4-SHA       SSLv3  Kx=ECDH/ECDSA Au=ECDH Enc=RC4(128) Mac=SHA1
RC4-SHA            SSLv3  Kx=RSA     Au=RSA Enc=RC4(128) Mac=SHA1
RC4-MD5            SSLv3  Kx=RSA     Au=RSA Enc=RC4(128) Mac=MD5
PSK-RC4-SHA          SSLv3  Kx=PSK     Au=PSK Enc=RC4(128) Mac=SHA1
KRB5-RC4-SHA          SSLv3  Kx=KRB5    Au=KRB5 Enc=RC4(128) Mac=SHA1
KRB5-RC4-MD5          SSLv3  Kx=KRB5    Au=KRB5 Enc=RC4(128) Mac=MD5

 

気が遠くなるほどの組み合わせですが、実際に利用するのは(利用できるのは)標準的なごく一部のみですのですべてを覚える必要はありません。

 

OpenSSLがサポートしているプロトコル

OpenSSLは以下のプロトコルバージョンをサポートしています。

  • SSL 2.0(1994年リリース)
  • SSL 3.0(1995年リリース)
  • TLS 1.0(1999年リリース)
  • TLS 1.1(2006年リリース)
  • TLS 1.2(2008年リリース)

 

※TLS 1.3 はドラフト策定中です。(2017年現在)TLS 1.3 はかなり大幅な変更になるので「TLS 1.3」ではなく「TSL 2.0」にしたらどうかという案もあるようです。

 

 

OpenSSLがサポートしている通信の暗号方式

「コンピュータA」と「コンピュータB」が通信する場合、OpenSSL は以下の暗号方式で「データ」を暗号することができます。

こんがらがってしまうかもしれませんが、以下は「データ」を暗号化する方式です。

 

  • Blowfish ← ブロック暗号。ライセンスフリー。
  • Camellia ← 2000年に NTT と三菱電機が開発した。ブロック暗号。カメリアは植物の名前から取った。
  • DES(Data Encryption Standard) ← アメリカの旧国家暗号規格。現在は3DES(トリプルDES)が利用されている。
  • 3DES ← トリプル DES。
  • RC2(Rivest Cipher 2) ← 1987年にロナルド・リベストが開発。ブロック暗号。
  • RC4(Rivest Cipher 4) ← 1987年にロナルド・リベストが開発。ストリーム暗号。中間者攻撃で脆弱性あり。Microsoft社は非推奨。
  • RC5(Rivest Cipher 5) ← 1994年にロナルド・リベストが開発。
  • SEED ← ブロック暗号。Feistel構造を利用している。
  • IDEA(International Data Encryption Algorithm) ← ブロック暗号。
  • AES(Advanced Encryption Standart) ← DESの次のアメリカの国家暗号規格として公募され Rijndael (ラインダール)が採用された。

OpenSSLがサポートしているハッシュ方式(ハッシュ関数)

これらのハッシュ方式(ハッシュ関数)は「MAC」の部分で利用されます。

  • MD5
  • MD2
  • SHA-1
  • SHA-2
  • MDC-2

 

OpenSSLがサポートしている公開鍵暗号方式(暗号化アルゴリズム)

  • RSA暗号 ← もっとも一般的。「Ron Rivest」「Adi Shamir」「Leonard Adleman」によって開発。RSA秘密鍵の拡張子は「.key」や「.pem」。「素因数分解」。
  • DSA ← 安全性が証明されていないためあまり利用されていない。
  • Diffie-Hellman鍵共有(DH鍵交換、Diffie-Hellman key exchange / Digital Signature Standard、電子署名標準) 

 

 

暗号化方式とハッシュ方式は何が違うのか?

ハッシュ化は暗号化とは違います。

暗号化はデータを隠します。

暗号化の場合は、復号化するための「鍵(キー)(例えば文字を「あいうえお」順に1つ進めてくださいなど)」があれば復号化してオリジナルのデータを確認できます。

ハッシュ化は「基本情報処理」を勉強した方なら聞いたことがあるかもしれません。

ハッシュは「不可逆性(ふかぎゃくせい)」といって、「test」というデータから「$6$mRCuydnLnCIcQhec$c4eLUP0N.Jcm08qOdwWHt0BIkEzzAoMCL8Sd3INmpWOKkn66Vl11dNQu3oP8Ub81JPJHisExhIYk34EDmu/d6/」というハッシュ値は作れますが、「$6$mRCuydnLnCIcQhec$c4eLUP0N.Jcm08qOdwWHt0BIkEzzAoMCL8Sd3INmpWOKkn66Vl11dNQu3oP8Ub81JPJHisExhIYk34EDmu/d6/」から「test」というデータは作れない(もしくはほとんど不可能)ことを言います。

 

たとえば、CentOS 6 上で、grub-crypt コマンドで「test」というパスワードをハッシュ化してみます。

[test@cent06 ~]$ grub-crypt –sha-512
Password:   ← ここで「test」と入力しています。
Retype password:   ← ここで「test」と入力しています。
$6$mRCuydnLnCIcQhec$c4eLUP0N.Jcm08qOdwWHt0BIkEzzAoMCL8Sd3INmpWOKkn66Vl11dNQu3oP8Ub81JPJHisExhIYk34EDmu/d6/ ← 「test」がハッシュ化されました。
[test@cent06 ~]$

 

ということは、「test」というデータは毎回「$6$mRCuydnLnCIcQhec$c4eLUP0N.Jcm08qOdwWHt0BIkEzzAoMCL8Sd3INmpWOKkn66Vl11dNQu3oP8Ub81JPJHisExhIYk34EDmu/d6/」になるのではないでしょうか?

 

では、もう一度「test」のハッシュ値を作ってみます。

[test@cent06 ~]$ grub-crypt –sha-512
Password:   ← ここで「test」と入力しています。
Retype password:   ← ここで「test」と入力しています。
$6$9ZJTQzaOxPdj./HB$LrOviT7xdihtL8cn69HfhGRkbwthJZND60kUO1qdC1Cdp5z1pfY7aoCAZi2E53EEDooUqgMW0f9EMBp7AVbK20 ← ことなるハッシュ値が作成されました。
[test@cent06 ~]$

 

同じ「test」なのにハッシュ値は異なる、しかしこのハッシュ値は「test」というデータとして利用できます。

一見すると「ハッシュ化も単なる暗号化じゃないの?」と思ってしまいますが、このハッシュ値の何がいいのかというと、データが改ざんされたときにすぐ気が付くということです。

 

例えば「test」というデータを送りたいとして、送信する途中で改ざんできる悪意を持ったクラッカーがいるとします。

 

途中で「test」を「password」に変更した場合 → 受信者は気が付きません。「password」だと勘違いします。

しかし「$6$9ZJTQzaOxPdj./HB$LrOviT7xdihtL8cn69HfhGRkbwthJZND60kUO1qdC1Cdp5z1pfY7aoCAZi2E53EEDooUqgMW0f9EMBp7AVbK20」を送って、途中でこの中も1字を改ざんした場合、復号化する時にエラーになり、改ざんされたことが分かります。

たとえハッシュデータが盗まれたとして「改ざんができない」もしくは「改ざんしたらすぐにバレる」のです。

 

「じゃあ、ハッシュ化された $6$9ZJTQzaOx~ のデータを復号して改ざんすればいいじゃないか」と思うかもしれませんが、そもそも「$6$9ZJTQzaOxPdj./HB$Lr~」のデータを「test」だと解読するために膨大な時間が掛かります。

このハッシュ化の機能は、後程出てきますが MAC の部分で利用します。

 

 

TLS1.2 と TLS1.3 で何が違うのか?

まだ実際に使ったことはありませんが、通信の「スピード」「セキュリティ」が向上したと言われています。

今後レンタルサーバーでも「TLS 1.3」がスタンダードになるでしょう。

ユーザーにとっても「スピード」と「セキュリティ」が向上するのは大歓迎です。

  • 古いアルゴリズムはすべて廃止・却下、AEAD(Authenticated Encryption with Associated Data)が残る
  • ハンドシェイクの往復回数の削減

 

 

証明書を作成する流れ

これから CentOS 6 上で環境を構築しますが以下の手順で「鍵」「CSR」「証明書(オレオレ証明書)」を作成します。

  1. 秘密鍵(server.key)の作成
  2. CSR(server.csr)の作成
  3. 自己証明書(オレオレ証明書)(server.crt)の作成

 

※便宜上分かりやすくするために「server.key」「server.csr」「server.crt」で作成していますが、ファイル名は何でも構いません。

自身の環境で分かりやすくするために「host名.key」のような形式でも問題ありません。

 

※気を付ける部分としては、秘密鍵は重要なファイルなので(外部に漏れたらクラッキングされる危険性があるので)、漏れないようにrootしかアクセスできないディレクトリに入れるなどのセキュリティ対策をしましょう。

 

【Linux】【CentOS6】Apache で「自己証明書(オレオレ証明書)」を作成して HTTPS でアクセスできるようにする手順

上図のように「SSL」を理解するためのキーワードが3つあります。

暗号化・認証機関・電子署名です。

単純に言えば

  • 暗号化 → server.key(秘密鍵)
  • 認証機関 → server.csr(CSR)
  • 電子署名 → server.crt(サーバー証明書)

と関連付けてもいいかもしれません。

 

 

公開鍵は不要

公開鍵暗号方式について勉強した方なら「公開鍵の作成はしなくてもいいの?」と思うかもしれませんが、SSL/TLS プロトコルを利用して HTTPS(Hypertext Transfer Protocol Secure)で通信をする場合は「公開鍵」は不要です。

 

ちなみに、Teraterm 等で SSH プロトコルで鍵認証で(パスワード認証ではなく)ログインをしたい場合は「秘密鍵」と「公開鍵」が必要になります。

「秘密鍵」「公開鍵」「ssh-keygen -t rsa」コマンドで作成できます。

[root@cent06 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory ‘/root/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
d4:1c:66:9b:4c:0c:65:19:4e:e5:f9:4d:a8:56:89:00 root@cent06.localdomain
The key’s randomart image is:
+–[ RSA 2048]—-+
|    E=@+.        |
|         @o* o o |
|        . B + + .|
|           . + o |
|          S o . .|
|               . |
|                 |
|                 |
|                 |
+—————–+

[root@cent06 ~]# cd .ssh/
[root@cent06 .ssh]# ls -l
合計 8
-rw——-. 1 root root 1743 7月 16 11:58 2017 id_rsa
-rw-r–r–. 1 root root  405 7月 16 11:58 2017 id_rsa.pub
[root@cent06 .ssh]#

 

鍵の設計

これから証明書を作成しますが、最初にどの鍵をどのアルゴリズムで作成するのか設計をします。

  • 秘密鍵暗号化アルゴリズム:RSA
  • 共通鍵暗号化アルゴリズム:トリプルDES

 

 

 

秘密鍵の作成

openssl コマンドで秘密鍵を作成します。

 

コマンドのオプションの解説

  • genrsa ← RSA秘密鍵を生成します。
  • -des3 ← 秘密鍵の暗号化アルゴリズムに「トリプル DES」を指定します。秘密鍵の暗号化は、共通鍵暗号化アルゴリズムを利用します。
  • -out ← アウトプットするファイル名を指定します。
  • 2048 ← 鍵の長さを 2048bit にします。

 

[root@cent06 ~]# cd /etc/httpd/conf

[root@cent06 conf]# openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
…………………………….+++
………………………………………………………………+++
e is 65537 (0x10001)
Enter pass phrase for server.key: ← パスフレーズを入力します。
Verifying – Enter pass phrase for server.key: ← パスフレーズを入力します。
[root@cent06 conf]# ls -l ← 秘密鍵を確認します。
合計 60
-rw-r–r–. 1 root root 34452 7月 16 00:56 2017 httpd.conf
-rw-r–r–. 1 root root 13139 7月 12 22:33 2017 magic
-rw-r–r–. 1 root root 1743 7月 16 09:12 2017 server.key
[root@cent06 conf]# cat server.key ← 秘密鍵を確認します。

—–BEGIN RSA PRIVATE KEY—–
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,5616FE1C975259E8

 

SpPBPehLo7cxx4jrLWXR7eGLikSY535MpPqcEa0WVOgIBUzj/erPiYFOOsBCQFhS
4gLRyUZ5kOFo9OjMQqKuUkusm0fydAWaWx4Inn+D/9w3lLLTXqJ5gztEi9kpxT9j
u9vLMezNhmJvaQvol2if077YoevksyW/KDu+G8VxZjhNg03Bk7sucNRA65paWlbs
7UozyEi2uyykiocL4NRLqtm+j8X9CgXpeo0XMEtfyGNVWlTxR3IaPiOzx+FyTWpE
3eeIFA7c2T42rN2J1plS2oYX2CE5Ds13/BB2/Xrd0krqwq4DXGrdEwuKxVFgg0or
h6YiacXJiMscKWc2BxByTa8ql/0uPBoJokrdUesG76divbKusxsDX/hwyTBSrOSS
Ppu31GVGfHsRmasgmnPKhll7YsgkZvVpcKZUW2piQYnK9cOiSm5fb0O0IwF5jBWR
vj/Vf+5SvWlNiaXGzHwU8YV30TYqS2sckLudagfLv9tZPEdr7t4DazYJMEYjJJXx
bR3eI1UyT8+S2sokNwvBvyn6VQLkcs/PDVMkAqje8H6c3MhI6+TxsdWJR52tOy1g
bMEPU218badIVy15apkDVH8t603XO4yc8/Sk3IUwTNcZjsm9rfG9cpIARuGLyJh1
TG6zJ7eRDMmp0mF64el4brE0de/y2NIDISz8j0p6khCHsdlndYsnVUWfvIbMKBmu
r+w78YHeccKOsDeTq6SYWehj4BkZdARcFYNEPyKMqNRLSaYoH2zXI0NxUI76S/R/
axZ6L2/CsppEE0JrSOL2LjMgEbKNKF+15zPPdHiPcm17MY9BSX1Tm3+NobLNoFy5
VXIfIJGNyHPUgJJBlv6pCOSs/3wa2hK7LxdS0iH5njIu4NmizCjQOml0i7ysrJcl
on+BkIIYLvfERxv0cac5K1uyRJ2/6Z0ewhVxjXm865/wbVFCMfjp9dpWuWdQYcX/
SNeJ7X0m38ZP9EhleRCBbFruxdwS9T3kMo5GWr38Tp562y2Qi0wcCwA+hVmbtboh
xyK+IfnwsIBA6j2tP9/DrXJOu60P2S6xChfsEYMFRNxRJYVVQ1ZxL5eQpgYFn90G
YMGUjeaZvNkWENbk6DMDPHVmHrtFW1KNJDM+CyUSmu5bSosjczShZYOAZc1Uer9l
yBU2fIXsbaGciEaIUHhSzl/qyp8wYWNAbDNM1HDt0/jscE/w0ChuBuX3qrAZwd1e
P087DOaoZ/02vIr7aW4O5OxugibTHDUdzg7DEaiPmd89pjD1jVlmijQrnnT3Yi4H
dSDOpcRdZYxT3bCaCsJBf2FFCOnToioRsLXGLw7YJAOqKE1pb0grsPKjafxrxwBu
gSRyZYDfVv+1bIATDqME6SkUIIsMCUQI600OaKMri/Tu5OIsjckiU5LkZPScU9x1
eYJM7jqdULyNmOnCUMg68xuPDXJluamp3z4JCbfd95ub2hOOmbcaBGzcW6vbrtvO
j7zrf0Q17Sjn5jLWlXoPV+GJ5laHqQSrY+z6khPnWJsFzu2l4Mi1sTbY30s8z/Sq
3KZhsw7CDPERWZqOtAx2zEtUv2wSGwOjQp0p11HZrHYcemcXXFPKWQ==
—–END RSA PRIVATE KEY—–

[root@cent06 ssl]#

 

鍵の内容を確認します。

[root@cent06 conf]# openssl rsa -text < server.key
Enter pass phrase: ← パスフレーズを入力します。
Private-Key: (2048 bit)
modulus:
00:c6:10:4a:38:a8:e8:a0:72:fa:07:5d:93:23:56:
34:4e:bf:fd:e2:6f:cb:03:d7:1f:c7:58:d7:fe:fb:
cc:bc:d9:05:c6:c7:46:55:8c:5a:c0:b5:18:09:f1:
9b:65:5c:bd:59:83:58:49:1f:0a:a6:5a:dd:93:0e:
5e:5c:91:e9:b5:01:d3:ed:75:4a:d7:5b:92:0c:3b:
c3:c5:f6:78:98:0c:43:ab:26:6a:0d:79:1d:11:54:
48:3c:45:09:26:f5:32:6b:9b:85:42:7b:3d:58:06:
dc:13:c6:ce:d2:8b:73:50:52:0e:1d:12:75:4d:0a:
2b:fd:26:33:c2:b4:65:b0:11:57:98:b9:31:bc:63:
cd:fe:aa:61:5d:45:6a:9d:12:0c:5b:21:df:07:90:
1d:dd:60:2e:fa:56:93:08:a7:36:0d:e0:d5:0b:cf:
85:96:7d:21:9e:80:c6:15:15:87:84:bf:c6:ba:0c:
3a:36:92:f7:e1:96:99:95:ee:9a:c6:74:6a:9d:d1:
f6:05:a5:de:c5:ff:00:8f:3c:75:2f:ff:a8:b7:d7:
ae:a5:db:c8:49:1e:b2:d6:1e:f6:eb:d4:80:25:ce:
91:d8:1f:9f:61:c0:b9:75:6d:15:80:8c:4c:2a:48:
ef:b3:91:2b:53:a6:83:4a:1e:90:7d:05:66:ab:22:
39:d7
publicExponent: 65537 (0x10001)
privateExponent:
1c:a7:34:a5:97:c1:f7:9c:4a:91:90:36:fe:10:b5:
86:82:fd:ee:a9:2f:9c:81:9d:a6:50:33:07:3f:54:
32:29:cf:4d:1f:7d:0c:59:3e:b3:cc:3f:0b:09:39:
ea:e3:0c:bd:8b:63:d5:48:39:59:31:a2:06:69:38:
bb:79:9c:6e:c4:31:ed:93:5f:5d:62:70:f1:76:1f:
ef:5e:a5:b9:91:64:a4:b8:ec:f4:c0:05:b5:81:14:
e6:2b:32:94:c1:3a:27:19:1b:a1:2f:85:03:5c:12:
b0:85:bd:5b:f6:32:9b:77:13:75:9f:3a:fb:07:32:
af:ef:bb:e3:3a:07:cf:fd:a1:04:29:a2:1d:6d:22:
75:5d:f7:b1:97:6c:4a:aa:e9:fb:4c:c0:0c:df:13:
d9:c7:75:a7:5a:ea:77:81:60:26:98:f0:22:db:54:
c7:c4:7d:ea:5d:97:24:4f:d4:b7:51:67:f0:81:8d:
56:2c:97:3f:c4:21:39:75:de:e7:38:8b:0c:05:99:
c6:be:ba:67:11:85:04:db:6f:0d:17:b8:a8:c8:75:
17:b0:ff:87:d5:1d:46:10:e3:51:98:82:85:3f:1b:
88:f0:93:4d:b3:d5:d0:37:08:71:a5:2b:e2:82:65:
3a:b7:f9:0d:e9:0e:6e:7c:bc:e8:28:9a:a0:8b:6c:
01
prime1:
00:ee:ba:9b:01:97:44:9c:61:60:d0:2a:9e:f0:b0:
6e:ea:af:f7:96:4f:df:f2:19:ab:d8:ab:4c:9f:dc:
14:c6:1a:01:6a:d2:9f:2d:b7:3e:3b:b7:7f:a0:0b:
ab:19:27:4e:26:00:4c:f5:95:b1:96:89:88:4e:4f:
26:9d:8d:91:a4:43:ee:ce:ea:ee:ba:e5:97:6e:17:
c0:72:66:61:30:08:9b:14:26:15:e2:c3:8f:f1:b5:
fa:80:fb:fb:a1:e4:5d:32:cf:a2:d8:29:ec:9e:28:
ef:1b:65:50:79:fa:80:a4:ea:d8:ed:d1:ed:39:1f:
6d:ee:19:2e:66:f6:28:92:01
prime2:
00:d4:64:8a:4b:47:9f:74:14:07:24:64:ec:77:8b:
b9:48:38:86:4b:97:03:57:ba:00:a8:88:6d:ab:b7:
94:4f:48:1d:56:15:fe:51:cb:48:ca:03:88:01:b8:
fa:b9:c6:9c:64:1c:20:7a:2d:f6:ea:79:6b:57:4d:
9c:27:f6:81:21:70:41:03:d4:cb:93:81:78:48:9b:
99:9b:5b:ac:f3:6b:4c:52:58:f1:4f:0c:32:30:da:
34:5a:a7:07:71:41:f7:46:e4:84:c3:97:a7:14:d8:
17:e4:dd:70:1b:bf:3b:ad:10:e3:8e:7c:ab:ea:30:
6f:cb:1c:61:62:fc:a9:9b:d7
exponent1:
1f:2f:4f:2a:51:09:4c:68:48:0e:49:53:03:db:f8:
51:3d:f5:58:b4:4c:6b:c2:c0:b9:07:ff:75:6e:79:
64:3b:67:6d:fd:df:7f:48:4d:9f:dd:63:95:93:90:
a1:33:8a:38:da:97:33:09:7f:ee:4b:3e:fc:03:c8:
e6:91:e4:b1:91:92:33:83:6a:f6:0d:21:cf:e6:d8:
63:d9:4d:de:c9:71:00:9b:cd:06:17:47:c9:6a:5d:
33:d6:36:d3:ba:12:16:9e:1b:06:a3:cb:5e:09:b8:
da:5a:4c:bd:f2:64:35:a6:db:f9:8d:0f:b1:03:93:
07:a4:50:74:70:b9:72:01
exponent2:
00:ce:55:ee:54:3b:fc:98:94:6c:6b:da:f0:2f:23:
3a:99:02:f0:d4:b6:9c:b4:b9:2a:b2:8f:f7:9b:7e:
f9:42:1c:59:03:ac:d2:29:3c:48:36:99:3f:a4:0c:
c4:e7:7e:1f:a8:d1:fa:6b:38:04:4c:be:30:9d:db:
f3:fc:8e:e9:dc:46:65:a3:07:33:ce:d5:54:b9:95:
10:a1:71:6a:90:00:89:60:e6:af:67:8f:fd:a2:a0:
19:84:88:08:1e:eb:6b:03:20:36:2a:9e:45:df:66:
1f:b0:63:bf:e9:f4:da:50:c3:bb:8e:4d:67:e6:57:
b0:03:ae:4a:9e:13:bf:e2:79
coefficient:
32:34:ab:b4:a5:d1:c5:83:31:56:51:6d:ec:43:d3:
3c:88:d6:de:91:42:93:8a:ff:e2:48:f5:ab:d9:54:
50:77:19:c7:9b:5e:e0:e5:e1:c2:c4:7f:df:70:08:
e9:41:94:df:7a:a9:e4:05:a1:e1:32:be:a4:29:8c:
34:0f:5a:b1:67:04:fa:01:8e:28:ca:8c:67:bc:be:
c4:d6:ae:c5:e8:a9:13:3a:d9:fa:89:7a:d7:ca:7e:
44:12:87:67:b3:d6:f0:8d:db:5a:de:85:24:bc:18:
26:f6:5e:9e:8b:06:a7:7f:14:ee:2d:8c:f0:86:ad:
ee:a0:20:f9:7f:a1:85:6d
writing RSA key
—–BEGIN RSA PRIVATE KEY—–
MIIEowIBAAKCAQEAxhBKOKjooHL6B12TI1Y0Tr/94m/LA9cfx1jX/vvMvNkFxsdG
VYxawLUYCfGbZVy9WYNYSR8Kplrdkw5eXJHptQHT7XVK11uSDDvDxfZ4mAxDqyZq
DXkdEVRIPEUJJvUya5uFQns9WAbcE8bO0otzUFIOHRJ1TQor/SYzwrRlsBFXmLkx
vGPN/qphXUVqnRIMWyHfB5Ad3WAu+laTCKc2DeDVC8+Fln0hnoDGFRWHhL/Gugw6
NpL34ZaZle6axnRqndH2BaXexf8Ajzx1L/+ot9eupdvISR6y1h7269SAJc6R2B+f
YcC5dW0VgIxMKkjvs5ErU6aDSh6QfQVmqyI51wIDAQABAoIBABynNKWXwfecSpGQ
Nv4QtYaC/e6pL5yBnaZQMwc/VDIpz00ffQxZPrPMPwsJOerjDL2LY9VIOVkxogZp
OLt5nG7EMe2TX11icPF2H+9epbmRZKS47PTABbWBFOYrMpTBOicZG6EvhQNcErCF
vVv2Mpt3E3WfOvsHMq/vu+M6B8/9oQQpoh1tInVd97GXbEqq6ftMwAzfE9nHdada
6neBYCaY8CLbVMfEfepdlyRP1LdRZ/CBjVYslz/EITl13uc4iwwFmca+umcRhQTb
bw0XuKjIdRew/4fVHUYQ41GYgoU/G4jwk02z1dA3CHGlK+KCZTq3+Q3pDm58vOgo
mqCLbAECgYEA7rqbAZdEnGFg0Cqe8LBu6q/3lk/f8hmr2KtMn9wUxhoBatKfLbc+
O7d/oAurGSdOJgBM9ZWxlomITk8mnY2RpEPuzuruuuWXbhfAcmZhMAibFCYV4sOP
8bX6gPv7oeRdMs+i2CnsnijvG2VQefqApOrY7dHtOR9t7hkuZvYokgECgYEA1GSK
S0efdBQHJGTsd4u5SDiGS5cDV7oAqIhtq7eUT0gdVhX+UctIygOIAbj6ucacZBwg
ei326nlrV02cJ/aBIXBBA9TLk4F4SJuZm1us82tMUljxTwwyMNo0WqcHcUH3RuSE
w5enFNgX5N1wG787rRDjjnyr6jBvyxxhYvypm9cCgYAfL08qUQlMaEgOSVMD2/hR
PfVYtExrwsC5B/91bnlkO2dt/d9/SE2f3WOVk5ChM4o42pczCX/uSz78A8jmkeSx
kZIzg2r2DSHP5thj2U3eyXEAm80GF0fJal0z1jbTuhIWnhsGo8teCbjaWky98mQ1
ptv5jQ+xA5MHpFB0cLlyAQKBgQDOVe5UO/yYlGxr2vAvIzqZAvDUtpy0uSqyj/eb
fvlCHFkDrNIpPEg2mT+kDMTnfh+o0fprOARMvjCd2/P8juncRmWjBzPO1VS5lRCh
cWqQAIlg5q9nj/2ioBmEiAge62sDIDYqnkXfZh+wY7/p9NpQw7uOTWfmV7ADrkqe
E7/ieQKBgDI0q7Sl0cWDMVZRbexD0zyI1t6RQpOK/+JI9avZVFB3GcebXuDl4cLE
f99wCOlBlN96qeQFoeEyvqQpjDQPWrFnBPoBjijKjGe8vsTWrsXoqRM62fqJetfK
fkQSh2ez1vCN21rehSS8GCb2Xp6LBqd/FO4tjPCGre6gIPl/oYVt
—–END RSA PRIVATE KEY—–
[root@cent06 conf]#

 

 

【補足】openssl コマンドで秘密鍵を作成する際に指定できる暗号化一覧

RSA 暗号方式の秘密鍵を作成するにはopenssl genrsa」コマンドを実行します。

秘密鍵は作成する時に「暗号化」が可能です。

何を「暗号化」しているのか混乱してしまうかもしれませんが

  • × 通信を暗号化
  • ○ 秘密鍵を暗号化(他人に知られたくないから)

です。

 

暗号化された秘密鍵を読むためには「復号化」しなければいけません。

秘密鍵を「復号化」するために「パスフレーズ」が必要になります。

 

ただし、毎回秘密鍵を読む際に「パスフレーズ」を入力するのが面倒な時があります。

その場合は「パスフレーズ」なしで秘密鍵を作成することもできます。

その代りセキュリティが甘くなります。

 

 

「パスフレーズなし」のコマンド例

[root@cent06 test]# openssl genrsa 2048 > server_no_pass.key
Generating RSA private key, 2048 bit long modulus
……………………………….+++
……………………………………………………………………………………………+++
e is 65537 (0x10001)
[root@cent06 test]#

 

 

パスフレーズありのコマンド例

DES、DES3、AES128、AES192、AES256 が指定できます。 

[root@cent06 test]# openssl genrsa -des3 -out server_des3.key 2048
Generating RSA private key, 2048 bit long modulus
…………………+++
…+++
e is 65537 (0x10001)
Enter pass phrase for server_des3.key:
Verifying – Enter pass phrase for server_des3.key:
[root@cent06 test]#

[root@cent06 test]# openssl genrsa -des -out server_des.key 2048
Generating RSA private key, 2048 bit long modulus
…………………………………………………………………………………………………………………………..+++
…………………………………+++
e is 65537 (0x10001)
Enter pass phrase for server_des.key:
Verifying – Enter pass phrase for server_des.key:
[root@cent06 test]#

[root@cent06 test]# openssl genrsa -aes128 -out server_aes128.key 2048

 

[root@cent06 test]# openssl genrsa -aes192 -out server_aes192.key 2048

 

[root@cent06 test]# openssl genrsa -aes256 -out server_aes256.key 2048

 

 

 

CSR(証明書署名要求)(server.csr)の作成

秘密鍵を作成したら、その秘密鍵を基に CSR を作成します。

CSR とは認証局に提出する証明書署名要求(Certificate Signing Request)のことを言います。

 

CSR(証明書署名要求、Certificate Signing Request)とは、ベリサインやジオトラストなどのパブリックな認証局に対して「公開鍵」「電子署名」をしてもらうように依頼するためのメッセージです。

 

「電子署名」とは具体的には認証局だけが持つ認証局の「秘密鍵」で署名してもらうことです。

その結果、認証局が認証したことの証明になります。

【Linux】【CentOS6】Apache で「自己証明書(オレオレ証明書)」を作成して HTTPS でアクセスできるようにする手順

 

「公開鍵」は作成していませんが、「openssl req」コマンドで秘密鍵を指定することで内部的に「公開鍵」が取り出されて、その「公開鍵」を基に「CSR」ファイルが生成されるので問題ありません。

 

オプションを解説します。

  • req -new ← 新規 CSR を作成します。
  • -key server.key ← 秘密鍵を指定します。
  • -out server.csr ← CSR のファイル名を指定します。

 

[root@cent06 ssl]# openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [XX]:JP ← 2文字の国名コードを指定します。
State or Province Name (full name) []:Tokyo ← 都道府県名を指定します。
Locality Name (eg, city) [Default City]:XXX ← 都市名を指定します。
Organization Name (eg, company) [Default Company Ltd]:Test Company Ltd ← 企業名を指定します。
Organizational Unit Name (eg, section) []:IT System1 ← 部署名を指定します。
Common Name (eg, your name or your server’s hostname) []:cent06.localdomain ← FQDNを指定します。
Email Address []:test@test.co.jp ← メールアドレスを指定します。

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: ← 何も入力せずに「Enter」を押下します。
An optional company name []: ← 何も入力せずに「Enter」を押下します。
[root@cent06 ssl]# cat server.csr ← ファイルの中身を見てみます。
—–BEGIN CERTIFICATE REQUEST—–
MIIC2DCCAcACAQAwgZIxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEMMAoG
A1UEBwwDWFhYMRkwFwYDVQQKDBBUZXN0IENvbXBhbnkgTHRkMRMwEQYDVQQLDApJ
VCBTeXN0ZW0xMRUwEwYDVQQDDAxjZW50MDYubG9jYWwxHjAcBgkqhkiG9w0BCQEW
D3Rlc3RAdGVzdC5jby5qcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALN3Aq3XrNdtlrNc/lxr51EzfEIpgLJ2RzL50uEeMt+gvgup9QFDa98eBG6YaLL5
8JxDXpQFPxO9KbNJFR6tGf1H6c2PdDa7qWuvZJmzZbckVL22FKgNhRPAbfP5B8HM
G3N6YzLwRl9936/bh65XhKRdR8ZZ2QKYNdSKT90W5peYRYyQILrGteZOOKv9U0yy
XBt7BZZg0Q7n3Zgwn+8s0ExJBJKkSrroqihZchzcl3W/RPN56Scn6gsg2byiz52O
id7B89f24Z+fBWVmpajkvoflblda97xRC3lLwJwA8niAXFKrKqqTIXUpp+y7bdm6
ljud0MrtPj/yD4VeCrli7cMCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQA7TQIu
wDOCX6Qpq9bm/GR846dtwL+YKUQpKsMe25yRW7M66MFGaum8JQvlzctTiYCGZFow
4jKmmKiVasK97OtaWPjRED9KyvTNb1zynXJ/H2c+i9cla+S/5qeap4Phj3VEvYti
8tgLsMJ6bPHoMowidI4S9JEsfIHFrXoIwPrSEkZZsrKV6lRGclnO/mL4yGHZ2lbL
7wfg6mJqUjL1AIOI9HHtm/BlEtzh5tZS8/1SLsm847FjpWXxmaWmT2sFy5BXIb2o
9ptoBHEiC9vL5Yyfixks2ZAL2H0Ek6ZLGM9Bqfpoqpl8KvZ4ghL6ldPZl2x8579S
fIHZEuu9UKDIlgXV
—–END CERTIFICATE REQUEST—–
[root@cent06 ssl]# openssl req -text < /root/ssl/server.csr
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=JP, ST=Tokyo, L=XXX, O=Test Company Ltd, OU=IT System1, CN=cent06.local/emailAddress=test@test.co.jp ← Subject には、CSRファイル作成時に入力した情報が表示されます。
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:b3:77:02:ad:d7:ac:d7:6d:96:b3:5c:fe:5c:6b:
e7:51:33:7c:42:29:80:b2:76:47:32:f9:d2:e1:1e:
32:df:a0:be:0b:a9:f5:01:43:6b:df:1e:04:6e:98:
68:b2:f9:f0:9c:43:5e:94:05:3f:13:bd:29:b3:49:
15:1e:ad:19:fd:47:e9:cd:8f:74:36:bb:a9:6b:af:
64:99:b3:65:b7:24:54:bd:b6:14:a8:0d:85:13:c0:
6d:f3:f9:07:c1:cc:1b:73:7a:63:32:f0:46:5f:7d:
df:af:db:87:ae:57:84:a4:5d:47:c6:59:d9:02:98:
35:d4:8a:4f:dd:16:e6:97:98:45:8c:90:20:ba:c6:
b5:e6:4e:38:ab:fd:53:4c:b2:5c:1b:7b:05:96:60:
d1:0e:e7:dd:98:30:9f:ef:2c:d0:4c:49:04:92:a4:
4a:ba:e8:aa:28:59:72:1c:dc:97:75:bf:44:f3:79:
e9:27:27:ea:0b:20:d9:bc:a2:cf:9d:8e:89:de:c1:
f3:d7:f6:e1:9f:9f:05:65:66:a5:a8:e4:be:87:e5:
6e:57:5a:f7:bc:51:0b:79:4b:c0:9c:00:f2:78:80:
5c:52:ab:2a:aa:93:21:75:29:a7:ec:bb:6d:d9:ba:
96:3b:9d:d0:ca:ed:3e:3f:f2:0f:85:5e:0a:b9:62:
ed:c3
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: sha1WithRSAEncryption ← 「Signature Algorithm」にはどのようにして暗号化したのかの情報が表示されます。「sha1WithRSAEncryption」は、公開鍵暗号方式は「RSA」を採用しているということと、ハッシュ関数は「SHA-1」を利用しているということが分かります。
3b:4d:02:2e:c0:33:82:5f:a4:29:ab:d6:e6:fc:64:7c:e3:a7:
6d:c0:bf:98:29:44:29:2a:c3:1e:db:9c:91:5b:b3:3a:e8:c1:
46:6a:e9:bc:25:0b:e5:cd:cb:53:89:80:86:64:5a:30:e2:32:
a6:98:a8:95:6a:c2:bd:ec:eb:5a:58:f8:d1:10:3f:4a:ca:f4:
cd:6f:5c:f2:9d:72:7f:1f:67:3e:8b:d7:25:6b:e4:bf:e6:a7:
9a:a7:83:e1:8f:75:44:bd:8b:62:f2:d8:0b:b0:c2:7a:6c:f1:
e8:32:8c:22:74:8e:12:f4:91:2c:7c:81:c5:ad:7a:08:c0:fa:
d2:12:46:59:b2:b2:95:ea:54:46:72:59:ce:fe:62:f8:c8:61:
d9:da:56:cb:ef:07:e0:ea:62:6a:52:32:f5:00:83:88:f4:71:
ed:9b:f0:65:12:dc:e1:e6:d6:52:f3:fd:52:2e:c9:bc:e3:b1:
63:a5:65:f1:99:a5:a6:4f:6b:05:cb:90:57:21:bd:a8:f6:9b:
68:04:71:22:0b:db:cb:e5:8c:9f:8b:19:2c:d9:90:0b:d8:7d:
04:93:a6:4b:18:cf:41:a9:fa:68:aa:99:7c:2a:f6:78:82:12:
fa:95:d3:d9:97:6c:7c:e7:bf:52:7c:81:d9:12:eb:bd:50:a0:
c8:96:05:d5
—–BEGIN CERTIFICATE REQUEST—–
MIIC2DCCAcACAQAwgZIxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEMMAoG
A1UEBwwDWFhYMRkwFwYDVQQKDBBUZXN0IENvbXBhbnkgTHRkMRMwEQYDVQQLDApJ
VCBTeXN0ZW0xMRUwEwYDVQQDDAxjZW50MDYubG9jYWwxHjAcBgkqhkiG9w0BCQEW
D3Rlc3RAdGVzdC5jby5qcDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
ALN3Aq3XrNdtlrNc/lxr51EzfEIpgLJ2RzL50uEeMt+gvgup9QFDa98eBG6YaLL5
8JxDXpQFPxO9KbNJFR6tGf1H6c2PdDa7qWuvZJmzZbckVL22FKgNhRPAbfP5B8HM
G3N6YzLwRl9936/bh65XhKRdR8ZZ2QKYNdSKT90W5peYRYyQILrGteZOOKv9U0yy
XBt7BZZg0Q7n3Zgwn+8s0ExJBJKkSrroqihZchzcl3W/RPN56Scn6gsg2byiz52O
id7B89f24Z+fBWVmpajkvoflblda97xRC3lLwJwA8niAXFKrKqqTIXUpp+y7bdm6
ljud0MrtPj/yD4VeCrli7cMCAwEAAaAAMA0GCSqGSIb3DQEBBQUAA4IBAQA7TQIu
wDOCX6Qpq9bm/GR846dtwL+YKUQpKsMe25yRW7M66MFGaum8JQvlzctTiYCGZFow
4jKmmKiVasK97OtaWPjRED9KyvTNb1zynXJ/H2c+i9cla+S/5qeap4Phj3VEvYti
8tgLsMJ6bPHoMowidI4S9JEsfIHFrXoIwPrSEkZZsrKV6lRGclnO/mL4yGHZ2lbL
7wfg6mJqUjL1AIOI9HHtm/BlEtzh5tZS8/1SLsm847FjpWXxmaWmT2sFy5BXIb2o
9ptoBHEiC9vL5Yyfixks2ZAL2H0Ek6ZLGM9Bqfpoqpl8KvZ4ghL6ldPZl2x8579S
fIHZEuu9UKDIlgXV
—–END CERTIFICATE REQUEST—–
[root@cent06 ssl]#

 

 

【補足】Signature Algorithm: sha1WithRSAEncryption の意味について

Signature Algorithm: sha1WithRSAEncryption の意味について解説します。

先ほども解説しましたが、「Signature Algorithm」にはどのようにして暗号化したのかの情報が表示されます。

 

sha1WithRSAEncryption から以下のことが分かります。

  • 公開鍵暗号方式は「RSA」を採用している
  • ハッシュ関数は「SHA-1」を利用している

 

 

自己証明書(オレオレ証明書)の作成

最後に「秘密鍵」「CSR」より「サーバー証明書」を作成します。

※サーバー証明書は通常パブリックなCA機関(ベリサイン、ジオトラスト等)が発行していますが、ここでは自分でサーバー証明書を発行しています。

 

下図ではパブリックな認証局の「秘密鍵」「サーバー証明書」を作成して送り返していますが、今回は自分で作った「秘密鍵」「サーバー証明書」を作成するので「自己証明書(オレオレ証明書)」になります。

【Linux】【CentOS6】Apache で「自己証明書(オレオレ証明書)」を作成して HTTPS でアクセスできるようにする手順

 

■オプション

  • -in server.csr ← CSR ファイルを読み込みます。
  • -out server.crt ← 「server.crt」というファイル名で証明書を作成します。
  • -req -signkey server.key ← サーバーの秘密鍵(server.key)を認証に使う鍵(signkey)として署名します。

※本来ならこのサーバー証明書の作成は「ベリサイン」や「ジオトラスト」等のパブリックな認証局が行います。その際に「ベリサイン」や「ジオトラスト」が保有している「秘密鍵(server.key)」を利用して「server.crt」を作成するので、お金を出して買う価値があります。今回の場合は自分で作った「server.key」を使って「サーバー証明書」を作成しているので「自己証明書(オレオレ証明書)」になります。

 

[root@cent06 conf]# openssl x509 -in server.csr -out serverc.crt -req -signkey server.key
Signature ok
subject=/C=JP/ST=Tokyo/L=XXXX/O=Test Conpany Ltd/OU=IT System/CN=cent06.localdomain/emailAddress=xxxx@localdomain
Getting Private key
Enter pass phrase for server.key:
[root@cent06 conf]# 

 

 

HTTPS通信をするためのコンフィグファイルの設定

HTTPS通信をするためのコンフィルファイルの設定をします。

 

/etc/httpd/conf/httpd.conf ファイルの編集

「/etc/httpd/conf/httpd.conf」ファイルを設定します。

特に以下の項目を設定します。

  • Listen
  • ServerName
  • DocumentRoot

 

[root@cent06 ~]# vi /etc/httpd/conf/httpd.conf

 

# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
Listen 80 ← デフォルトの80番で問題ありません。

 

 

# If your host doesn’t have a registered DNS name, enter its IP address here.
# You will have to access it by its address anyway, and this will make
# redirections work in a sensible way.
#
#ServerName www.example.com:80
ServerName cent06.localdomain:80 ← サーバーの FQDN と合わせます。

 

# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot “/var/www/html” ← デフォルトの「/var/www/html」で問題ありません。

 

 

 

/etc/httpd/conf.d/ssl.conf ファイルの編集

mod_ssl パッケージをインストールするとデフォルトで「/etc/httpd/conf.d」ディレクトリ配下に「ssl.conf」ファイルが作成されます。

[root@cent06 ~]# cd /etc/httpd/conf.d
[root@cent06 conf.d]# ls
README ssl.conf welcome.conf
[root@cent06 conf.d]# cat ssl.conf ← デフォルトの「ssl.conf」の中身を見てみます。

 

~省略~

 

# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/pki/tls/certs/localhost.crt

# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you’ve both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

 

~省略~

 

 

[root@cent06 conf.d]#

 

変更する箇所は以下の設定の部分のみです。

  • SSLCertificateFile
  • SSLCertificateKeyFile

※今回は中間証明書を利用しないので「SSLCertificateChainFile」の設定は不要です。

 

変更する前に、最初にバックアップを取ります。

[root@cent06 conf.d]# cp -ip ssl.conf ~/backup/ssl.conf_20170715
[root@cent06 conf.d]# vi ssl.conf

 

# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
#SSLCertificateFile /etc/pki/tls/certs/localhost.crt ← デフォルトの行をコメントアウトします。
SSLCertificateFile /etc/httpd/conf/server.csr ← 上のデフォルトの行をコピーして CSR ファイルを指定します。

# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you’ve both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
#SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ← デフォルトの行をコメントアウトします。
SSLCertificateKeyFile /etc/httpd/conf/server.key ← 上のデフォルトの行をコピーして秘密鍵ファイルを指定します。

 

「ssl.conf」の編集が完了したらコンフィグファイルの構文チェックをします。

 

[root@cent06 conf]# httpd -t
Syntax OK ← 構文的に問題がなければ「Syntax OK」が表示されます。

 

問題なさそうです。

 

構文が問題ないことを確認後、httpd を再起動します。

[root@cent06 .ssh]# /etc/init.d/httpd restart
httpd を停止中:        [ OK ]
httpd を起動中: Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

 

Server cent06.localdomain:443 (RSA)
Enter pass phrase: ← ここにパスフレーズを入力します。

 

OK: Pass Phrase Dialog successful.
               [ OK ]
[root@cent06 .ssh]#

 

※パスフレーズ付きの証明書を作成しているので、httpd を再起動するたびに「パスフレーズ」の入力を求められます。

 

 

【補足】httpd の再起動に失敗した場合の対応・調査手順

ここでは、SSL通信の設定をする中で起こり得るエラー集とその対応・調査手順を記載します。

エラーが発生しなければ一番いいのですが、どうしても複雑な作業を重ねるとエラーが出ることがあります。

そのエラー集を記載します。

 

httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName

「Syntax OK」と表示されているので構文的には問題ないですが、FQDN(fully qualified domain name)で不整合があると言っています。

[root@cent06 conf.d]# httpd -t
httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
Syntax OK
[root@cent06 conf.d]#

 

原因が FQDN の不整合ということで、対応方法としては、まず「/etc/hosts」ファイルに「IPアドレス」「ホスト名」を追記します。

[root@cent06 sysconfig]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.11 cent06 cent06.localdomain ← 追加しました。
[root@cent06 sysconfig]#

 

再度構文のチェックをします。

[root@cent06 sysconfig]# httpd -t
httpd: Could not reliably determine the server’s fully qualified domain name, using cent06.localdomain for ServerName
Syntax OK
[root@cent06 sysconfig]#

 

再度「httpd: Could not reliably determine the server’s fully qualified domain name, using cent06.localdomain for ServerName」のメッセージが表示されましたが、この原因は「/etc/hosts」だけでなく「/etc/httpd/conf/httpd.conf」にも「ServerName」の設定がされていないからでした。

 

「/etc/httpd/conf/httpd.conf」も設定をします。

[root@cent06 conf]# cp -ip httpd.conf ~/backup/httpd.conf_20170716
[root@cent06 conf]# vi httpd.conf

# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If this is not set to valid DNS name for your host, server-generated
# redirections will not work. See also the UseCanonicalName directive.
#
# If your host doesn’t have a registered DNS name, enter its IP address here.
# You will have to access it by its address anyway, and this will make
# redirections work in a sensible way.
#
#ServerName www.example.com:80 ← デフォルトの設定はコメントアウトにしておきます。
ServerName cent06.localdomain:80 ← その下の行に「ServerName」の設定を追加します。

 

再度、構文チェックをします。

[root@cent06 conf]# httpd -t
Syntax OK

今度は問題なさそうです。

 

 

 

Init: Unable to read server certificate from file ~ の場合

httpd の再起動に失敗した際のエラーです。

[root@cent06 conf]# service httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [失敗]

 

 

まずはログを確認してみます。

Apache(httpd)のログは「/var/log/httpd/error_log」に出力されています。

[root@cent06 conf]# less /var/log/httpd/error_log

 

[Sun Jul 16 00:59:48 2017] [notice] caught SIGTERM, shutting down ← httpd を停止しています。
[Sun Jul 16 00:59:48 2017] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
[Sun Jul 16 00:59:48 2017] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Jul 16 00:59:48 2017] [error] Init: Unable to read server certificate from file /etc/httpd/conf/server.csr ← server.csr から「サーバー証明書」が読めないと言っています。
[Sun Jul 16 00:59:48 2017] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Jul 16 00:59:48 2017] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
[Sun Jul 16 00:59:51 2017] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
[Sun Jul 16 00:59:51 2017] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Jul 16 00:59:51 2017] [error] Init: Unable to read server certificate from file /etc/httpd/conf/server.csr
[Sun Jul 16 00:59:51 2017] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Jul 16 00:59:51 2017] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error

 

「Init: Unable to read server certificate from file /etc/httpd/conf/server.csr」を翻訳すると「server.csr から“サーバー証明書”が読めない」と翻訳できます。

よくよくメッセージを確認すると「server.csr」となっています。

しかし本来はサーバー証明書(server.crt)を読み込む必要があります。

エラーの原因は「server.crt」ではなく「server.csr」になっていることでした。

サーバー証明書のファイル名とパスは「ssl.conf」で指定します。

 

「権限」や「文字コード」や「改行コード」が原因の場合

構文チェックでは問題ないですが、httpd の起動に失敗する場合で、「権限」「文字コード」「改行コード」でエラーになる場合があります。

[root@cent06 conf]# less /var/log/httpd/error_log

[Sun Jul 16 00:59:48 2017] [notice] caught SIGTERM, shutting down 
[Sun Jul 16 00:59:48 2017] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
[Sun Jul 16 00:59:48 2017] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Jul 16 00:59:48 2017] [error] Init: Unable to read server certificate from file /etc/httpd/conf/server.crt
[Sun Jul 16 00:59:48 2017] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Jul 16 00:59:48 2017] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error
[Sun Jul 16 00:59:51 2017] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
[Sun Jul 16 00:59:51 2017] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Sun Jul 16 00:59:51 2017] [error] Init: Unable to read server certificate from file /etc/httpd/conf/server.crt
[Sun Jul 16 00:59:51 2017] [error] SSL Library Error: 218529960 error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag
[Sun Jul 16 00:59:51 2017] [error] SSL Library Error: 218595386 error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error

 

 

権限を確認します。

[root@cent06 conf]# ls -l
合計 64
-rw-r–r–. 1 root root 34452 7月 16 00:56 2017 httpd.conf
-rw-r–r–. 1 root root 13139 7月 12 22:33 2017 magic
-rw-r–r–. 1 root root 1338 7月 16 09:18 2017 server.crt
-rw-r–r–. 1 root root 1074 7月 16 09:15 2017 server.csr
-rw-r–r–. 1 root root 1743 7月 16 09:12 2017 server.key

権限周りは特に問題なさそうです。

※root 以外のアカウントに鍵の中身を見せないために「644」ではなく「600」の方がいいです。 

 

文字コードを確認します。

「file -i」コマンドで文字コードを確認できます。

[root@cent06 conf]# file -i /etc/httpd/conf/server.crt
/etc/httpd/conf/server.crt: text/plain; charset=us-ascii ← us-ascii コードでした。「ASCII」コードなので間違ってはいません。

 

nkf コマンドがあれば、「文字コードの確認」と「文字コードの変換」が可能です。

[root@cent06 conf]# yum install nkf ← nkf コマンドをインストールします。
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
依存性の解決をしています
–> トランザクションの確認を実行しています。
—> Package nkf.x86_64 1:2.0.8b-6.2.el6 will be インストール
–> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================
パッケージ アーキテクチャ バージョン リポジトリー 容量
========================================================================================================
インストールしています:
nkf x86_64 1:2.0.8b-6.2.el6 base 110 k

トランザクションの要約
========================================================================================================
インストール 1 パッケージ

総ダウンロード容量: 110 k
インストール済み容量: 241 k
これでいいですか? [y/N]y ← y を入力します。
パッケージをダウンロードしています:
nkf-2.0.8b-6.2.el6.x86_64.rpm | 110 kB 00:00
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
インストールしています : 1:nkf-2.0.8b-6.2.el6.x86_64 1/1
Verifying : 1:nkf-2.0.8b-6.2.el6.x86_64 1/1

インストール:
nkf.x86_64 1:2.0.8b-6.2.el6

完了しました!

 

nkf コマンドで証明書の「文字コード」「改行コード」を確認することができます。

[root@cent06 conf]# nkf –guess /etc/httpd/conf/server.crt
ASCII (LF) ← 文字コードは「ASCII」で改行コードは「LF」なので問題ありません。 
[root@cent06 conf]#

 

今回は、文字コードは「ASCII」で改行コードは「LF」だったので問題ないですが、仮に「SJIS(Shift JIS)」など他の文字コードの場合、 文字コードをUTF-8 に変換します。(Apache は UTF-8 を読み込めます。→ そもそもconfファイルに日本語が入ってなければ、「ASCII」として表示されます)

※ファイルをWindowsパソコン上で開いて保存したりすると文字コードが変わることがあります。

[root@cent06 conf]# nkf -w8 –overwrite /etc/httpd/conf/server.crt ← utf-8 に変換します。
[root@cent06 conf]# nkf –guess /etc/httpd/conf/server.crt ← 文字コードを確認します。
UTF-8 (LF)
[root@cent06 conf]#

 

 

動作確認

設定上は「TLS 1.2」で通信をしていることになっていますが、実際に「TLS 1.2」で通信をしているのか動作確認をします。

 

openssl コマンドで確認

まずは「openssl」コマンドで通信を確認します。

[root@cent06 .ssh]# openssl s_client -host 192.168.1.11 -port 443 -tls1_2
CONNECTED(00000003)
depth=0 C = JP, ST = Tokyo, L = XXXX, O = Test Conpany Ltd, OU = IT System, CN = cent06.localdomain, emailAddress = xxxx@localdomain
verify error:num=18:self signed certificate
verify return:1
depth=0 C = JP, ST = Tokyo, L = XXXX, O = Test Conpany Ltd, OU = IT System, CN = cent06.localdomain, emailAddress = xxxx@localdomain
verify return:1

Certificate chain
0 s:/C=JP/ST=Tokyo/L=XXXX/O=Test Conpany Ltd/OU=IT System/CN=cent06.localdomain/emailAddress=xxxx@localdomain
i:/C=JP/ST=Tokyo/L=XXXX/O=Test Conpany Ltd/OU=IT System/CN=cent06.localdomain/emailAddress=xxxx@localdomain

Server certificate
—–BEGIN CERTIFICATE—–
MIIDsDCCApgCCQCjaQZy9r0KtjANBgkqhkiG9w0BAQUFADCBmTELMAkGA1UEBhMC
SlAxDjAMBgNVBAgMBVRva3lvMQ0wCwYDVQQHDARYWFhYMRkwFwYDVQQKDBBUZXN0
IENvbnBhbnkgTHRkMRIwEAYDVQQLDAlJVCBTeXN0ZW0xGzAZBgNVBAMMEmNlbnQw
Ni5sb2NhbGRvbWFpbjEfMB0GCSqGSIb3DQEJARYQeHh4eEBsb2NhbGRvbWFpbjAe
Fw0xNzA3MTYwMDE4NDRaFw0xNzA4MTUwMDE4NDRaMIGZMQswCQYDVQQGEwJKUDEO
MAwGA1UECAwFVG9reW8xDTALBgNVBAcMBFhYWFgxGTAXBgNVBAoMEFRlc3QgQ29u
cGFueSBMdGQxEjAQBgNVBAsMCUlUIFN5c3RlbTEbMBkGA1UEAwwSY2VudDA2Lmxv
Y2FsZG9tYWluMR8wHQYJKoZIhvcNAQkBFhB4eHh4QGxvY2FsZG9tYWluMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxhBKOKjooHL6B12TI1Y0Tr/94m/L
A9cfx1jX/vvMvNkFxsdGVYxawLUYCfGbZVy9WYNYSR8Kplrdkw5eXJHptQHT7XVK
11uSDDvDxfZ4mAxDqyZqDXkdEVRIPEUJJvUya5uFQns9WAbcE8bO0otzUFIOHRJ1
TQor/SYzwrRlsBFXmLkxvGPN/qphXUVqnRIMWyHfB5Ad3WAu+laTCKc2DeDVC8+F
ln0hnoDGFRWHhL/Gugw6NpL34ZaZle6axnRqndH2BaXexf8Ajzx1L/+ot9eupdvI
SR6y1h7269SAJc6R2B+fYcC5dW0VgIxMKkjvs5ErU6aDSh6QfQVmqyI51wIDAQAB
MA0GCSqGSIb3DQEBBQUAA4IBAQBhZxM5+jZ62UlCL8QjRpy+6o9Frkja46BwtLyi
ZXZkIDpvQBASIJ88UuE0NRhuknbF+NnvJKDXI1JPqsZEKVOzJcAut/pU+vzkM6jb
SSAsh0rVIy2rNI/z1iMPUVyAZqF/v02Oe5UivKy4ETGtpvsU4HKRfjkVcW3VTWhh
jFg+LBMwwEGE3gAX4oZf9ds2GWp73lVAHxWcICXQFHt8rF48GUwoUMr6DgzPUgPA
2F9j1mtllujJUtw+KdzQzZcQ06Py+vY/WRbEn+cJ3zDtPlNzeoF7kw5J0EUe3Ar7
D8g+7QRTIJ4CijD5F5mIU7Gg2DKJ+6B9WjtvYhf1giKfna5a
—–END CERTIFICATE—–
subject=/C=JP/ST=Tokyo/L=XXXX/O=Test Conpany Ltd/OU=IT System/CN=cent06.localdomain/emailAddress=xxxx@localdomain
issuer=/C=JP/ST=Tokyo/L=XXXX/O=Test Conpany Ltd/OU=IT System/CN=cent06.localdomain/emailAddress=xxxx@localdomain

No client certificate CA names sent
Server Temp Key: ECDH, prime256v1, 256 bits

SSL handshake has read 1639 bytes and written 373 bytes

New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
  Protocol : TLSv1.2 ← TLS 1.2 で暗号化通信できています。
  Cipher : ECDHE-RSA-AES256-GCM-SHA384
  Session-ID: 29E334C4B6CC364240D41A96FE186647BC1393A01F6DE638751A34487E81C180
  Session-ID-ctx:
  Master-Key: AC66EE330CC4A59BEF8C2FF4374F1975002C15D437B21E21F5B2D5DE428505BC3AD9421B2B1799A087BF4DEC16498460
  Key-Arg : None
  Krb5 Principal: None
  PSK identity: None
  PSK identity hint: None
  TLS session ticket lifetime hint: 300 (seconds)
  TLS session ticket:
  0000 – 7a 53 c6 21 90 05 24 6b-79 4e 62 c1 c0 7c 56 0f zS.!..$kyNb..|V.
  0010 – 6d 06 6b 54 c2 f3 f1 79-ab b4 db 9f e7 92 d5 56 m.kT…y…….V
  0020 – d6 ae 12 d0 e5 f1 6e 87-12 65 fa 99 e3 5b 3e db ……n..e…[>.
  0030 – 43 5d 06 5f bd f5 80 06-04 ad 02 e6 f2 2b a0 c7 C]._………+..
  0040 – e6 d4 9a 87 44 2d 63 df-14 84 c2 fb 63 b8 87 27 ….D-c…..c..’
  0050 – d9 e9 6c a1 1c 34 3c 86-13 b8 ef 02 21 6c ff ed ..l..4<…..!l..
  0060 – da 22 bb ec 0a 51 b3 09-9e 26 76 0f 9c 4c 05 6f .”…Q…&v..L.o
  0070 – db 55 75 d9 29 a1 8b fd-36 18 15 4b d2 87 c1 8f .Uu.)…6..K….
  0080 – 3a 2c bb 0a 61 06 3d 5b-e9 45 c1 4a 9b f7 09 c3 :,..a.=[.E.J….
  0090 – db 59 38 c7 cb 0e 07 0c-69 6b 73 24 e2 30 fc 87 .Y8…..iks$.0..
  00a0 – 43 8e 26 b6 9f d2 a2 e8-4e 9d ef 5f 0a 5d 2c 37 C.&…..N.._.],7
  00b0 – 2d 4f 2d 5b 90 58 c4 cb-30 29 b2 1b 1a ab f7 cb -O-[.X..0)……

  Start Time: 1500190976
  Timeout : 7200 (sec)
  Verify return code: 18 (self signed certificate)

HTTP/1.1 400 Bad Request
Date: Sun, 16 Jul 2017 07:43:01 GMT
Server: Apache/2.2.15 (CentOS)
Content-Length: 311
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”>
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.2.15 (CentOS) Server at cent06.localdomain Port 443</address>
</body></html>
closed
[root@cent06 .ssh]#

 

 

tcpdump で動作確認

tcpdumpでも「TLS 1.2」で通信していることを確認します。

[root@cent06 conf]# tcpdump -nn port 443
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:27:24.262891 IP 192.168.1.3.3363 > 192.168.1.11.443: Flags [S], seq 42762213, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
21:27:24.263081 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [S.], seq 1498379508, ack 42762214, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0
21:27:24.265408 IP 192.168.1.3.3363 > 192.168.1.11.443: Flags [.], ack 1, win 16425, length 0
21:27:24.265675 IP 192.168.1.3.3363 > 192.168.1.11.443: Flags [P.], seq 1:201, ack 1, win 16425, length 200
21:27:24.265747 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [.], ack 201, win 245, length 0
21:27:24.290251 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [P.], seq 1:1377, ack 201, win 245, length 1376
21:27:24.322661 IP 192.168.1.3.3363 > 192.168.1.11.443: Flags [P.], seq 201:327, ack 1377, win 16081, length 126
21:27:24.323249 IP 192.168.1.3.3363 > 192.168.1.11.443: Flags [P.], seq 327:679, ack 1377, win 16081, length 352
21:27:24.326283 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [P.], seq 1377:1635, ack 679, win 262, length 258
21:27:24.332754 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [.], seq 1635:4555, ack 679, win 262, length 2920
21:27:24.332994 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [.], seq 4555:6015, ack 679, win 262, length 1460
21:27:24.333046 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [P.], seq 6015:6852, ack 679, win 262, length 837
21:27:24.333567 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [P.], seq 6852:6883, ack 679, win 262, length 31
21:27:24.334111 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [F.], seq 6883, ack 679, win 262, length 0
21:27:24.335488 IP 192.168.1.3.3363 > 192.168.1.11.443: Flags [.], ack 6883, win 16425, length 0
21:27:24.335628 IP 192.168.1.3.3363 > 192.168.1.11.443: Flags [F.], seq 679, ack 6883, win 16425, length 0
21:27:24.335654 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [.], ack 680, win 262, length 0
21:27:24.420430 IP 192.168.1.3.3364 > 192.168.1.11.443: Flags [S], seq 3234291391, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
21:27:24.442926 IP 192.168.1.11.443 > 192.168.1.3.3364: Flags [S.], seq 780481795, ack 3234291392, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0
21:27:24.442978 IP 192.168.1.3.3365 > 192.168.1.11.443: Flags [S], seq 3270538861, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0
21:27:24.443025 IP 192.168.1.11.443 > 192.168.1.3.3365: Flags [S.], seq 3396709386, ack 3270538862, win 14600, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0
21:27:24.445122 IP 192.168.1.3.3364 > 192.168.1.11.443: Flags [.], ack 1, win 16425, length 0
21:27:24.445382 IP 192.168.1.3.3365 > 192.168.1.11.443: Flags [.], ack 1, win 16425, length 0
21:27:24.445647 IP 192.168.1.3.3364 > 192.168.1.11.443: Flags [P.], seq 1:518, ack 1, win 16425, length 517
21:27:24.445736 IP 192.168.1.11.443 > 192.168.1.3.3364: Flags [.], ack 518, win 245, length 0
21:27:24.445795 IP 192.168.1.3.3365 > 192.168.1.11.443: Flags [P.], seq 1:518, ack 1, win 16425, length 517
21:27:24.445841 IP 192.168.1.11.443 > 192.168.1.3.3365: Flags [.], ack 518, win 245, length 0
21:27:24.447736 IP 192.168.1.11.443 > 192.168.1.3.3364: Flags [P.], seq 1:138, ack 518, win 245, length 137
21:27:24.449400 IP 192.168.1.11.443 > 192.168.1.3.3365: Flags [P.], seq 1:138, ack 518, win 245, length 137
21:27:24.450357 IP 192.168.1.3.3364 > 192.168.1.11.443: Flags [P.], seq 518:569, ack 138, win 16390, length 51
21:27:24.450821 IP 192.168.1.3.3364 > 192.168.1.11.443: Flags [P.], seq 569:882, ack 138, win 16390, length 313
21:27:24.451039 IP 192.168.1.11.443 > 192.168.1.3.3364: Flags [.], ack 882, win 262, length 0
21:27:24.451584 IP 192.168.1.3.3365 > 192.168.1.11.443: Flags [P.], seq 518:569, ack 138, win 16390, length 51
21:27:24.452049 IP 192.168.1.3.3365 > 192.168.1.11.443: Flags [P.], seq 569:882, ack 138, win 16390, length 313
21:27:24.452824 IP 192.168.1.11.443 > 192.168.1.3.3365: Flags [.], ack 882, win 262, length 0
21:27:24.458154 IP 192.168.1.11.443 > 192.168.1.3.3364: Flags [.], seq 138:1598, ack 882, win 262, length 1460
21:27:24.458200 IP 192.168.1.11.443 > 192.168.1.3.3364: Flags [P.], seq 1598:2777, ack 882, win 262, length 1179
21:27:24.459448 IP 192.168.1.11.443 > 192.168.1.3.3365: Flags [.], seq 138:3058, ack 882, win 262, length 2920
21:27:24.459677 IP 192.168.1.11.443 > 192.168.1.3.3365: Flags [P.], seq 3058:4405, ack 882, win 262, length 1347
21:27:24.460141 IP 192.168.1.11.443 > 192.168.1.3.3365: Flags [P.], seq 4405:4436, ack 882, win 262, length 31
21:27:24.460393 IP 192.168.1.11.443 > 192.168.1.3.3365: Flags [F.], seq 4436, ack 882, win 262, length 0
21:27:24.460457 IP 192.168.1.3.3364 > 192.168.1.11.443: Flags [.], ack 2777, win 16425, length 0
21:27:24.460777 IP 192.168.1.3.3364 > 192.168.1.11.443: Flags [P.], seq 882:913, ack 2777, win 16425, length 31
21:27:24.461305 IP 192.168.1.3.3364 > 192.168.1.11.443: Flags [F.], seq 913, ack 2777, win 16425, length 0
21:27:24.461569 IP 192.168.1.11.443 > 192.168.1.3.3364: Flags [P.], seq 2777:2808, ack 914, win 262, length 31
21:27:24.461696 IP 192.168.1.3.3365 > 192.168.1.11.443: Flags [.], ack 4437, win 16425, length 0
21:27:24.461956 IP 192.168.1.3.3365 > 192.168.1.11.443: Flags [F.], seq 882, ack 4437, win 16425, length 0
21:27:24.461987 IP 192.168.1.11.443 > 192.168.1.3.3365: Flags [.], ack 883, win 262, length 0
21:27:24.462472 IP 192.168.1.11.443 > 192.168.1.3.3364: Flags [F.], seq 2808, ack 914, win 262, length 0
21:27:24.463312 IP 192.168.1.3.3364 > 192.168.1.11.443: Flags [R.], seq 914, ack 2808, win 0, length 0
21:27:24.541677 IP 192.168.1.11.443 > 192.168.1.3.3363: Flags [F.], seq 6883, ack 680, win 262, length 0
21:27:24.544003 IP 192.168.1.3.3363 > 192.168.1.11.443: Flags [.], ack 6884, win 0, length 0
^C
52 packets captured
52 packets received by filter
0 packets dropped by kernel
[root@cent06 conf]#

 

コマンドラインだと SSL のバージョンが分からないのでファイルにキャプチャして「WireShark」でパケット解析をすることにします。

 

tcpdump でパケット解析をする方法は以下も参照してください。

 

以下のようにパケットをキャプチャしたデータをファイルに吐き出します。

[root@cent06 ~]# tcpdump -i eth0 -w ssh_test.cap ← キャプチャしたデータを「ssh_test.cap」ファイルにダンプします。
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
^C125 packets captured
125 packets received by filter
0 packets dropped by kernel
[root@cent06 ~]# ls -l ← ファイルを確認します。
合計 1784
-rw——-. 1 root root 1099 6月 15 21:07 2017 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 7月 16 09:19 2017 backup
-rw-r–r–. 1 tcpdump tcpdump 32433 7月 16 21:36 2017 ssh_test.cap
[root@cent06 ~]#

 

このデータをパソコンに転送して「WireShark」で表示します。

「TLSv1.2」で通信をしているログがあるので「TLS 1.2」で通信をしていることが分かります。

【Linux】【CentOS6】Apache で「自己証明書(オレオレ証明書)」を作成して HTTPS でアクセスできるようにする手順

 

 

まとめ

Apache をインストールして、httpd の設定をデフォルト状態にして「オレオレ証明書」を作成して https アクセスをして表示させるだけなら簡単ですが、細かく暗号化の規格やどこがどう関連しているのか調べると、まだまだ難しく感じます。

SSL/TLS プロトコルは奥が深いです。というよりいろんな要素が関連しているので複雑です。

 

参考サイト

非常に深いところまで勉強になりました。

http://d.hatena.ne.jp/ozuma/20130511/1368284304

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください