ヘルプ:Webサーバー間通信内容暗号化 (自己署名)(AlmaLinux)

提供:あわ自由帳

メインページ > Help:目次 > Help:自宅サーバー構築(AlmaLinux)  > Webサーバー間通信内容暗号化 (自己署名)(AlmaLinux)

  • 公開するサーバーに使わないでください。ブラウザから警告が出ます。
  • リバースプロキシのバックエンド、Webサーバーで使っています。

SSL 証明書を作成する (自己署名)

秘密キーの生成

[root@host4 ~]# cd /etc/pki/tls/certs

[root@host4 certs]# openssl genrsa -aes128 2048 > ssl-sudachi.xyz.key
Generating RSA private key, 2048 bit long modulus (2 primes)
...........................+++++
......................................+++++
e is 65537 (0x010001)
Enter pass phrase: ← 任意のパスワードを入力※表示はされない
Verifying - Enter pass phrase:   ← 任意のパスワードを再入力※表示はされない

Webサーバー起動時にパスワードを要求されないようにするためサーバー用秘密鍵からパスワード削除。

[root@host2 ~]# openssl rsa -in ssl-sudachi.xyz.key -out ssl-sudachi.xyz.key
Enter pass phrase for server.key:  ← サーバー用秘密鍵・証明書作成時のパスワード応答※表示はされない
writing RSA key

このようにすることで、SSL サーバー証明書に必要な秘密鍵を "ssl-sudachi.xyz.key" として生成することができました。秘密鍵が生成できたら、それを用いて CSR ファイルを生成します。

CSRファイルを生成

秘密鍵が生成できたら、それを用いて CSR ファイルを生成します。

※入力には以下の点にご注意ください。

半角の英数字64文字以内で入力してください 識別名に、以下の文字 は使用できません ! ” # $ % & ( ) * + / ; < > ? @ [ ¥ ] ^ _ ` { | } ~ 「&」が含まれる場合は、半角英字の and 等に置き換えてください スペースのみの入力は控えてください。 スペースのみの入力項目がある場合、 証明書が発行されません。

[root@host4  certs]#  openssl req -utf8 -new -key ssl-sudachi.xyz.key -out ssl-sudachi.xyz.csr
フィールド 説明
Country Name (2 letter code) 国を示す2文字のISO略語 JP
State or Province Name (full name) 組織が置かれている都道府県 Tokushima
Locality Name (eg, city) [Default City] 組織が置かれている市区町村 Tokushima-shi
Organization Name (eg, company) 組織の名称(個人の場合はドメインの登録者名) sudachi.xyz
Organizational Unit Name (eg, section) 組織の部門名(入力しなくても良い) System
Common Name Webサーバーのコモンネイム sudachi.xyz
Email Address 管理者アドレス xxxx@sudachi.xyz
A challenge password 入力不要
An optional company name 入力不要

これで、先ほど作成した秘密鍵に対応した CSR ファイル "ssl-sudachi.xyz.csr" の生成できました。これをもって、SSL サーバー証明書の取得を行う運びとなります。

有効期限が 10年の自己署名証明書を作成

[root@host4 certs]# openssl x509 -in ssl-sudachi.xyz.csr -out ssl-sudachi.xyz.crt -req -signkey ssl-sudachi.xyz.key -day
s 3650
Signature ok
subject=C = JP, ST = Tokushima, L = Tokushima-shi, O = sudachi.xyz, OU = System, CN = sudachi.xyz, emailAddress = sysop@sudachi.xyz
Getting Private key

[root@host4  certs]# ll ssl-sudachi.*
-rw-r--r--  1 root root 1350  4月 15 19:27 ssl-sudachi.xyz.crt
-rw-r--r--  1 root root 1070  4月 15 19:25 ssl-sudachi.xyz.csr
-rw-r--r--  1 root root 1675  4月 15 19:22 ssl-sudachi.xyz.key

パーミッション変更

安全のため所有者以外が読み書きできなくする。

[root@host2  certs]# cd

[root@host4 ~]# chmod 600 /etc/pki/tls/certs/ssl-sudachi.xyz*

