ユーザ用ツール

サイト用ツール


openssl

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
openssl [2020/10/29 16:39] – [署名と検証] nullponopenssl [2024/07/15 10:20] (現在) nullpon
行 1: 行 1:
-====== OpenSSL ======+<markdown> 
 +OpenSSL
  
-===== TLS =====+## 鍵ペアを作成
  
-使用可能な暗号スイート表示+TLSのサーバ鍵やデジタル署名鍵として使用できる鍵ペア作成する
  
-<code sh>+``` 
 +# 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`等のパラメータを追加すると鍵を暗号化できる 
 + 
 + 
 +### 鍵の確認 
 + 
 +``` 
 +openssl pkey -in server_key.pem -noout -text 
 +``` 
 + 
 + 
 +## TLS 
 + 
 +### 使用可能な暗号スイートを表示 
 + 
 +```
 # 全て # 全て
 openssl ciphers -v openssl ciphers -v
行 14: 行 43:
 # 暗号スイートを指定して表示(これはnginx 1.17のデフォルトの暗号スイート指定) # 暗号スイートを指定して表示(これはnginx 1.17のデフォルトの暗号スイート指定)
 openssl ciphers -v 'HIGH:!aNULL:!MD5' openssl ciphers -v 'HIGH:!aNULL:!MD5'
-</code>+```
  
-===== 署名と検証 =====+### CSRの作成
  
-ECDSA鍵を使って署名の作成と検証する+作成
  
-使用可能な楕円曲線一覧+``` 
 +openssl req -new -key server_key.pem -out server_csr.pem 
 +```
  
-  openssl ecparam -list_curves+確認
  
 +```
 +openssl req -in server_csr.pem -noout -text
 +```
  
-秘密鍵を作成(ここではP-256曲線=prime256v1を使う)+## 署名と検証
  
-  openssl ecparam -name prime256v1 -genkey -out ec.key+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+``` 
 +openssl ec -pubout -in ec.key -out ec.pub 
 +```
  
 hoge.txtファイルの署名を作成(対象のファイルは一番後ろに書く) hoge.txtファイルの署名を作成(対象のファイルは一番後ろに書く)
  
-  openssl dgst -sign ec.key -sha256 -out hoge.txt.sig hoge.txt+``` 
 +openssl dgst -sign ec.key -sha256 -out hoge.txt.sig hoge.txt 
 +```
  
 hoge.txtの署名を検証(検証対象のファイルは一番後ろに書く) hoge.txtの署名を検証(検証対象のファイルは一番後ろに書く)
  
-  openssl dgst -verify ec.pub -sha256 -signature hoge.txt.sig hoge.txt+``` 
 +openssl dgst -verify ec.pub -sha256 -signature hoge.txt.sig hoge.txt 
 +```
  
 Verified OKと出力されればOK Verified OKと出力されればOK
 +
 +↑で生成した鍵を使って署名・検証するRubyのサンプルコード
 +
 +```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、データが改竄されている
 +```
 +
 +</markdown>
 +
 +===== 楕円曲線 =====
 +
 +楕円曲線とは''y^2 = x^3 + ax + b''で表される曲線。いわゆる楕円とは関係ない
 +
 +電子署名でよく使われる楕円曲線は以下の3つ(nistはアメリカ国立標準技術研究所)
 +
 +^nist推奨^openssl^
 +|P-256|prime256v1 (secp256r1)|
 +|P-384|secp384r1|
 +|P-521|secp521r1|
 +
 +
 +他にも暗号として使用可能な曲線はいくつかあるが、この3つがよく使われる。ssh-keygenで使用されるのはこれらの3つの曲線である。TLSではP-256またはP-384がよく使われる(と言ってもRSA署名の圧倒的に多い)、P-521は対応していないブラウザもある(2020年12月現在)
 +
openssl.1603989541.txt.gz · 最終更新: 2020/10/29 16:39 by nullpon