Skip to content

Commit

Permalink
Set time directly on the x509 store
Browse files Browse the repository at this point in the history
Instead of an ivar, so other ossl functions that take a store will use the correct time when verifying
  • Loading branch information
segiddins committed Jun 25, 2024
1 parent c737234 commit 2679889
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
1 change: 1 addition & 0 deletions ext/openssl/extconf.rb
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,7 @@ def find_openssl_library
have_func("TS_RESP_CTX_set_time_cb(NULL, NULL, NULL)", ts_h)
have_func("EVP_PBE_scrypt(\"\", 0, (unsigned char *)\"\", 0, 0, 0, 0, 0, NULL, 0)", evp_h)
have_func("SSL_CTX_set_post_handshake_auth(NULL, 0)", ssl_h)
have_func("X509_STORE_get0_param(NULL)", x509_h)

# added in 1.1.1
have_func("EVP_PKEY_check(NULL)", evp_h)
Expand Down
23 changes: 18 additions & 5 deletions ext/openssl/ossl_x509store.c
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,6 @@ ossl_x509store_initialize(int argc, VALUE *argv, VALUE self)
rb_iv_set(self, "@error", Qnil);
rb_iv_set(self, "@error_string", Qnil);
rb_iv_set(self, "@chain", Qnil);
rb_iv_set(self, "@time", Qnil);

return self;
}
Expand Down Expand Up @@ -329,7 +328,23 @@ ossl_x509store_set_trust(VALUE self, VALUE trust)
static VALUE
ossl_x509store_set_time(VALUE self, VALUE time)
{
rb_iv_set(self, "@time", time);
X509_STORE *store;
X509_VERIFY_PARAM *param;

GetX509Store(self, store);
#if HAVE_X509_STORE_GET0_PARAM
param = X509_STORE_get0_param(store);
#else
param = X509_VERIFY_PARAM_new();
#endif
X509_VERIFY_PARAM_set_time(param, NUM2LONG(rb_Integer(time)));
#if !HAVE_X509_STORE_GET0_PARAM
if (!X509_STORE_set1_param(store, param))
{
X509_VERIFY_PARAM_free(param);
ossl_raise(eX509StoreError, "X509_STORE_set1_param");
}
#endif
return time;
}

Expand Down Expand Up @@ -575,7 +590,7 @@ static VALUE ossl_x509stctx_set_time(VALUE, VALUE);
static VALUE
ossl_x509stctx_initialize(int argc, VALUE *argv, VALUE self)
{
VALUE store, cert, chain, t;
VALUE store, cert, chain;
X509_STORE_CTX *ctx;
X509_STORE *x509st;
X509 *x509 = NULL;
Expand All @@ -599,8 +614,6 @@ ossl_x509stctx_initialize(int argc, VALUE *argv, VALUE self)
sk_X509_pop_free(x509s, X509_free);
ossl_raise(eX509StoreError, "X509_STORE_CTX_init");
}
if (!NIL_P(t = rb_iv_get(store, "@time")))
ossl_x509stctx_set_time(self, t);
rb_iv_set(self, "@verify_callback", rb_iv_get(store, "@verify_callback"));
rb_iv_set(self, "@cert", cert);

Expand Down

0 comments on commit 2679889

Please sign in to comment.