暗号化通信用バーチャルホスト設定

追加ホスト用バーチャルホスト設定

ファイル編集

[root@host4 ~]# vi /etc/httpd/conf.d/virtualhost-sudachi.xyz.conf
## 修正:2020-04-15
<VirtualHost *:80>
    ServerName sudachi.xyz ← サーバー名を指定
    DocumentRoot /var/www/html/sudachi.xyz ← ドキュメントルートを指定
    ErrorLog logs/sudachi.xyz-error_log ← エラーログファイル名を指定
    CustomLog logs/sudachi.xyz-access_log combined env=!no_log ← アクセスログファイル名を指定

    Alias /awstatsreport /var/www/html/sudachi.xyz/awstatsreport
    <Location "/awstatsreport">
        Require all denied
        Require ip 127.0.0.1
        Require ip 192.168.1.0/24
    </Location>
</VirtualHost>

<VirtualHost *:443>
    Protocols h2 http/1.1
    ServerName sudachi.xyz:443 ← サーバー名を指定
    DocumentRoot "/var/www/html/sudachi.xyz" ← ドキュメントルートを指定
    ErrorLog logs/sudachi.xyz-error_log ← SSLエラーログファイル名を指定
    CustomLog logs/sudachi.xyz-access_log combined env=!no_log ← SSLアクセスログファイル名を指定

    Alias /awstatsreport /var/www/html/sudachi.xyz/awstatsreport
    <Location "/awstatsreport">
        Require all denied
        Require ip 127.0.0.1
        Require ip 192.168.1.0/24
    </Location>

    #   SSL Engine Switch:
    SSLEngine on

    ## SSL Protocol support:
    # SSLv2, SSLv3, TLSv1, TLSv1.1 を無効化する
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

    ## SSL Cipher Suite:
    SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

    ## Speed-optimized SSL Cipher configuration:
    SSLHonorCipherOrder on
    SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

    ## Server Certificate:
    SSLCertificateFile /etc/pki/tls/certs/ssl-sudachi.xyz.crt ← 追加ホスト用公開鍵を指定

    ## Server Private Key:
    SSLCertificateKeyFile /etc/pki/tls/certs/ssl-sudachi.xyz.key ← 追加ホスト用秘密鍵を指定

    ## Server Certificate Chain:
    #SSLCertificateChainFile /etc/pki/tls/certs/ssl-sudachi.xyz-chain.crt

    ## SSL Protocol Adjustments:
    BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

    Header always set Strict-Transport-Security "max-age=15768000"
</VirtualHost>

「httpd.conf」の文法チェック

[root@host4 ~]# apachectl configtest
Syntax OK

Webサーバー再起動

[root@host4 ~]# systemctl restart httpd

動作確認

[root@host4 ~]# systemctl status httpd
 httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running)  since 土 2017-05-06 13:45:58 JST; 46s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 29305 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
 Main PID: 29311 (httpd)
   Status: "Total requests: 9; Current requests/sec: 0.111; Current traffic: 1.3KB/sec"
   CGroup: /system.slice/httpd.service
           ├─29311 /usr/sbin/httpd -DFOREGROUND
           ├─29312 /usr/sbin/httpd -DFOREGROUND
           ├─29313 /usr/sbin/httpd -DFOREGROUND
           ├─29314 /usr/sbin/httpd -DFOREGROUND
           ├─29315 /usr/sbin/httpd -DFOREGROUND
           ├─29316 /usr/sbin/httpd -DFOREGROUND
           ├─29317 /usr/sbin/httpd -DFOREGROUND
           ├─29318 /usr/sbin/httpd -DFOREGROUND
           ├─29322 /usr/sbin/httpd -DFOREGROUND
           ├─29323 /usr/sbin/httpd -DFOREGROUND
           └─29324 /usr/sbin/httpd -DFOREGROUND

 5月 06 13:45:57 host3.sudachi.jp systemd[1]: Starting The Apache HTTP Server...
 5月 06 13:45:58 host3.sudachi.jp systemd[1]: Started The Apache HTTP Server.