見出し画像

【Linux】 ApacheサーバのSSL証明

SSL証明

SSL(Secure Socket Layer)プロトコルによる通信を行うために必要な証明書のこと。

SSL証明書は、サイトを運営するサーバーの正当性を証明するために使用され、SSL暗号化通信を行うための鍵のペアを保持している。

証明書は認証局(CA)から発行されるが、個人でも発行はできる。ただし、ブラウザ上には安全でないサイトとしてみなされるの注意が必要。
証明書には、ウェブサイトのドメイン名、有効期間、認証局の情報、鍵の公開部分などが含まれている。

実際にサーバに適用する大まかな手順は以下の通り。

  1. 必要なソフトウェアをインストール

  2. サーバー用秘密鍵を作成

  3. サーバ―用秘密鍵をもとに CSR を作成( 指定したサーバー情報とサーバーの公開鍵が含まれる)

  4. 公式のCA(認証局) に CSR を送り、証明書を発行してもらう

  5. Apacheに証明書と秘密鍵を組込む

作業ログ


設定例の解説

インストール

すでにされていれば必要はない

yum install openssl
yum install mod_ssl


# 確認
rpm -qa|grep openssl
rpm -qa|grep mod_ssl



秘密鍵の作成

ここでは、鍵の作成コマンドを打ったカレントディレクトリに鍵が配置されるので、配置したいところに事前に移動しておくか、作成するディレクトリを指定する必要がある。

作成先やファイル名を変えるのは、デフォルトで作成されるものよりセキュリティは高くなると言える。

cd /etc/pki/tls/certs/
openssl genrsa -out server.key 2048

# 作成するファイル先を変える場合
openssl genrsa -out 秘密鍵ファイルのパス


CSRファイルを作成する

CSR (Certificate Signing Request) ファイルは、SSL/TLSサーバ証明書の発行を要求するために使用されるファイル。
証明書に関する情報が含まれており、証明書発行元 (Certificate Authority, CA) に提供するものになる。

openssl req -new -key server.key -out server.csr
-------------------------------------------------------------
# 出力例
# Enterキーを押すことでデフォルト値を選択することができる。

Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Kanagawa
Locality Name (eg, city) [Default City]:Kawasaki
Organization Name (eg, company) [Default Company Ltd]:Example Inc.
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:admin@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

秘密鍵と同様に、作成先を指定することもできる。(-out以下)

openssl req -new -key mykey.key -out /path/to/mycsr.csr


証明書を発行する

セキュリティを担保するのであれば、サーバーで作成したCSRを認証局に提出して証明書の作成を依頼する。今回はテスト用なので自己署名をして証明書を作成。

認証局で作成するには、WebサイトからCSRをアップロードするか、EメールなどでCSRを送信する。認証局がCSRを受け取った後、認証局はサーバー証明書を発行し、証明書を含むZIPファイルなどの形式で返されるので、それをサーバーにインストールする。

openssl x509 -req -in server.csr -signkey server.key -days 3650 -out server.crt
-------------------------------------------------------------
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting Private key

# penSSLが証明書を検証し、署名が正当であることを確認
# Getting Private key は、OpenSSLがサーバー証明書に署名する秘密鍵を取得したことを示す
  • openssl: OpenSSLコマンドラインツールの呼び出しを開始。

  • x509: 証明書の操作を指定します。

  • -req: 証明書署名要求 (CSR) ファイルを指定。このCSRは、サーバー証明書を生成する。

  • -in server.csr: 生成する証明書に署名するためのCSRファイルのパスを指定。

  • -signkey server.key: 生成する証明書に署名するための秘密鍵ファイルのパスを指定。

  • -days 3650: 生成される証明書の有効期間を指定。この場合、10年間有効です。

  • -out server.crt: 生成される証明書のファイル名とパスを指定。この場合、"server.crt"というファイル名で保存。


Apacheの設定

mod_ssl をインストールすると /etc/httpd/conf.d/ssl.conf というファイルが作られるので、これにサーバー証明書と秘密鍵の場所を記載する。場所の指定はないが、最後尾に書くのが無難。

vi  /etc/httpd/conf.d/ssl.conf 
-------------------------------------------------------------
SSLCertificateFile /etc/httpd/ssl/example.com.crt  # サーバー証明書
SSLCertificateKeyFile /etc/httpd/ssl/example.com.key  # 秘密鍵

仮想ホストの場合

<VirtualHost *:443>
  ServerName example.com
  DocumentRoot /var/www/html
  SSLEngine on
  SSLCertificateFile /etc/httpd/ssl/example.com.crt
  SSLCertificateKeyFile /etc/httpd/ssl/example.com.key
</VirtualHost>
  • <VirtualHost *:443>: 設定が適用されるポート番号443番の仮想ホストを定義。

  • ServerName example.com: 仮想ホストにアクセスするために使用される正式なドメイン名を指定。

  • DocumentRoot /var/www/html: リクエストされたファイルが存在しない場合に、Apacheが参照するデフォルトのディレクトリを指定。

  • SSLEngine on: SSLエンジンを有効にし、この仮想ホストでSSLを使用することを指定。

  • SSLCertificateFile /etc/httpd/ssl/example.com.crt: サーバー証明書の場所を指定。

  • SSLCertificateKeyFile /etc/httpd/ssl/example.com.key: サーバー証明書に署名するための秘密鍵の場所を指定。


Apacheの再起動

systemctl restart httpd

再起動後、https://~にアクセスすると警告画面が出てくるので、SSLの設定ができていることになる。
アクセスできないときは、ファイアウォールなどの設定がされていないことがあるので、確認する。

よろしければサポートお願いします!よりいい情報を発信します。