module OpenSSL::OCSP

[edit]

要約

OCSP(Online Certificate Status Protocol)を取り扱うためのモジュールです。OCSP は [RFC2560] で定義されています。

このモジュールは OCSP のリクエストとレスポンスを取り扱う機能を持っています。

OCSP レスポンダと通信する機能はありません。ユーザが例えば OCSP over http などを実装する必要があります。

OCSP レスポンダにリクエストを送ってその返答を表示する

require 'openssl'
require 'net/http'
# ...
subject # 問い合わせ対象の証明書(Certificate オブジェクト)
issuer # subject の発行者の証明書(Certificate オブジェクト)
store # 信頼している証明書ストア
cid = OpenSSL::OCSP::CertificateId.new(subject, issuer)
req = OpenSSL::OCSP::Request.new
req.add_certid(cid)
req.add_nonce

http = Net::HTTP.new('ocsp.example.com', 80)
httpres = http.post("/", req.to_der, 'content-type' => 'application/ocsp-request')
raise "HTTP error" if !httpres.kind_of?(Net::HTTPOK)
res = OpenSSL::OCSP::Response.new(httpres.body)

puts "Response status: #{res.status_string}"
exit if res.status != OpenSSL::OCSP::RESPONSE_STATUS_SUCCESSFUL

basic_resp = res.basic
raise "nonce error" unless [-1, 1].include?(req.check_nonce(basic_resp))
unless basic_resp.verify([], store)
  puts "verify response fail"
end
rescid, status, reason, revtime, thisupd, nextupd, exts = basic_resp.status.first
STATUS2MESSAGE = {
  OpenSSL::OCSP::V_CERTSTATUS_GOOD => "OK",
  OpenSSL::OCSP::V_CERTSTATUS_REVOKED => "REVOKED",
  OpenSSL::OCSP::V_CERTSTATUS_UNKNOWN => "UNKNOWN",
}
puts "status: #{STATUS2MESSAGE[status]}"
puts "reason: #{reason}" if status == OpenSSL::OCSP::V_CERTSTATUS_REVOKED
puts "revoked time: #{revtime}" if status == OpenSSL::OCSP::V_CERTSTATUS_REVOKED
puts "response update: #{thisupd}"
puts "response next update: #{nextupd}"
puts "extensions: "
exts.each{|ext| p ext}

目次

定数

定数

NOCASIGN -> Integer[permalink][rdoc][edit]

このフラグ定数は使われていません。

NOCERTS -> Integer[permalink][rdoc][edit]

署名時に署名データに証明書を含めないことを意味します。

NOCHAIN -> Integer[permalink][rdoc][edit]

証明書チェインを使わないことを意味します。

NOCHECKS -> Integer[permalink][rdoc][edit]

署名の検証における追加的なチェックを省略することを意味します。

NODELEGATED -> Integer[permalink][rdoc][edit]

delegated trust を許可しないことを意味します。

このフラグ定数は使われていません。

NOEXPLICIT -> Integer[permalink][rdoc][edit]

証明書ストア内の Root CA を信用しないことを意味します。

NOINTERN -> Integer[permalink][rdoc][edit]

Request/Response の署名データに含まれている証明書から署名者の証明書を「探さない」ことを意味します。

NOSIGS -> Integer[permalink][rdoc][edit]

署名の検証を行わないことを意味します。

NOTIME -> Integer[permalink][rdoc][edit]

OCSP 応答の生成時刻を正しく設定しないことを意味します。

NOVERIFY -> Integer[permalink][rdoc][edit]

署名に使った鍵の証明書の検証を行わないことを意味します。

RESPID_KEY -> Integer[permalink][rdoc][edit]

OCSP レスポンダ の ID として公開鍵のハッシュ値を用いることを意味します。

詳しくは [RFC2560] および X.509 を確認してください。

RESPONSE_STATUS_INTERNALERROR -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::Response#status のステータスコードで 、 OCSP レスポンダの内部エラーにより妥当な応答を返せないことを意味します。

詳しくは [RFC2560] 2.3 を見てください。

RESPONSE_STATUS_MALFORMEDREQUEST -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::Response#status のステータスコードで 、リクエストの構文が正しくないことを意味します。

詳しくは [RFC2560] 2.3 を見てください。

RESPONSE_STATUS_SIGREQUIRED -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::Response#status のステータスコードで 、サーバがクライアントにリクエストへの署名を要求していることを意味します。

詳しくは [RFC2560] 2.3 を見てください。

RESPONSE_STATUS_SUCCESSFUL -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::Response#status のステータスコードで 、正しく応答したことを意味します。

詳しくは [RFC2560] 2.3 を見てください。

RESPONSE_STATUS_TRYLATER -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::Response#status のステータスコードで 、レスポンダが一時的に応答できないことを意味します。

詳しくは [RFC2560] 2.3 を見てください。

RESPONSE_STATUS_UNAUTHORIZED -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::Response#status のステータスコードで 、クライアントからサーバへの応答が認可されていないことを意味します。

詳しくは [RFC2560] 2.3 を見てください。

REVOKED_STATUS_AFFILIATIONCHANGED -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status の失効理由コードで、証明書の記載内容が変更されたことを意味します。

詳しくは [RFC3280] や X.509 を参照してください。

REVOKED_STATUS_CACOMPROMISE -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status の失効理由コードで、 CA が危殆化したことを意味します。

詳しくは [RFC3280] や X.509 を参照してください。

REVOKED_STATUS_CERTIFICATEHOLD -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status の失効理由コードで、一時的な保留を意味します。

詳しくは [RFC3280] や X.509 を参照してください。

REVOKED_STATUS_CESSATIONOFOPERATION -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status の失効理由コードで、証明書の運用を止めたことを意味します。

詳しくは [RFC3280] や X.509 を参照してください。

REVOKED_STATUS_KEYCOMPROMISE -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status の失効理由コードで、鍵が危殆化したことを意味します。

詳しくは [RFC3280] や X.509 を参照してください。

REVOKED_STATUS_NOSTATUS -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status の失効理由コードで、 BasicResponse にコードが含まれていないことを意味します。

REVOKED_STATUS_REMOVEFROMCRL -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status の失効理由コードで、 CRL からの削除を意味します。

詳しくは [RFC3280] や X.509 を参照してください。

REVOKED_STATUS_SUPERSEDED -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status の失効理由コードで、証明書が破棄されたことを意味します。

詳しくは [RFC3280] や X.509 を参照してください。

REVOKED_STATUS_UNSPECIFIED -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status の失効理由コードで、未指定を意味します。

詳しくは [RFC3280] や X.509 を参照してください。

TRUSTOTHER -> Integer[permalink][rdoc][edit]

明示的に渡した証明書を検証なしで信用することを意味します。

V_CERTSTATUS_GOOD -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status のステータスコードで証明書が有効であることを意味します。

V_CERTSTATUS_REVOKED -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status のステータスコードで証明書が失効していることを意味します。

V_CERTSTATUS_UNKNOWN -> Integer[permalink][rdoc][edit]

OpenSSL::OCSP::BasicResponse#status のステータスコードで証明書の有効性が不明であることを意味します。