LoginSignup
1
1

More than 3 years have passed since last update.

CentOS 5.xでLet's Encrypt

Posted at

CentOS5.x/Apache 2.2.19のSSL/TLS証明書の有効期限切れに対応することになったのでメモとして残しておくことにしました。

方式

  • 証明書はcertbotを使って取得
  • 認証局はLet's Encrypt
  • 証明書はCentOS5.xとは別のホストのcertbotで証明書をDNS認証で発行

動作確認環境

今回対応するCentOS5.xのサーバは本番環境しかないため、まずは動作を確認するため検証環境の構築から始めます。

検証環境はKVMゲストとして以下の緒元で作成しました。
CentOS 5.5を選択した理由は手持ちのCentOS 5系のisoがCentOS 5.5だけだったので特に意味はありません。

#
ホストOS CentOS 8 Stream
IP 192.168.1.55/24
メモリ 512 MB
OS CentOS 5.5
httpd Apache 2.2.19 (ソースからインストール)
openssl 1.0.12u (ソースからインストール)

CentOS5.5のインストール

cent55.cfgを以下の内容で作成

install

cdrom
text
skipx
reboot

keyboard    jp106
timezone    Asia/Tokyo
key         --skip
lang        en_US.UTF-8
network     --device eth0 --bootproto static --ip 192.168.1.55 --netmask 255.255.255.0 --gateway 192.168.1.1 --nameserver 192.168.1.1

rootpw      --iscrypted $6$JNY9rzBjiwK4HgJQ$A3Nac/jusuRE0q1RYK1ZNq.LVz4k0w8t6TGmDM55yxGkPHP64m466BrPlHBKuHr4feIlTYu0Wb4q0jqnBQbu1

firewall    --disabled
selinux     --disabled
authconfig  --enableshadow --passalgo=sha512

zerombr     yes
bootloader  --location=mbr --driveorder=vda --append="console=ttyS0,115200n8"

clearpart   --all --initlabel
autopart

%packages   --nobase

インストール開始

virt-install \
    --name cent55 \
    --initrd-inject cent55.cfg \
    --hvm \
    --virt-type kvm \
    --ram 512 \
    --vcpus 1 \
    --arch x86_64 \
    --cpu kvm64 \
    --os-type linux \
    --os-variant rhel5.5 \
    --graphics none \
    --disk=/var/lib/libvirt/images/cent55.img,format=qcow2,size=8,bus=virtio,cache=none \
    --location /export/isos/CentOS-5.5-x86_64-bin-DVD-1of2.iso \
    --network bridge=br0 \
    --extra-args "edd=off console=tty0 console=ttyS0,115200n8 ks=file:/cent55.cfg" \
    --serial pty

インストール完了



    GNU GRUB  version 0.97  (639K lower / 523104K upper memory)

 +-------------------------------------------------------------------------+
 | CentOS (2.6.18-194.el5)                                                 |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 |                                                                         |
 +-------------------------------------------------------------------------+
      Use the ^ and v keys to select which entry is highlighted.
      Press enter to boot the selected OS, 'e' to edit the
      commands before booting, 'a' to modify the kernel arguments
      before booting, or 'c' for a command-line.

   The highlighted entry will be booted automatically in 1 seconds.

ログイン

/boot: clean, 35/26104 files, 15947/104388 blocks

[  OK  ]
Remounting root filesystem in read-write mode:  [  OK  ]
Mounting local filesystems:  [  OK  ]
Enabling /etc/fstab swaps:  [  OK  ]
INIT: Entering runlevel: 3
Entering non-interactive startup
Checking for hardware changes [  OK  ]
Bringing up loopback interface:  [  OK  ]
Bringing up interface eth0:  [  OK  ]
Starting system logger: [  OK  ]
Starting kernel logger: [  OK  ]
Starting system message bus: [  OK  ]
Mounting other filesystems:  [  OK  ]
Starting HAL daemon: [  OK  ]
Starting sshd: [  OK  ]

CentOS release 5.5 (Final)
Kernel 2.6.18-194.el5 on an x86_64

localhost.localdomain login: root
Password:
Last login: Tue Apr 27 07:31:02 on ttyS0
[root@localhost ~]#

yumリポジトリを変更
CentOS5 は 2017/03/31 にサポートが切れているのでyumのリポジトリを変更します。

