Class: OpenSSL::X509::StoreContext
Relationships & Source Files | |
Inherits: | Object |
Defined in: | ext/openssl/ossl_x509store.c, ext/openssl/lib/openssl/x509.rb |
Overview
A StoreContext is used while validating a single certificate and holds the status involved.
Class Method Summary
-
.new(store, cert = nil, untrusted = nil)
constructor
Sets up a
StoreContext
for a verification of the X.509 certificate cert.
Instance Attribute Summary
-
#error ⇒ Integer
rw
Returns the error code of stctx.
-
#error=(error_code)
rw
Sets the error code of stctx.
-
#flags=(flags)
writeonly
Sets the verification flags to the context.
-
#purpose=(purpose)
writeonly
Sets the purpose of the context.
-
#time=(time)
writeonly
Sets the time used in the verification.
-
#trust=(trust)
writeonly
Sets the trust settings of the context.
Instance Method Summary
-
#chain ⇒ nil | Array of X509::Certificate
Returns the verified chain.
- #cleanup
-
#current_cert ⇒ X509::Certificate
Returns the certificate which caused the error.
-
#current_crl ⇒ X509::CRL
Returns the
CRL
which caused the error. -
#error_depth ⇒ Integer
Returns the depth of the chain.
-
#error_string ⇒ String
Returns the human readable error string corresponding to the error code retrieved by #error.
-
#verify ⇒ Boolean
Performs the certificate verification using the parameters set to stctx.
Constructor Details
.new(store, cert = nil, untrusted = nil)
Sets up a StoreContext
for a verification of the X.509 certificate cert.
# File 'ext/openssl/ossl_x509store.c', line 582
static VALUE ossl_x509stctx_initialize(int argc, VALUE *argv, VALUE self) { VALUE store, cert, chain; X509_STORE_CTX *ctx; X509_STORE *x509st; X509 *x509 = NULL; STACK_OF(X509) *x509s = NULL; int state; rb_scan_args(argc, argv, "12", &store, &cert, &chain); GetX509StCtx(self, ctx); GetX509Store(store, x509st); if (!NIL_P(cert)) x509 = DupX509CertPtr(cert); /* NEED TO DUP */ if (!NIL_P(chain)) { x509s = ossl_protect_x509_ary2sk(chain, &state); if (state) { X509_free(x509); rb_jump_tag(state); } } if (X509_STORE_CTX_init(ctx, x509st, x509, x509s) != 1){ X509_free(x509); sk_X509_pop_free(x509s, X509_free); ossl_raise(eX509StoreError, "X509_STORE_CTX_init"); } rb_iv_set(self, "@verify_callback", rb_iv_get(store, "@verify_callback")); rb_iv_set(self, "@cert", cert); return self; }
Instance Attribute Details
#error ⇒ Integer (rw)
Returns the error code of stctx. This is typically called after #verify is done, or from the verification callback set to Store#verify_callback=.
See also the man page X509_STORE_CTX_get_error(3).
# File 'ext/openssl/ossl_x509store.c', line 674
static VALUE ossl_x509stctx_get_err(VALUE self) { X509_STORE_CTX *ctx; GetX509StCtx(self, ctx); return INT2NUM(X509_STORE_CTX_get_error(ctx)); }
#error=(error_code) (rw)
Sets the error code of stctx. This is used by the verification callback set to Store#verify_callback=.
See also the man page X509_STORE_CTX_set_error(3).
# File 'ext/openssl/ossl_x509store.c', line 693
static VALUE ossl_x509stctx_set_error(VALUE self, VALUE err) { X509_STORE_CTX *ctx; GetX509StCtx(self, ctx); X509_STORE_CTX_set_error(ctx, NUM2INT(err)); return err; }
#flags=(flags) (writeonly)
Sets the verification flags to the context. This overrides the default value set by Store#flags=.
See also the man page X509_VERIFY_PARAM_set_flags(3).
# File 'ext/openssl/ossl_x509store.c', line 792
static VALUE ossl_x509stctx_set_flags(VALUE self, VALUE flags) { X509_STORE_CTX *store; long f = NUM2LONG(flags); GetX509StCtx(self, store); X509_STORE_CTX_set_flags(store, f); return flags; }
#purpose=(purpose) (writeonly)
Sets the purpose of the context. This overrides the default value set by Store#purpose=.
See also the man page X509_VERIFY_PARAM_set_purpose(3).
# File 'ext/openssl/ossl_x509store.c', line 813
static VALUE ossl_x509stctx_set_purpose(VALUE self, VALUE purpose) { X509_STORE_CTX *store; int p = NUM2INT(purpose); GetX509StCtx(self, store); X509_STORE_CTX_set_purpose(store, p); return purpose; }
#time=(time) (writeonly)
Sets the time used in the verification. If not set, the current time is used.
See also the man page X509_VERIFY_PARAM_set_time(3).
# File 'ext/openssl/ossl_x509store.c', line 854
static VALUE ossl_x509stctx_set_time(VALUE self, VALUE time) { X509_STORE_CTX *store; long t; t = NUM2LONG(rb_Integer(time)); GetX509StCtx(self, store); X509_STORE_CTX_set_time(store, 0, t); return time; }
#trust=(trust) (writeonly)
Sets the trust settings of the context. This overrides the default value set by Store#trust=.
See also the man page X509_VERIFY_PARAM_set_trust(3).
# File 'ext/openssl/ossl_x509store.c', line 834
static VALUE ossl_x509stctx_set_trust(VALUE self, VALUE trust) { X509_STORE_CTX *store; int t = NUM2INT(trust); GetX509StCtx(self, store); X509_STORE_CTX_set_trust(store, t); return trust; }
Instance Method Details
#chain ⇒ nil
| Array
of
X509::Certificate
Returns the verified chain.
See also the man page X509_STORE_CTX_set0_verified_chain(3).
# File 'ext/openssl/ossl_x509store.c', line 651
static VALUE ossl_x509stctx_get_chain(VALUE self) { X509_STORE_CTX *ctx; const STACK_OF(X509) *chain; GetX509StCtx(self, ctx); chain = X509_STORE_CTX_get0_chain(ctx); if (!chain) return Qnil; /* Could be an empty array instead? */ return ossl_x509_sk2ary(chain); }
#cleanup
[ GitHub ]# File 'ext/openssl/lib/openssl/x509.rb', line 337
def cleanup warn "(#{caller.first}) OpenSSL::X509::StoreContext#cleanup is deprecated with no replacement" if $VERBOSE end
#current_cert ⇒ X509::Certificate
Returns the certificate which caused the error.
See also the man page X509_STORE_CTX_get_current_cert(3).
# File 'ext/openssl/ossl_x509store.c', line 751
static VALUE ossl_x509stctx_get_curr_cert(VALUE self) { X509_STORE_CTX *ctx; GetX509StCtx(self, ctx); return ossl_x509_new(X509_STORE_CTX_get_current_cert(ctx)); }
#current_crl ⇒ X509::CRL
Returns the CRL
which caused the error.
See also the man page X509_STORE_CTX_get_current_crl(3).
# File 'ext/openssl/ossl_x509store.c', line 769
static VALUE ossl_x509stctx_get_curr_crl(VALUE self) { X509_STORE_CTX *ctx; X509_CRL *crl; GetX509StCtx(self, ctx); crl = X509_STORE_CTX_get0_current_crl(ctx); if (!crl) return Qnil; return ossl_x509crl_new(crl); }
#error_depth ⇒ Integer
Returns the depth of the chain. This is used in combination with #error.
See also the man page X509_STORE_CTX_get_error_depth(3).
# File 'ext/openssl/ossl_x509store.c', line 733
static VALUE ossl_x509stctx_get_err_depth(VALUE self) { X509_STORE_CTX *ctx; GetX509StCtx(self, ctx); return INT2NUM(X509_STORE_CTX_get_error_depth(ctx)); }
#error_string ⇒ String
Returns the human readable error string corresponding to the error code retrieved by #error.
See also the man page X509_verify_cert_error_string(3).
# File 'ext/openssl/ossl_x509store.c', line 713
static VALUE ossl_x509stctx_get_err_string(VALUE self) { X509_STORE_CTX *ctx; long err; GetX509StCtx(self, ctx); err = X509_STORE_CTX_get_error(ctx); return rb_str_new2(X509_verify_cert_error_string(err)); }
#verify ⇒ Boolean
Performs the certificate verification using the parameters set to stctx.
See also the man page X509_verify_cert(3).
# File 'ext/openssl/ossl_x509store.c', line 623
static VALUE ossl_x509stctx_verify(VALUE self) { X509_STORE_CTX *ctx; GetX509StCtx(self, ctx); VALUE cb = rb_iv_get(self, "@verify_callback"); X509_STORE_CTX_set_ex_data(ctx, stctx_ex_verify_cb_idx, (void *)cb); switch (X509_verify_cert(ctx)) { case 1: return Qtrue; case 0: ossl_clear_error(); return Qfalse; default: ossl_raise(eX509CertError, "X509_verify_cert"); } }