オレオレ証明でSSL/TLS化した話

オレオレ証明とは

 SSL/TLSは公開鍵暗号を用いて共有鍵を交換し、通信を暗号化する方式であり、
重要な情報(たとえばクレジットカードなどの決済情報)をやり取りする場合や、個人サイトでもサイトの管理ページなどにアクセスする場合などに必要な情報通信技術だ
 またSSLは認証を受けた公開鍵証明書を利用することで成り済ましをある程度
(※WikipediaのTLSのページの「証明書の正当性」の項目に具体例が書かれているhttps://ja.wikipedia.org/wiki/Transport_Layer_Security 2022年9月11日閲覧)防止する機能もある

しかし個人のサイトで管理ページの通信を暗号化したいという程度の場合には、認証を受けた証明書である必要性がない
ので
認証を受けていない自己証明書、通称「オレオレ証明書」を用いて暗号化した(していた)話を書いていく

秘密鍵、証明書の作成

OpenSSLを用いて作成するので、あらかじめインストールが必要になる
以下コマンドと説明


 OpenSSLでAES256で鍵長2048のhogehoge.keyという秘密鍵を作成する
 hogehoge.keyは任意のファイル名

$ openssl genrsa -aes256 -out hogehoge.key 2048

 その後

Enter pass phrase for hogehoge.key:

 と聞かれるので4-1023文字までのパスフレーズを入力する

Verifying – Enter pass phrase for hogehoge.key:

 再度確認で聞かれるので同じパスフレーズを入力
 ここで入力したパスフレーズは重要な上に、後々頻繁に聞かれるので、しっかり決めたほうがいい


 次はCSRを作成する 内容はあんま気にしなくていい

$ openssl req -new -sha256 -key hogehoge.key -out hogehoge.csr

Enter pass phrase for hogehoge.key:

 さきほどのhogehoge.key作成時のパスフレーズを入れる
 すると国名やら組織名やら入力しろと言われる

Country Name (2 letter code) [AU]:JP ←国名
State or Province Name (full name) [Some-State]:Tokyo ←都道府県
Locality Name (eg, city) []:TwentyThree-ku ←市区町村
Organization Name (eg, company) [Internet Widgits Pty Ltd]: ←組織名
Organizational Unit Name (eg, section) []: ←部署名
Common Name (e.g. server FQDN or YOUR name) []: ←ドメイン名
Email Address []: ←メールアドレス

Please enter the following ‘extra’ attributes
to be sent with your certificate request

A challenge password []: ←任意 証明書破棄のパスワード 秘密鍵のパスフレーズとは異なる※ここ超重要 自分で調べて必要だと判断しない限りいらない
An optional company name []: ←組織名の略称

 全部Enterで空欄にしても問題ない


 最後にデジタル証明書ファイルを作成する
 x509はOpenSSLの証明書をいろいろできるユーティリティ
 この場合CSRファイルhogehoge.csrと秘密鍵ファイルhogehoge.keyで365日有効な
 hogehoge.crtの形式で作成するというコマンド
 daysは任意に変更できる

$ openssl x509 -in hogehoge.csr -out hogehoge.crt -days 365 -req -signkey hogehoge.key

 そうすると例によってtest.keyのパスフレーズを求められる

Enter pass phrase for test.key:

 パスフレーズを入力すれば、証明書ファイルが作成され、準備が終わる

OpenSSLコマンドの使い方は
公式ドキュメントを読んでみたり、英語がわからないときはググったりするといい
https://www.openssl.org/docs/

Apache、Nginxの設定

最後にApacheやNginxの設定ファイルを変更する

Apache

<VirutualHost *:443>
SSLEngine on
SSLCertificateFile /(ディレクトリパス)/hogehoge.crt
SSLCertificateKeyFile /(ディレクトリパス)/hogehoge.key
 以下略
</VirtualHost>

Nginx

server {
listen 443 ssl;
ssl_certificate /(ディレクトリパス)/hogehoge.crt;
ssl_certificate_key /(ディレクトリパス)/hogehoge_decrypt.key; ←この部分については後で説明
}

Nginxでの注意点

これでhttpdやnginxを再起動すればSSL化できる
Apacheの場合毎回Apacheの起動時にhogehoge.keyのパスフレーズを聞かれるという以外は、普通に起動しSSL化される

しかし
Nginxの場合はhogehoge.key(秘密鍵ファイル)が開けないというエラーを出す
こういう時は

$ openssl rsa -in hogehoge.key -out hogehoge_decrypt.key
 hogehoge.keyを復号してhogehoge_decrypt.keyというファイルで保存という意味

というコマンドで秘密鍵ファイルを復号し、設定ファイルでは、そのファイルを指定するといい

コメント

タイトルとURLをコピーしました