社内システムをつくろう!

社内システムをつくろう!

あるシステム担当のブログ。本サイトのご利用は自己責任にてお願い致します。

つくって学ぶ、サーバ証明書(SHA1・SHA2・CSR・自己証明書)について

サーバ証明書は、Webシステムを作る上で必須の知識だが、ちゃんと理解してる人は意外と少ない。

今回は、そんなサーバ証明書について検証を通して学ぼう。

 

検証環境

AWS上のEC2インスタンス。

AmazonLinux+Apache+mod_ssl+OpenSSL

 

EC2インスタンスを作ったら、予めApacheとmod_sslとOpenSSLをインストールしておこう。

# yum install httpd mod_ssl openssl

 

サーバ証明書の作成手順

サーバ証明書を実際に作ってみよう。手順としては、次のような流れとなる。

  1. 秘密鍵の生成
  2. 公開鍵の生成。公開鍵を使ってCSR(証明書作成要求)の作成。
  3. CSRをCA(認証局)に提示して、サーバ証明書を発行してもらう。

それでは早速作ってみよう。

 

1.秘密鍵の生成

# openssl genrsa 2048 > server_sec.key

このコマンドで秘密鍵(server_sec.keyとした)を生成する。生成した秘密鍵の中身は、このコマンドで確認することができる。

# openssl rsa -text < server_sec.key

 

2.公開鍵の生成。公開鍵を使ってCSR(証明書作成要求)の作成

CSRは公開鍵と作成時に入力する項目から作成される。そのため、まずは秘密鍵から公開鍵を作成する必要がある(この秘密鍵と公開鍵のことをキーペアと呼ぶ)。

しかし実際には、下記コマンド1行で、

  • 秘密鍵から公開鍵の作成
  • 公開鍵からCSRの作成

を実施することが可能だ。

# openssl req -new -key server.key > server.csr

 

3.CSRをCA(認証局)に提示して、サーバ証明書を発行してもらう

あとは、このCSRを認証局に提示して、サーバ証明書を発行してもらえば、サーバ証明書の完成だ。

おそらく認証局のWebサイトでCSRをコピペするような手順になるだろう。

 

ところで、認証局はCSRを受領してからどのような操作を実施しているのだろうか?

その前にサーバ証明書とは何か?について学習しておく必要がある。

 

サーバ証明書とはなにか? 

サーバ証明書について書く前に、「署名」について書こうと思う。

署名とは、受領したCSRから算出したハッシュ値を、認証局の秘密鍵で暗号化したものだ。このときに使われるハッシュ関数がSHA-1、SHA-2などになる(ハッシュ値の算出には、ハッシュ関数が必要だ)。 

そしてサーバ証明書とは、CSRに認証局の署名をつけたもののことを言う。

 

グローバルサインでは、提出されたCSRに認証機関としての署名をして、サーバ証明書を発行します。

参照:[FAQ] CSRについて教えてください。 | SSL・電子証明書ならGMOグローバルサイン

 

つまり認証局は、CSRを受領してから認証局の秘密鍵を使って、CSRに署名を付与する作業を実施しているのだ。

 

自己証明書とは?

ちなみに自己証明書とは、CAによる署名(秘密鍵による暗号化)ではなく、自身の秘密鍵で署名をしたサーバ証明書のこと。

先程の環境におけるコマンドはこちら。

# openssl x509 -req -signkey server.key < server.csr > server.crt

 

自己証明書を利用してWebサーバにhttpsでアクセスしてみよう

さて、作成した自己証明書をWebサーバにセットして、クライアントからhttpsでアクセスしてみよう。

 

ApacheのConfigを編集して、SSLのアクセスを受けられるようにする。

# cd /etc/httpd/conf

# vi + httpd.conf

<最下行に下記を追加>

--------------------------

<VirtualHost _default_:443>

SSLEngine on

SSLCertificateFile /etc/httpd/server.crt

SSLCertificateKeyFile /etc/httpd/server.key

</VirtualHost>

-------------------------- 

 

編集が終わったら、Apacheを再起動する。

# service httpd restart

 

これでSSLの通信が受けられるようになっているはずだ。ブラウザからhttpsでアクセスしてみよう。すると、こんな画面が出る。

f:id:Lync:20170304005243j:plain

今回、この画面が出ている理由は「自己証明書」を利用しているからだ。

 

パブリック認証局から発行された証明書を利用して、正しいFQDNでアクセスすれば、この警告は表示されない。 

 

SHA-1、SHA-2とは?

ちなみに最近良く言われる『SHA-1』『SHA-2』とは、署名のときに利用されるハッシュ関数のこと。

 

(先に書いたが、CSRからハッシュ値を算出して、そのハッシュ値に対して、認証局の秘密鍵で暗号化するのが、『署名』だ。)

 

SHA-2にはSHA-224、SHA-256、SHA-384、SHA-512の4つのバリエーションがあり、末尾の数字がハッシュ値のビット長を表している。最長であるSHA-512が最も安全性が高いが、一般的にはSHA-256が最もよく利用されています。

 

参考サイト: