序章

このチュートリアルでは、SSL証明書で保護されたApacheサーバーのセットアップと構成について説明します。 チュートリアルが終了すると、HTTPS経由でサーバーにアクセスできるようになります。

SSLは、大きな整数をその大きな素因数に分解するという数学的難易度に基づいています。 これを使用すると、秘密鍵と公開鍵のペアを使用して情報を暗号化できます。 認証局は、このようなセキュリティで保護された接続の信頼性を検証するSSL証明書を発行できます。同様に、サードパーティのサポートなしで自己署名証明書を作成できます。

このチュートリアルでは、自己署名証明書を生成し、必要な構成を行い、結果をテストします。 自己署名証明書はテストには最適ですが、ユーザーにブラウザーエラーが発生するため、本番環境にはお勧めしません。

代わりに有料の証明書を取得したい場合は、このチュートリアルを参照してください。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • 1つの新しいDebian8ドロップレット
  • このチュートリアルのステップ2と3に従ってセットアップできるsudo非rootユーザー。
  • OpenSSLがインストールおよび更新されました(デフォルトでインストールする必要があります)
  1. sudo apt-get update
  2. sudo apt-get upgrade openssl

テスト目的で、OpenSSLがインストールされた2台目のコンピューターが必要になる場合があります。

  • 別のLinuxドロップレット
  • または、Unixベースのローカルシステム(Mac、Ubuntu、Debianなど)

ステップ1—Apacheをインストールします

このステップでは、apt-getと呼ばれる組み込みのパッケージインストーラーを使用します。 パッケージ管理を大幅に簡素化し、クリーンインストールを容易にします。

前提条件で指定されたリンクで、apt-getを更新し、sudoパッケージをインストールする必要があります。他のLinuxディストリビューションとは異なり、Debian8にはsudoがインストールされていません。

ApacheがHTTPSサーバーになります。 インストールするには、次のコマンドを実行します。

  1. sudo apt-get install apache2

ステップ2—SSLモジュールを有効にする

このセクションでは、サーバーでSSLを有効にします。

まず、ApacheSSLモジュールを有効にします。

  1. sudo a2enmod ssl

デフォルトのApacheWebサイトには、SSLを有効にするための便利なテンプレートが付属しているため、ここでデフォルトのWebサイトをアクティブ化します。

  1. sudo a2ensite default-ssl

Apacheを再起動して、これらの変更を有効にします。

  1. sudo service apache2 reload

ステップ3—自己署名SSL証明書を作成する

まず、秘密鍵と証明書を保存できる新しいディレクトリを作成しましょう。

  1. sudo mkdir /etc/apache2/ssl

次に、新しい証明書をリクエストして署名します。

まず、新しい証明書とそれを保護するための秘密鍵を生成します。

  • daysフラグは、証明書が有効であり続ける期間を指定します。 この例では、証明書は1年間有効です
  • keyoutフラグは、生成されたキーへのパスを指定します
  • outフラグは、生成された証明書へのパスを指定します
  1. sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

このコマンドを呼び出すと、一連のプロンプトが表示されます。

  • 共通名:サーバーのIPアドレスまたはホスト名を指定します。 証明書はWebサイトのドメイン(またはIPアドレス)と一致する必要があるため、このフィールドは重要です
  • 他のすべてのフィールドには、独自の裁量で入力してください。

回答例を以下のに示します。

Interactive
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) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:NYC Organization Name (eg, company) [Internet Widgits Pty Ltd]:DigitalOcean Organizational Unit Name (eg, section) []:SSL Certificate Test Common Name (e.g. server FQDN or YOUR name) []:example.com Email Address []:[email protected]

秘密鍵と証明書を保護するためのファイル権限を設定します。

  1. sudo chmod 600 /etc/apache2/ssl/*

3桁のアクセス許可コードの詳細については、Linuxアクセス許可のチュートリアルを参照してください。

これで、証明書とそれを保護する秘密鍵をApacheで使用できるようになりました。

ステップ4—SSLを使用するようにApacheを設定する

このセクションでは、SSLキーと証明書を使用するようにデフォルトのApache仮想ホストを構成します。 この変更を行うと、サーバーはデフォルトサイトのHTTPリクエストではなくHTTPSの提供を開始します。

nanoまたはお好みのテキストエディタを使用してサーバー構成ファイルを開きます。

  1. sudo nano /etc/apache2/sites-enabled/default-ssl.conf

<VirtualHost _default_:443>で始まるセクションを見つけて、次の変更を加えます。

  • ServerAdmin電子メール行のすぐ下にサーバー名の行を追加します。 これは、ドメイン名またはIPアドレスにすることができます。
/ etc / apache2 / sites-enabled / default
ServerAdmin [email protected]
ServerName example.com:443
  • 次の2行を見つけて、前に生成した証明書とキーの場所に一致するようにパスを更新します。 証明書を購入したか、他の場所で証明書を生成した場合は、ここのパスが証明書とキーの実際の場所と一致していることを確認してください。
/ etc / apache2 / sites-enabled / default
 SSLCertificateFile /etc/apache2/ssl/apache.crt
 SSLCertificateKeyFile /etc/apache2/ssl/apache.key

これらの変更が行われたら、仮想ホスト構成ファイルが以下と一致することを確認してください。

/ etc / apache2 / sites-enabled / default-ssl
<IfModule mod_ssl.c>
	<VirtualHost _default_:443>
		ServerAdmin [email protected]
		ServerName example.com:443
		DocumentRoot /var/www/html
		
		. . .
		SSLEngine on
		
		. . .
		
		SSLCertificateFile /etc/apache2/ssl/apache.crt
		SSLCertificateKeyFile /etc/apache2/ssl/apache.key

ファイルを保存して終了します。

Apacheを再起動して、変更を適用します。

  1. sudo service apache2 reload

一般的なApache仮想ホストの構成の詳細については、この記事を参照してください。

ステップ5—SSLを使用してApacheをテストする

このセクションでは、コマンドラインからSSL接続をテストします。

このテストは、(1)ローカルのUnixベースのシステム、(2)別のドロップレット、または(3)同じドロップレットのいずれかから実行できます。 外部システムから実行する場合は、パブリックインターネットを介してサイトにアクセスできることを確認します。

HTTPS443ポートを介して接続を開きます。

  1. openssl s_client -connect your_server_ip:443

出力の中央(キーの後)までスクロールすると、次のように表示されます。

Output
—- SSL handshake has read 3999 bytes and written 444 bytes —- . . . SSL-Session: . . .

もちろん、数字は可変ですが、これは成功です。 おめでとう!

CTRL+Cを押して終了します。

URL(https://example.com)でHTTPSを使用して、Webブラウザーでサイトにアクセスすることもできます。 ブラウザは、証明書が自己署名されていることを警告します。 証明書を表示して、詳細が手順3で入力したものと一致することを確認できるはずです。

結論

これでチュートリアルは終了です。SSL証明書で安全に構成されたApacheサーバーが機能します。 OpenSSLの操作の詳細については、OpenSSLEssentialsの記事を参照してください。