前書き
このチュートリアルでは、SSL証明書で保護されたApacheサーバーのセットアップと構成について説明します。 チュートリアルの終わりまでに、HTTPSを介してサーバーにアクセスできるようになります。
SSLは、大きな整数を大きな素因数に分解する数学的な難しさに基づいています。 これを使用して、秘密鍵と公開鍵のペアを使用して情報を暗号化できます。 認証局は、このような保護された接続の信頼性を検証するSSL証明書を発行できます。同じ注意で、サードパーティのサポートなしで自己署名証明書を作成できます。
このチュートリアルでは、自己署名証明書を生成し、必要な構成を行い、結果をテストします。 自己署名証明書はテストには適していますが、ユーザーにブラウザーエラーが発生するため、本番環境にはお勧めしません。
代わりに有料の証明書を取得する場合は、https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority [このチュートリアル]。
前提条件
このチュートリアルを実行するには、次のものが必要です。
-
1つの新鮮なDebian 8ドロップレット
-
sudo非ルートユーザー。https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-8のステップ2と3に従ってセットアップできます[このチュートリアル]
-
OpenSSLがインストールおよび更新されました(デフォルトでインストールされます)
sudo apt-get update
sudo apt-get upgrade openssl
テスト目的で、OpenSSLがインストールされた2番目のコンピューターが必要な場合があります。
-
別のLinuxドロップレット
-
または、Unixベースのローカルシステム(Mac、Ubuntu、Debianなど)
ステップ1-Apacheのインストール
このステップでは、 `+ apt-get`と呼ばれる組み込みのパッケージインストーラーを使用します。 パッケージ管理を大幅に簡素化し、クリーンインストールを促進します。
他のLinuxディストリビューションとは異なり、Debian 8には `+ sudo `がインストールされていないため、前提条件で指定されたリンクでは、 ` apt-get `を更新して ` sudo +`パッケージをインストールする必要があります。
ApacheがHTTPSサーバーになります。 それをインストールするには、次を実行します。
sudo apt-get install apache2
ステップ2-SSLモジュールを有効にする
このセクションでは、サーバーでSSLを有効にします。
最初に、Apache SSLモジュールを有効にします。
sudo a2enmod ssl
デフォルトのApache Webサイトには、SSLを有効にするための便利なテンプレートが付属しているため、ここでデフォルトのWebサイトをアクティブにします。
sudo a2ensite default-ssl
Apacheを再起動して、これらの変更を有効にします。
sudo service apache2 reload
ステップ3-自己署名SSL証明書を作成する
まず、秘密鍵と証明書を保存できる新しいディレクトリを作成しましょう。
sudo mkdir /etc/apache2/ssl
次に、新しい証明書を要求して署名します。
まず、新しい証明書と秘密鍵を生成して保護します。
-
`+ days +`フラグは、証明書の有効期間を指定します。 この例では、証明書は1年間続きます
-
`+ keyout +`フラグは、生成されたキーへのパスを指定します
-
`+ out +`フラグは、生成された証明書へのパスを指定します
sudo openssl req -x509 -nodes -days -newkey rsa:2048 -keyout /etc/apache2/ssl/ -out /etc/apache2/ssl/
このコマンドを呼び出すと、一連のプロンプトが表示されます。
-
共通名:サーバーのIPアドレスまたはホスト名を指定します。 証明書はWebサイトのドメイン(またはIPアドレス)と一致する必要があるため、このフィールドは重要です
-
あなた自身の裁量で他のすべてのフィールドに記入してください。
以下に回答例を示します。
InteractiveYou 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]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
ファイルのアクセス許可を設定して、秘密キーと証明書を保護します。
sudo chmod 600 /etc/apache2/ssl/*
3桁の許可コードの詳細については、https://www.digitalocean.com/community/tutorials/linux-permissions-basics-and-how-to-use-umask-on-a-vpsのチュートリアルを参照してください[Linuxの許可]。
これで、証明書とそれを保護する秘密鍵がApacheで使用できるようになりました。
ステップ4-SSLを使用するためのApacheの構成
このセクションでは、SSLキーと証明書を使用するようにデフォルトのApache仮想ホストを構成します。 この変更を行った後、サーバーはデフォルトサイトのHTTPリクエストではなくHTTPSの提供を開始します。
`+ nano +`またはお好みのテキストエディターを使用してサーバー構成ファイルを開きます。
sudo nano /etc/apache2/sites-enabled/default-ssl.conf
`+ <VirtualHost default:443> +`で始まるセクションを見つけて、次の変更を行います。
-
「+ Server Admin」メール行のすぐ下に、サーバー名を含む行を追加します。 これは、ドメイン名またはIPアドレスにすることができます。
/ etc / apache2 / sites-enabled / default
ServerAdmin webmaster@localhost
ServerName :443
-
次の2行を見つけて、以前に生成した証明書とキーの場所に一致するようにパスを更新します。 証明書を購入したか、他の場所で証明書を生成した場合、ここのパスが証明書とキーの実際の場所と一致することを確認してください。
/ etc / apache2 / sites-enabled / default
SSLCertificateFile
SSLCertificateKeyFile
これらの変更が行われたら、仮想ホスト構成ファイルが次と一致することを確認します。
/ etc / apache2 / sites-enabled / default-ssl
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
ServerName
DocumentRoot /var/www/html
. . .
SSLEngine on
. . .
SSLCertificateFile
SSLCertificateKeyFile
ファイルを保存して終了します。
Apacheを再起動して、変更を適用します。
sudo service apache2 reload
一般的なApache仮想ホストの構成の詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts [この記事]。
ステップ5-SSLでApacheをテストする
このセクションでは、コマンドラインからSSL接続をテストします。
このテストは、(1)ローカルUnixベースのシステム、(2)別のドロップレット、または(3)同じドロップレットのいずれかから実行できます。 外部システムから実行する場合、サイトがパブリックインターネット経由で到達可能であることを確認します。
HTTPS 443ポートを介して接続を開きます。
openssl s_client -connect :443
出力の中央(キーの後)までスクロールすると、次のように表示されます。
Output--
SSL handshake has read 3999 bytes and written 444 bytes
--
. . .
SSL-Session:
. . .
もちろん、数字は可変ですが、これは成功です。 おめでとうございます。
終了するには、 `+ CTRL + C +`を押します。
URLにHTTPS( + https:// example.com +
)を使用して、Webブラウザーでサイトにアクセスすることもできます。 ブラウザは、証明書が自己署名されていることを警告します。 証明書を表示し、ステップ3で入力した内容と詳細が一致することを確認できるはずです。
結論
これでチュートリアルは終了し、SSL証明書で安全に設定された稼働中のApacheサーバーが残ります。 OpenSSLの操作の詳細については、https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs [OpenSSL Essentialsの記事]を参照してください。