# sed -i \
 -e 's/^mirrorlist=/#mirrorlist=/' \
 -e 's/^#baseurl=/baseurl=/' \
 -e 's/mirror.centos.org\/centos/archive.kernel.org\/centos-vault/' \
 -e 's/\$releasever/5.5/g' \
 /etc/yum.repos.d/CentOS-Base.repo

httpdとopensslのコンパイルに必要なパッケージをインストールします。

# yum -y install curl gcc gnutls-devel make openssl-devel pcre pcre-devel wget zlib-devel

httpdインストール

Apache httpd 2.2.19のソースダウンロード → コンパイル → インストール

# curl -k -O https://archive.apache.org/dist/httpd/httpd-2.2.19.tar.gz
# tar xzvf httpd-2.2.19.tar.gz -C /usr/local/src/
# cd /usr/local/src/httpd-2.2.19
# ./configure --enable-mods-shared="all ssl" --with-included-apr
# make
# make install

httpdの起動と確認

# /usr/local/apache2/bin/apachectl start

01.png


今回は証明書の検証なので検証用のドメインを取得してhttps://(ドメイン名)/で正常にアクセス出来る事を確認する必要があります。
また証明書は上で構築したCentOS5.5とは別のホストのcertbotでDNS認証により発行するのでDNSサーバも必要となります。

今回は以下の2つフリーサービスを使うことにしました。
- ドメイン取得 → freenom
- DNSサーバ → serverspace

ドメイン取得

例としてドメインはcerts-test.tkを取得します。
freenomのサイトにアクセスしてドメインの利用状況を確認します。
02.png

「certs-test.tk」を選択します。
03.png

しかし「今すぐ入手」をクリックすると×利用不可の表示に変わってしまいます。
03-2.png

ドメインの利用状況の確認を「certs-test.tk」で行うと
04.png

利用可能となるので、「チェックアウト」をクリックして先にすすみます。
05.png

デフォルトでは「3 Months@FREE」が選択されていますが、無料なので「12 Months@FREE」を選択しました。
※「12 Months@FREE」なのに「1 Year @ USD 9.95」な理由は分かりません。

「Continue」をクリックして先に進みます。
06.png

Review & Checkout画面が表示されるのでメールアドレスを登録します。
07.png

「Verify My Email Address」をクリックすると確認メールが届くので、メール内のリンクをクリックします。
08.png

Your Detailsを埋め、利用規約をチェックして「Complete Order」をクリックします。
09.png

Order Confirmation画面が表示されるので「Click here to go to your Client Area」をクリックします。
10.png

name server登録

ログイン画面が表示されたら、登録したメールアドレスとパスワードでログインします。
11.png

ログインしたら、「Service」→「My Domains」を選択します。
12.png

certs-test.tkの「Manage Domain」をクリックします。
13.png

「Management Tools」→「Nameservers」を選択します。
14.png

Use custom nameserversを選択します。
15.png

freenomの画面はこのままにしておき、別のブラウザやタブなどからserverspaceのサイトにアクセスします。
メールアドレスを登録してアカウントを作成します。
16.png

確認メールが届くのでメール内の「CONFIRM」をクリックします。
17.png

パスワードが書かれたメールが届きます。
18.png

serverspaceのサイトにアクセスして登録したメールアドレスと、↑のメールで届いたパスワードでログインします。
19.png

「DNS」をクリックします。
20.png

「ADD DOMAIN」をクリックします。
21.png

freenomで取得したドメイン「certs-test.tk」を入力して「ADD DOMAIN」をクリックします。
22.png

2つのNSレコードのname serverをCopyして、freenomのnameserver1とnameserver2に登録します。
23.png

freenomのnameserver1とnameserver2に登録が完了したら「Change Nameservers」をクリックします。
24.png

以上でfreenomでの作業は終了です。
25.png

serverspaceの画面で「CREATE RECORD」をクリックします。
26.png

Domain nameに@、IP addressにグローバルIP、TTLを適当に設定して「CREATE RECORD」をクリックします。
27.png

グローバルIPはifconfig.ioやipconfig.ioなどにアクセスすると確認できます。
28.png

レコードが追加され「certs-test.tk」ドメインで検証用CentOS5.xにアクセスできるようになります。
29.png

今回の検証環境ではインターネットからのリクエストがホストOS(CentOS 8 Stream)に着信するので、着信したhttp(tcp:80)とhttps(tcp:443)の通信をCentOS5.5へポートフォワードするように設定します。

