Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

あらすじ

先輩に教えてもらったサーバ構築の備忘録、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 自己証明書を発行する手順

PAmatsuti
研修中はただひたすらコードを書き続けた。ゴリゴリコード系エンジニア(のつもり) 主に備忘録を書いていきます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away