ユーザ用ツール

サイト用ツール


openssl

OpenSSL

TLS

使用可能な暗号スイートを表示

# 全て
openssl ciphers -v
 
# TLS 1.3で使用可能な暗号スイートを表示
openssl ciphers -v TLSv1.3
 
# 暗号スイートを指定して表示(これはnginx 1.17のデフォルトの暗号スイート指定)
openssl ciphers -v 'HIGH:!aNULL:!MD5'

TLS鍵の作成

# rsa 2048bit 鍵を作る
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server_key.pem

# 別の作り方
openssl genrsa -out server_key.pem 2048

# ecdsaの鍵を作る
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 -out server_key.pem

# 別の作り方
openssl ecparam -genkey -name prime256v1 -out server_key.pem 

-aes256などのパラメータを追加すると鍵を暗号化できる

鍵を確認するには

## rsa鍵の場合
openssl rsa -in server_key.pem -noout -text

## ecdsa鍵の場合
openssl ec -in server_key.pem -noout -text

CSRの作成

openssl req -new -key server_key.pem -out server_csr.pem

署名と検証

ECDSA鍵を使って署名の作成と検証する

使用可能な楕円曲線一覧

openssl ecparam -list_curves

秘密鍵と公開鍵を作成(ここではP-256曲線=prime256v1を使う)

openssl ecparam -name prime256v1 -genkey -out ec.key

公開鍵をとりだす

openssl ec -pubout -in ec.key -out ec.pub

hoge.txtファイルの署名を作成(対象のファイルは一番後ろに書く)

openssl dgst -sign ec.key -sha256 -out hoge.txt.sig hoge.txt

hoge.txtの署名を検証(検証対象のファイルは一番後ろに書く)

openssl dgst -verify ec.pub -sha256 -signature hoge.txt.sig hoge.txt

Verified OKと出力されればOK

↑で生成した鍵を使って署名・検証するRubyのサンプルコード

require 'openssl'
 
key_pair = File.open('ec.key') { |f| OpenSSL::PKey::EC.new(f.read) }
 
sig = key_pair.sign('sha256', 'hello world')
 
pub_key = File.open('ec.pub') { |f| OpenSSL::PKey::EC.new(f.read) }
 
puts pub_key.verify('sha256', sig, 'hello world') # => true
puts pub_key.verify('sha256', sig, 'hello work') # => false、データが改竄されている

楕円曲線

楕円曲線とはy^2 = x^3 + ax + bで表される曲線。いわゆる楕円とは関係ない

電子署名でよく使われる楕円曲線は以下の3つ(nistはアメリカ国立標準技術研究所)

nist推奨openssl
P-256prime256v1 (secp256r1)
P-384secp384r1
P-521secp521r1

他にも暗号として使用可能な曲線はいくつかあるが、この3つがよく使われる。ssh-keygenで使用されるのはこれらの3つの曲線である。TLSではP-256またはP-384がよく使われる(と言ってもRSA署名の圧倒的に多い)、P-521は対応していないブラウザもある(2020年12月現在)

openssl.txt · 最終更新: 2023/08/09 06:01 by nullpon