LoginSignup
0
0

More than 3 years have passed since last update.

キーマテリアル作成

Last updated at Posted at 2019-09-01

キーマテリアル作成

はじめに

ITで安全な通信を行うために,「秘密鍵」と「証明書」を組み合わせた「デジタル署名」が使われています。「証明書」の中に「署名」や「公開鍵」が含まれています。大まかには,次の流れでデータ送受信を行います。

  1. 送信者は秘密鍵を使ってデータを暗号化し,それに証明書を添付して,送信する。
  2. 受信者は証明書の中にある署名などを検証し,正当な送信者であるかどうかを確認してから,公開鍵を使ってデータを復号化する。なお,受信者は証明書を検証する際に,証明書の正当性や失効有無を証明局(CA)のrepositoryに問い合わせる。

ここでは,CentOS7でOpenSSLを使って,Hyperledger Fabric CA 1.3.0向けのキー・マテリアル(秘密鍵,CSR,証明書)を作成する方法を紹介します。

証明書発行の体制

  • 最上位のCAがルートCAであり,その下に多数の中間CAがある
    • ルートCAの一つとして,「Digital Signature Trust Co.」がある
  • 中間CAから,Webサーバ向けや,中間CA向けのサーバ証明書を発行する

関連用語

  • 証明局(CA = Certificate Authority)
    • 証明書を発行する機関
    • 最上位がルートCAであり,中間CAに移譲され,中間CAから証明書を発行することが多い
    • CAの他に,登録局(RA),リポジトリがあるが,ここではまとめてCAと表記
  • 証明書(Certificate)
    • CAの署名,サーバの署名,公開鍵などで構成されるファイル
    • 暗号化したデータを送信する時に,証明書を添付する
    • 同じ秘密鍵からは、同じ公開鍵を含むCSRが作られるので、一度,証明書を発行してもらったら,同じ秘密鍵から再度CSRを作らないこと
  • 秘密鍵(Private Key)
    • データを暗号化するために使う
  • 公開鍵(Public Key)
    • データを復号化するために使う
  • CSR
    • CAに証明書を発行してもらうために必要な署名要求(Certificate Signing Request)
    • CSRファイルには,公開鍵や運営者の情報(組織名や組織の所在地など)が含まれる
  • キー・マテリアル
    • 秘密鍵,CSR,証明書など,デジタル証明に必要なものをまとめて,キーマテリアルと呼ぶ
  • CRL
    • 証明書失効リスト
    • 秘密鍵が漏洩・失念された場合,CAに申請すれば失効リストに登録される

作業ディレクトリを作成

$ mkdir keys
$ cd keys

利用可能な曲線を確認

$ openssl ecparam  -list_curves

ECC秘密鍵を作成

$ openssl ecparam -name prime256v1 -genkey -out private.pem

秘密鍵が破損していないことの確認

$ openssl ecparam -check -noout -in private.pem

CSRを作成

$ openssl req -new -sha256 \
    -key private.pem \
    -out csr.pem \
    -subj "/C=JP/ST=Tokyo/L=Ota-ku/O=Example Company/OU=Example Service/CN=xxx.example.com"

CSR内容確認

$ openssl req -text -noout -in csr.pem

CA構築

ルートCAの環境を構築する。

$ sudo touch /etc/pki/CA/index.txt
$ sudo su
# sudo echo '1000' > /etc/pki/CA/serial
$ exit
$ openssl ecparam -name prime256v1 -genkey -out cakey.pem
$ openssl req -new -x509 -sha256 -extensions v3_ca \
    -key cakey.pem \
    -out cacert.pem \
    -days 1095 \
    -subj "/C=JP/ST=Tokyo/L=Bunkyo-ku/O=UTokyo/OU=ZTokyo CA/CN=ZTokyo CA"
$ sudo mv -f cakey.pem /etc/pki/CA/private/
$ sudo mv -f cacert.pem /etc/pki/CA/

CSRに署名し、証明書を作成(オレオレ署名)

openssl.cnfの設定項目」に説明があるが、/etc/pki/tls/openssl.cnfのpolicy_matchサブセクションは、デフォルトでcountryName、stateOrProvinceName、organizationNameの3つが「match」となっている。つまり、条件が厳しく、同じ国、同じ都市、同じ組織でなければ、証明書を発行できない。

policy_matchサブセクションだと証明書を発行できないので、「-policy policy_anything」オプションを指定して、緩い条件で証明書を発行する。

$ sudo openssl ca -extensions v3_ca -policy policy_anything \
    -in csr.pem \
    -out cert.pem
$ sudo chown $USER:$USER cert.pem

find /etc/pki/CA/ | sed -e "s/[^-][^\/]*\// |/g" -e "s/|([^ ])/|-\1/"

証明書の内容を確認

$ openssl x509 -text -noout -in cert.pem

公開鍵のモジュラスを確認

  • ECDSAなら「Wrong Algorithm type」が出力される
$ openssl x509 -modulus -noout -in csr.pem
Modulus=Wrong Algorithm type

あとで勉強すること

0
0
0

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
0