こんにちは!
SSLについて学んだり、Linux環境で触ったりしたのでここでアウトプットしていきます!
SSLとは
インターネットが発展する前、コンピュータ同士は暗号化されていない通信でデータをやり取りしていました。しかし、情報がそのまま送信されるため、盗聴や改ざんのリスクがありました。そこで、「通信を暗号化する仕組み」としてSSL(現在はTLS)が誕生しました。
例えば、オンラインショッピングでクレジットカード情報を入力するとき、SSLがないとその情報がそのまま送信されてしまい、第三者に盗み見られる可能性があります。しかし、SSLを使うことでデータが暗号化され、安全に送信されるため、悪意のある攻撃者が途中で盗み見ても解読できません。
SSL証明書を取得するまでの流れ
1. 秘密鍵(Private Key)の作成
まず、公開鍵暗号方式 に基づいて秘密鍵を作成します。
秘密鍵はサーバー内に厳重に保管し、外部に漏らしてはいけません。
2. CSR(証明書署名要求)の作成
次に、SSL証明書を取得するためのCSR(Certificate Signing Request) を作成します。
CSRには、公開鍵・ドメイン名・組織情報 などが含まれます。
3. CSRを認証局(CA)に提出し、証明書を発行
作成したCSRを認証局(CA: Certificate Authority) に送信し、SSL証明書を発行してもらいます。
4. サーバーにSSL証明書をインストール
CAから発行されたSSL証明書(.crtファイル)をサーバーに配置し、秘密鍵と組み合わせます。
設定後にアクセスし、鍵マーク(🔒)が表示されれば成功!
実際にLinuxに試してみる
では、SSLを実際にローカル環境で試していきたいと思います。
今回はお金をかけたくないので、認証局(CA)を通さずに、自分で作成したSSL証明書(オレオレ証明書)で試していきます。
前提条件
- Ubuntuサーバーが動作している
- Apache(Webサーバー)がインストールされている
- サーバーのIPアドレスは
192.168.~.~
- DNSが稼働しており、
keita.server
という名前で解決できる
(参考:https://qiita.com/keitakei777/items/54aaf042bb69fe492fd3)
1. 証明書と鍵ファイルを作成
まず、自己証明書(オレオレ証明書)と鍵の作成を行います。
以下のコマンドを実行します。
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/keita.server.key \
-out /etc/ssl/certs/keita.server.crt
実行時に以下の情報を入力します。
Country Name (2 letter code) [AU]: JP
State or Province Name (full name) [Some-State]: Tokyo
Locality Name (eg, city) []: Adachi
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Keita Corp
Organizational Unit Name (eg, section) []: IT Department
Common Name (e.g. server FQDN or YOUR name) []: keita.server
Email Address []: webmaster@keita.server
これにより、以下のファイルが作成されます。
/etc/ssl/certs/keita.server.crt
/etc/ssl/private/keita.server.key
2. Apacheに設定を適用
Apacheの仮想ホスト設定ファイルを作成します。
sudo nano /etc/apache2/sites-available/keita.server.conf
以下の内容を記述します。
<VirtualHost *:443>
ServerName keita.server
ServerAlias www.keita.server
DocumentRoot /var/www/html
<Directory /var/www/keita>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/keita_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/keita_ssl_access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/keita.server.crt
SSLCertificateKeyFile /etc/ssl/private/keita.server.key
</VirtualHost>
次に、設定を有効化します。
sudo a2ensite keita.server.conf
sudo systemctl reload apache2
3. ブラウザで確認
HTTPSでのアクセスをPCの hosts
ファイルに以下のエントリを追加して行います。
192.168.~.~ keita.server
その後、ブラウザで以下のURLにアクセスします。
https://keita.server/
セキュリティ警告が表示されるかもしれませんが、証明書情報を確認し、HTTPSでアクセスできていれば成功です。
まとめ
こんな感じでSSLの証明書について調べたり触ってみたりしました!
今回詳細した方法は ローカル環境限定 で有効な設定です。セキュリティ的対策はしていないので、ローカル開発環境のテストとして活用してください!