Posted at

CentOSあるいはEC2のapacheでSSL 自己証明書を発行する(https)


あらすじ

先輩に教えてもらったサーバ構築の備忘録、SSLを発行し443ポートで見れるようにする。


OpenSSL

暗号鍵の作成に使うライブラリです。


mod_ssl

Apache httpd で HTTPS での接続を実現するために使うモジュールです。


インストール

インストールしていきましょう、以降のターミナルの記述はrootユーザーでなければ頭にsudo を付けましょう

$ yum -y install mod_ssl

#インストールが完了すると /etc/httpd/conf.d/ssl.conf に mod_ssl の設定ファイルが作成されます。

#(CentOSのみ)
$ yum -y install openssl


秘密鍵・SSL証明書の作成

ec2の場合の作成場所は ~ です。本当は格納先で作りたかったのですが、sudoにしてもダメだったのであとでmvで引っ越します。

まずは、server.key という名前の秘密鍵が記載されたファイルを作ります。

[ec2-user@ip ~]$ openssl genrsa 2024 > server.key

Generating RSA private key, 2024 bit long modulus
............................+++
...............................................................................+++

次に証明書署名要求を作成します。


証明書署名要求は、認証局にサーバの公開鍵に電子署名してもらうよう要求するメッセージです。


[ec2-user@ip ~]$ openssl req -new -key server.key > server.csr

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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Oota-ku
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []test.net
Email Address []:

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

これでserver.csr というファイルが作成されました。


サーバ証明書の作成

最後に本稿の成果物であるサーバ証明書を作成します。


普通であれば上で作成した証明書署名要求 (server.csr) を VeriSign などの機関に送付して認証局の秘密鍵で署名してもらいますが、今回は自分で署名することでサーバ証明書を作成しますので、上で作成した自分の秘密鍵 (server.key) で署名します。


[ec2-user@ip ~]$ openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt

Signature ok
subject=/C=JP/ST=Tokyo/L=Oota-ku/O=test/CN=test.net
Getting Private key

これで三つのファイルができました。

[ec2-user@ip ~]$ ls

server.crt server.csr server.key

次にOpenSSLでつくられるファイルの格納先を作り,移動させましょう。

[ec2-user@ip ~]$ mkdir /etc/httpd/conf/ssl

[ec2-user@ip ~]$ mv server.crt /etc/httpd/conf/ssl
[ec2-user@ip ~]$ mv server.csr /etc/httpd/conf/ssl
[ec2-user@ip ~]$ mv server.key /etc/httpd/conf/ssl
[ec2-user@ip ~]$ ls /etc/httpd/conf/ssl
server.crt server.csr server.key

次にmod_ssl の設定ファイルを編集しましょう。

[ec2-user@ip ~]$ cd /etc/httpd/conf.d/

#設定ファイルのバックアップ(.orgを付けてファイル複製)
[ec2-user@ip conf.d]$ cp ssl.conf ssl.conf.org

[ec2-user@ip conf.d]$ vim ssl.conf

#100行目にあるSSLCertificateFileを修正
SSLCertificateFile /etc/httpd/conf/ssl/server.crt
#107行目にあるSSLCertificateKeyFileを修正
SSLCertificateKeyFile /etc/httpd/conf/ssl/server.key

#保存したら再起動
[ec2-user@ip conf.d]$ sudo systemctl restart httpd

再起動がうまくいけばhttps(443番ポート)で入れるようになったはずです。URLをhttps://に変えて入ってみましょう!もしうまくいかなければポートが解放されてるか確認してください。

ff9e446a8ebd737906b0f779f630fa83.png

こう変わっていれば成功です!個人で作った証明書なのでこんな表示になるわけですね。

詳細ボタンを押してアクセスするを選択して、httpの時と変わらないものが表示されればOKです!

これでhttpsが使えるようになりました!次はリバースプロキシというものを導入してみようかと思います。ではまた。


参考文献

OpenSSL で SSL 自己証明書を発行する手順