LoginSignup
0
1

More than 1 year has passed since last update.

【Nginx】自己署名証明書を使ってHTTPSでNginxWebサーバにアクセスしてみる【OpenSSL】

Last updated at Posted at 2021-12-28

自己署名証明書を使ってHTTPSでNginxWebサーバにアクセスしてみる

なぜか仕事でオレオレ証明書を作って適用させないといけなくなったので、
手順メモがてらに

1. Nginx準備

nginx インストール

# dnf install -y nginx

証明書用ディレクトリ作成

# mkdir /etc/nginx/ssl
# cd /etc/nginx/ssl

2. SSL証明書準備

SSL 秘密鍵(.key)作成

# openssl genrsa 2048 > server.key

証明書署名要求(.csr)作成

※CSR : Certificate Signing Request

# openssl req -new -key server.key -out /etc/nginx/tls/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]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:                
Email Address []:sbtkzks@gamil.com

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

テキトーに入力します。
全部空でもたぶん大丈夫

(オレオレ)証明書(.crt)作成

# openssl x509 -days 3650 -req -signkey server.key -in server.csr -out server.crt

Nginxでは server.key と server.crt を設定ファイルに読み込ませることになります。

3. 再びNginx設定

# vi /etc/nginx/conf.d/ssl.conf

server {
    listen 443 ssl;

    ssl_certificate             /etc/nginx/ssl/server.crt;
    ssl_certificate_key         /etc/nginx/ssl/server.key;
}
  • 設定反映
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# nginx -s reload

4. サーバにアクセスしてみる

https://[serverのIPアドレス]
にアクセス!

webpage.png↑自己証明書なので安全じゃないといわれますが、仕方なし

mukou.png
↑アドレスバーのびっくりマークをクリック
証明書が無効といわれてますね

cert.png
↑詳細をクリック
伏せちゃってますが、発行者と発行先が同じ(=自分で署名してる)で、有効期限も先ほど設定した3650日になってます
SSLの適用自体はできているといっていいでしょう

nginx_default.png
↑「詳細設定」から無理やりアクセスを試みます
Nginxデフォルトのページが出たので一応OK

これにて確認完了です

5. 軽く整理

クライアントがサーバにアクセスする際、つまり、ブラウザで特定のWebページにアクセスしようとするとき、
クライアントがアクセスしようとしているページと、実際のアクセス先のページが一致している必要がありますよね

例えば、Amazonで買い物しようとしてAmazonのページ開いたら、それはAmazonが提供するAmazonのEcサイトでないといけないわけですね

何を当たり前のことを って感じがしますが、
これがもしかすると、Amazonにそっくり似せて作られたフィッシングサイトである可能性もあるわけですね

そんなとき、このWebページ(を提供するサーバ)が、本当にそのページの管理者が提供しているものですよと証明するのがサーバ証明書ですね

ではどうやって証明書が正しいかを検証するのかというと、
ブラウザにインストールされているroot証明書の中にアクセス先のサーバの証明書発行者が入っている必要があります

root証明書というのは基本的にPCやスマホの生産時にすでにインストールされた状態で販売されているようです

認証局はこのroot証明書に含まれています
適当にいろんなページで証明書詳細ページを見てみると、
いろいろな証明書認証局が確認できます。(DigiCert , Rapid SSL, Amazon,,,)
上記の証明書詳細画面で、発行者が認証局です

今回オレオレ発行したので、発行者がopensslコマンドを実行したサーバのホスト名になってるかと思います。
もちろん、自分のサーバがroot認証局リストに含まれているはずもなく
このサイトが安全ではないと認識されたわけですね

6. 次のステップ

Let's Encrypt の Certbot は無料でサーバ証明書を発行してくれます
自動更新の手順なども調べたらいくらでも出てくるので
そのうちやってみようと思います

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1