こうこく
作 ▸
改 ▸

OpenSSLとかのメモ

自分用

もくじ

そもそもSSL通信って何

共通鍵暗号って

暗号化と復号化に同じ鍵を使う。二人だけの共通鍵を作って使う感じ。『AED』はこれの暗号化方式の一種。

相手ごとに鍵をいちいち作る必要があるけど、処理が速い。

ただ、鍵の受け渡し自体を盗聴されたらアウト。

公開鍵暗号って

暗号化と復号化に別の鍵を使う。暗号化は公開鍵で、復号は秘密鍵で行う。『RSA』はこれの暗号化方式の一種。

  1. 受信側で公開鍵と秘密鍵を生成する。
  2. 受信側から送信側に公開鍵を送る。
  3. 送信側は、公開鍵で送信内容を暗号化して送る。

安全だけど処理が遅いらしい。

SSL通信って

SSL通信では、最初だけ公開鍵暗号を、それ以降は共通鍵暗号を使ってやりとりすることで、二つのいいとこどりをしている。

  1. クライアントからサーバーに接続要求する。
  2. サーバーはクライアントに公開鍵つきの証明書を送る。
  3. クライアントはブラウザのルート証明書を使って、サーバーから送られてきた証明書が本物かどうか確認する。
  4. クライアントは共通鍵を作って、公開鍵で共通鍵を暗号化して、サーバーに送る。
  5. サーバーは送られてきたものを秘密鍵で復号して、共通鍵を手に入れる。
  6. あとは共通鍵で通信する。

電子署名って何

前提として

  • 公開鍵と秘密鍵は同じ構造なので、どちらを使っても暗号化はできる。
  • 公開鍵で暗号化した文章は、秘密鍵で復号化できる。
  • 秘密鍵で暗号化した文章は、公開鍵で復号できる。

つまり、ある公開鍵で復号できる暗号文を作れる人は、対応する秘密鍵を持ってることになる。

これにより、少なくとも (公開鍵が本物かどうかはともかく) その文章を作ったのが秘密鍵の持ち主であることが判る。

ただのメモ

  • PEM、DERは鍵のフォーマットの名前。何の鍵かということではない。
  • RSAでは秘密鍵から公開鍵を作れるので、間違えて相手に秘密鍵を渡しちゃうと危険。
  • CSRを作るとき、色々聞かれる。Chromeにインポートするとかなら、CommonNameはちゃんと書いた方がいい。
  • Chromeにオレオレ証明書取り込むときは、証明書の管理→インポート→証明書ストアに『信頼されたルート証明機関』を選ぶ。

オレオレ証明書の作り方

# パスなしの秘密鍵を作る
openssl genrsa 2048 > private_key.pem

# 秘密鍵から、公開鍵を含むCSRを作る
openssl req -new -key private_key.pem > server.csr

# 公開鍵を含むCSRに自分の秘密鍵で署名して、証明書を作る (有効期限10年)
openssl x509 -days 3650 -req -signkey private_key.pem < server.csr > server.crt

Chrome対応のオレオレ証明書の作り方

SANがいるらしい

爆速でChrome対応オレオレ証明書を作成する - 動かざることバグの如し

openssl genrsa 2048 > private_key.pem
openssl req -new -key private_key.pem > server.csr
echo subjectAltName=DNS:*.hoge.piyo > san.ext
openssl x509 -days 3650 -req -signkey private_key.pem < server.csr > server.crt -extfile san.ext

このあと、DER形式に変換しないと取り込めない。変換方法は次項。

openssl コマンドメモ

# パスなし秘密鍵作成
openssl genrsa 2048 > private_key.pem

# パスあり秘密鍵作成
openssl genrsa 2048 -des3 -sha256 > private_key.pem

# 秘密鍵の内容確認
openssl rsa -text < private_key.pem

# 鍵をパスフレーズで暗号化する (3DES)
openssl genrsa -aes128 -out key.pem 1024

# 鍵のパスを解く
openssl rsa < key.pem > key.pem

# PEM→DER
openssl x509 < key.pem -inform PEM > key.der -outform DER

# DER→PEM
openssl x509 < key.der -inform DER > key.pem -outform PEM

参考記事

共通鍵暗号と公開鍵暗号の違い | 基礎から学ぶSSL入門ガイド | CSP SSL

電子署名の基礎知識|電子認証局会議

SSLサーバー証明書 : 証明書ファイルの種類とopensslでの変換方法 | DigiCert

この記事に何かあればこちらまで (非公開)