OpenSSL
鍵とか作れるコマンド
新しい系のサブコマンド
PKCS #8 RFC 5958? 形式で 秘密鍵、公開鍵を別々に生成する。公開鍵生成用の情報は秘密鍵(ファイル)に含まれていることが多い。 openssl genrsa はRSAしか作れないのでそろそろやめよう
証明書署名要求とテスト用の自己署名系の証明書などを作ってみる
説明用拡張子例 (自由に決めていいが一般的にはTEXT形式が .pem , バイナリが.der など)
秘密鍵 .key
公開鍵 .pub (鍵のみ、名前、期限などが入っていない、署名されていないもの)
証明書 .crt
署名要求 .csr
鍵作成
$ openssl genrsa 2048 > rsa.key
openssl pkey 秘密鍵操作系
openssl pkey -in 秘密鍵 -out 出力
旧形式に変換 -traditional
公開鍵(鍵のみ)出力 -pubout 保存は-outも指定 自己署名など用
テキスト内容出力 -text
公開鍵テキスト内容出力 -text_pub
BASE64表示なし? -noout
openssl pkey -in private.key -text
旧? RSA
ECDSA
EdDSA なし
証明書署名要求の作成 req
個人、または組織の情報を用意する CN以外は省略できる場合もある
C Country Name 国 JP
ST State or Province Name (full name) 州/都道府県 Tokyo
L Locality Name (eg, city) 市区町村 Suginami-Ku
STREET
O Organization Name (eg, company) 組織名 Siisise Net
OU Organizational Unit Name (eg, section) 部署名
CN Common Name (e.g. server FQDN or YOUR name) コモンネーム 名前 Siisise root CA または サーバの場合は FQDN siisise.net
emailAddress メールアドレス
オプション
-new 新規証明書署名要求の作成
-key 秘密鍵.key
-passin 鍵パスフレーズ
-out 証明書署名要求.csr 省略時は標準出力など
-subj CからCN,emailAddressの順に並べる CN以外省略可
-x509 自己署名証明書を生成する
-days 有効期限日数
-sha256 署名ハッシュが指定できる場合(RSA, ECDSAなど? EdDSAは不要?)
-newkey 鍵種 rsa ec ed25519 鍵も作成
-keyout 鍵出力.key
-passout pass:password 鍵パスワード
既存鍵を使う場合
-key 秘密鍵 -passin pass:password
openssl req -new -key 秘密鍵.key -passin pass:鍵のパスワード -out 署名要求.csr -subj "/C=JP/ST=Tokyo/L=Shinagawa-ku/O=Siisise Net/CN=Siisise root CA"
鍵も生成する場合 (パスワード必須) -key と -passin を変える ECDSAの作り方不明
-newkey rsa:鍵長 (2048 - ) -pass:password -keyout rsa.key
-newkey ed25519 -passout pass:password -keyout eddsa.key
openssl req -new -newkey ed25519 -keyout eddsa.key -passout -out 署名要求.csr -subj "/C=JP/CN=example.com"
鍵を使う場合
設定ファイルにまとめる場合
openssl req -new -key 秘密鍵.key -config 設定ファイル -out 署名要求.csr
req で指定できたかどうか
以下てきとう
設定ファイル
req でオプションの種類とタグっぽいのを指定する
タグっぽい中で詳細を記述する
古い物はCN, 新しいものは req_extensions の subjectAltName がサーバ名と照合されるっぽい
distinguished_name (-subj をファイルで書く場合) と req_extensions ぐらいがあればいいと思う
RFC 4514
code:config
utf8 = yes
distinguished_name = dn # subjっぽいところ
x509_extensions = ext # なくていい?
req_extensions = v3_req # V3拡張
countryName = 国コード
countryName_default = JP
stateOrProvinceName = State or Privince Name (full name)
stateOrPrivinceName_default = Queensland
# どちらの書き方ができるのか不明
C = JP
ST = NekoTokyo
L = Suginami-ku
O = Siisise Net
OU = Root Server
CN = Root CA
emailAddress = ca@example.com
keyUsage = いろいろ?
basicConstraints = CA:FALSE # CA なら CA:TRUE
keyUsage = いろいろ # 鍵の使用目的
subjectAltName = @alt_names サーバ名の別名指定
DNS.1 = server1.example.com
DNS.2 = mail.example.com
DNS.3 = *.example.com
email.1 = ca@example.com
code:CAの場合 (未検証)
keyUsage = critical,keyCertSign,cRLSign
basicConstraints = critical,CA:TRUE,pathlen:1
code:サーバ証明書の場合 (未検証)
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
basicConstraints = critical, CA:FALSE
code:クライアント証明書など
keyUsage = なにか
basicConstraints = CA:FALSE
署名 証明書作成
openssl x509 公開鍵証明書 操作系
CAの秘密鍵で公開鍵、ドメイン等(subj)を署名して証明書にする
CA等 自己署名用
openssl x509 -req
-in 署名要求.csr
-out 署名.crt
-signkey 署名用鍵.key
-passin pass:署名用鍵パスフレーズ
-days 有効期限(日数)
-sha256 RSA用? 他のでは外した
-extfile configのファイル
code:extfile CA用
basicConstraints = critical, CA:true
subjectKeyIdentifier = hash
keyUsage = critical, keyCertSign, cRLSign
cRLSign はCRLを使う場合
簡易署名用
-CAcreateserial シリアル番号生成 無い場合は乱数?
openssl x509 -req
-in 署名要求.csr
-out 署名.crt
-CAkey CA秘密鍵.key
-passin pass:秘密鍵パスフレーズ
-CA CA証明書.crt
-days 有効日数
-extfile 設定ファイル
-CAcreateserial
code:extfile サーバ用
authorityKeyIdentifier = critical, keyid, issuer
basicConstraints = critical, CA:FALSE
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names
DNS.1 = example.com
DNS.2 = *.example.com
example.com をサーバ名に
フル署名用
(略)
型変換
openssl x509 -in 署名.crt -inform PEM または DER -out 署名.der -outform DER または PEM
openssl pkcs12 -passout pass:password -export -in 署名.crt -inkey 秘密鍵.key -out 鍵ペア.p12