# firewall-cmd --zone=external --add-forward-siamsport=port=80:proto=tcp:toport=80:toaddr=192.168.1.55
# firewall-cmd --zone=external --add-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.1.55

ドメイン(certs-test.tk)でアクセスできるようになりました。
30.png

証明書作成

ここまでで検証環境の構築が完了したので、いよいよ証明書を作成します。
証明書はホストOS(CentOS 8 Stream)のcertbotを使用してDNS認証で作成します。

# certbot certonly \
        --manual \
        --domain certs-test.tk \
        --email certs-test@XXXXXXXX.xxx \
        --agree-tos \
        --preferred-challenges dns-01 \
        --server https://acme-v02.api.letsencrypt.org/directory
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Requesting a certificate for certs-test.tk
Performing the following challenges:
dns-01 challenge for certs-test.tk

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.certs-test.tk with the following value:

VLdtOLi2Rmy9JbuZCeAbB1yYE4h-xm8MqgXwl042a_U

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

注意 ここではまだEnterを押下しないでください。

serverspaceのDomainに↑で表示されたTXTレコードを追加します。
31.png
32.png

TXTレコードが登録されたことを確認してから、certbot画面でEnterを押下します。

# dig +short _acme-challenge.certs-test.tk txt
"VLdtOLi2Rmy9JbuZCeAbB1yYE4h-xm8MqgXwl042a_U"
Press Enter to Continue (Enter)
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/certs-test.tk/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/certs-test.tk/privkey.pem
   Your certificate will expire on 2021-07-29. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

/etc/letsencrypt/archive/certs-test.tkに証明書が作成されるのでCentOS5.5に転送します。

# pwd
/etc/letsencrypt/archive/certs-test.tk
# scp fullchain1.pem privkey1.pem 192.168.1.55:/usr/local/apache2/conf/
Warning: Permanently added '192.168.1.55' (RSA) to the list of known hosts.
root@192.168.1.55's password:
fullchain1.pem                                100% 3424     3.8MB/s   00:00
privkey1.pem                                  100% 1704     2.3MB/s   00:00

CentOS5.5にログインしてapacheの設定を変更します。

# cd /usr/local/apache2/conf

# vi httpd.conf
Include conf/extra/httpd-ssl.conf ← コメントアウトを削除

# vi extra/httpd-ssl.conf (下記2箇所を以下のように変更)
SSLCertificateFile "/usr/local/apache2/conf/fullchain1.pem"
SSLCertificateKeyFile "/usr/local/apache2/conf/privkey1.pem"

Apacheを再起動してアクセスしてみます。

/usr/local/apache2/bin/apachectl restart

エラーです。
33.png

詳細情報を見てみましょう。
34.png

「サーバーはTLS1.2以降を使用する必要があります。」
証明書は有効ですが、サーバー(Apache)がTLS1.2に対応していないためエラーとなります。

TLS1.2対応

それでは、CentOS5.5のApacheをTLS1.2に対応しましょう。
以下はCentOS5.5での作業です。

# curl -k -O https://ftp.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz
# tar xzvf openssl-1.0.2u.tar.gz -C /usr/local/src/
# cd /usr/local/src/openssl-1.0.2u/
# ./config shared enable-ssl2 enable-ssl3 enable-md2 --prefix=/usr/local/openssl-1.0.2u
# make
# make install

# cd /usr/local/openssl-1.0.2u/lib/
# ln -s libssl.so.1.0.0 libssl.so.6
# ln -s libcrypto.so.1.0.0 libcrypto.so.6

# cd /usr/local/apache2/bin
# cp -a envvars envvars_bak

# vi envvars
LD_LIBRARY_PATH="/usr/local/apache2/lib:$LD_LIBRARY_PATH"
                            ↓変更
LD_LIBRARY_PATH="/usr/local/openssl-1.0.2u/lib:/usr/local/apache2/lib:$LD_LIBRARY_PATH"

Apacheを再起動してアクセスしてみます。

/usr/local/apache2/bin/apachectl restart

今度は正常にアクセス出来ました。
35.png

まとめ

今回は検証環境を構築するためドメインの取得から行ったので手順が多かったですが、実環境ではcertbotで証明書をDNS認証で作成し、CentOS5.xにはTLS1.2に対応したopensslをインストールすれば良いことが分かりました。

Let's Encryptでは証明書の更新を3ヶ月以内に行う必要がありますが、更新はAnsibleなどを使えば簡単に行えるかと思います。

証明書の更新作業についてはまた別の機会に書こうと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1