株式会社HAMWORKS
🖌

Movable Type環境のCentOSからRocky Linuxへの移行 SSL Storeの設定: パート2

2024/05/31に公開

前回の記事では、Rocky Linux 9.3 のサーバセットアップ手順を説明しました。
今回の記事では、SSL Storeの証明書を設定していきます。

https://zenn.dev/hamworks/articles/article12-centos-rocky1

環境

利用環境は、さくらのクラウドを利用しています。

  • さくらのクラウド
  • OS: CentOS 7 → Rocky Linux 9

SSLについて

https://www.ssl-store.jp/

SSL Store で購入した証明書を使います。
この記事では、ドメイン認証のFUJI SSLを利用しています。

SSLストアの証明書の手順

証明書を購入手続きが完了すると、info@fujissl.jp からメールが届きます。

  • SSLサーバ証明書
  • 中間証明書
  • 秘密鍵

秘密鍵は、CSRを作成した際に作成したファイルを利用します。
以下のCSR生成ページで作成できます。

https://www.ssl-store.jp/system/tool.php/generateCsr

自分の環境では以下に配置しました。

  • サーバ証明書: /etc/httpd/conf/ssl-DomainName.crt/certificate.crt
  • 中間証明書: /etc/httpd/conf/ssl-DomainName.crt/bundle.crt
  • 秘密鍵: /etc/pki/tls/private/DomainName.pk

サーバ証明書と中間証明書は、apacheのconfに配置しました。
秘密鍵は pki/tls/private に配置しました。
ドキュメントでは、/etc/pki/tls/certs に配置することが一般的のようです。

configの配置

自動更新用のための config ファイルを配置します。

配置場所は、/var/fujissl/sslstore-client-tool-0.0.2/conf に配置しました。
var 配下に fujissl ディレクトリを作成して 自動更新クライアントを wget/unzipして配置しました。
自動更新のクライアントのインストール先は fujissl というディレクトリにしています。

インストール後、 sslstore-client-tool-0.0.2/ 配下に conf ディレクトリを作成し、domaiName.conf を配置します。

config:
      appid:  <契約コード(APP-XXXXXXXXXXXXXXX)>
      ordid:  <注文コード(ORD-XXXXXXXXXXXXXXX)>
      fqdn: <コモンネーム>
      document_root: <ドキュメントルート>
      backup_dir: <バックアップディレクトリ>
      private_key:  <秘密鍵ファイル設置場所>
      certificate:  <証明書ファイル設置場所>
      ca_bundle:  <中間証明書ファイル設置場所>

Firewallの設定

Rocky Linux 9.3 では、firewalld がデフォルトでインストールされています。
firewall-cmd コマンドを使って、SSLのポートを解放します。

firewall-cmd --add-service=https --zone=public --permanent で https のポートを解放します。
--permanent をつけることで、再起動後も設定が有効になります。

firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client http https ssh
  ports: XXXX/tcp 80/tcp 443/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
firewall-cmd --reload

Apacheの設定

SSLのVirtualHostの設定方法です。

https://zenn.dev/hamworks/articles/article12-centos-rocky1

前回設定した、Apacheの設定に追記していきます。

vi /etc/httpd/conf.d/virtualhost.conf

以下の設定を行っています。
基本的には 80ポートはリダイレクトして443ポートにアクセスするようにします。

80ポートの設定にリダイレクトの処理を加えておきます。

<VirtualHost *:80>
    DocumentRoot /var/www/server1/html
    ServerName server1.co.jp
    ScriptAlias /cgi-bin/ /var/www/server1/cgi-bin/
    <Directory "/var/www/server1">
        AllowOverride All
        Order allow,deny
        Allow from all
        Options ExecCGI FollowSymLinks Includes
        AddType application/x-httpd-cgi .cgi .pl
        AddHandler image/gif .gif
        AddHandler image/jpg .jpg
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </Directory>
    ErrorLog /var/www/server1/logs/error_log
    TransferLog /var/www/server1/logs/access_log
</VirtualHost>

<VirtualHost *:80>
    DocumentRoot /var/www/server2/html
    ServerName server2.co.jp
    ScriptAlias /cgi-bin/ /var/www/server2/cgi-bin/
    <Directory "/var/www/server2">
        AllowOverride All
        Order allow,deny
        Allow from all
        Options ExecCGI FollowSymLinks Includes
        AddType application/x-httpd-cgi .cgi .pl
        AddHandler image/gif .gif
        AddHandler image/jpg .jpg
        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
    </Directory>
    ErrorLog /var/www/server2/logs/error_log
    TransferLog /var/www/server2/logs/access_log
</VirtualHost>

暗号化は、以下のリンクを参考にしました。

https://rms.ne.jp/sslserver/https/use_certs/

SSLCertificateFile / SSLCertificateKeyFile / SSLCertificateChainFileはそれぞれのパスを入力します。

/etc/httpd/conf.d/virtualhost.conf
<VirtualHost *:443>
    SSLEngine on
    SSLProtocol all -SSLv2 -SSLv3
    SSLHonorCipherOrder ON
    SSLCipherSuite 暗号化

    SSLCertificateFile /etc/httpd/conf/ssl-DomainName/certificate.crt  # サーバ証明書パス
    SSLCertificateKeyFile /etc/pki/tls/private/domainName.pk # 秘密鍵パス
    SSLCertificateChainFile /etc/httpd/conf/ssl-DomainName/bundle.crt # 中間証明書パス

    DocumentRoot /var/www/domainName.co.jp/html
    ServerName domainName.co.jp
    ServerAlias www.domainName.co.jp
    ScriptAlias /cgi-bin/ /var/www/domainName.co.jp/cgi-bin/
    ErrorDocument 404 /404.html
    AddHandler text/html .html .htm .txt .css .js .svg .jpg .png .ico .gif
    <Directory "/var/www/domainName.co.jp">
       AllowOverride All
       Order allow,deny
       Allow from all
       AddType application/x-httpd-cgi .cgi .pl
       Options ExecCGI FollowSymLinks Includes
    </Directory>
</VirtualHost>

設定が完了したら、SSLの設定を有効にします。

/etc/httpd/conf.d/ssl.conf
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout 3600
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
SSLStrictSNIVHostCheck off

SSLProtocol -all +TLSv1.2 +TLSv1.3

SSLCipherSuite "ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-SHA ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES256-SHA384 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES128-SHA ECDHE-RSA-AES256-SHA ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES256-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256 EDH-RSA-DES-CBC3-SHA"
SSLProxyCipherSuite "ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-SHA ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES256-SHA384 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES128-SHA ECDHE-RSA-AES256-SHA ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES256-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256 EDH-RSA-DES-CBC3-SHA"

SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off

SSLUseStapling On
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache shmcb:/run/httpd/stapling_cache(128000)

Apacheを再起動します。

systemctl restart httpd.service

自動更新の設定

自動更新は、SSLストアにあるデジポットが入金されていることが前提になります。
毎月一回 定期cronを回して、証明書の更新を行います。入金されているタイミングで証明書が30日を超えると自動的に更新されます。

cronの設定

cronの設定は、以下のようにシェルスクリプトを実行する形にしました。
var/www/ssl/update-ssl.sh に配置しました。

autorenewコマンドでドメインの認証を行います。

/var/www/ssl/update-ssl.sh
#!/bin/bash

log=/var/www/ssl/log/$(date '+%Y%m%d-%H%M%S').log
exec &> >(awk '{print strftime("[%Y/%m/%d %H:%M:%S] "),$0 } { fflush() } ' >> $log)

/usr/bin/php /var/fujissl/sslstore-client-tool-0.0.2/bin/sslstore-client autorenew -c www.domainName.co.jp -f /var/fujissl/sslstore-client-tool-0.0.2/conf/domainName.conf

systemctl restart httpd.servic

実行権限を与えてcrontabに登録していきます。

chmod +x /var/www/ssl/update-ssl.sh

rootユーザでcrontabを設定します。

crotab -e

以下のように設定します。
自動更新は、毎日3時に実行するようにしています。

0 3 * * * /var/www/ssl/update-ssl.sh
  • ドメイン認証は1日一回のみ
  • autorenew コマンドを実行
  • サーバを再起動(1回目の発行するために再起動が必要)

処理の流れ

  1. 証明書の有効期限が30日を切ると、管理画面より証明書の更新作業を行うことができるようになります。
  2. デジポットで3ドメイン分の入金があることを確認すること(入金がない場合、エラーが届くため毎月3月入金額を確認すること(https://www.ssl-store.jp/system/service.php/dashbord)
  3. 認証には2回コマンドを呼び出す必要があります。
    1. 1日目の autorenew コマンドで 登録待ち / 審査中 / 発行中 → 発行待ちステータスになります(初回の場合は、regist
    2. 2日目の autorenew コマンドで発行待ちから 有効 ステータスにかわります

https://www.ssl-store.jp/system/service.php/docs/autorenew02

更新のセットアップドキュメントを確認して作業を進めます。

参考記事

https://www.ssl-store.jp/system/service.php/docs/autorenew02

まとめ

大まかな流れを書いていきました。
すでにCentOSで設定したファイルを見直しながら書きましたが、Rocky Linux 9.3 でも同じように設定できました。
証明書や中間証明書といった必要なファイルは、以前にrsyncで移行先に送る必要があります。

サーバ移行は遠い昔にやったことがありましたが、SSL関連の移行(購入しているSSL)は、始めての経験でした。
こちらでDNSを切り替えして、Apacheの設定が反映されていれば、証明書は更新されるはずです。

株式会社HAMWORKS
株式会社HAMWORKS

Discussion