class OpenSSL::X509::Store
Der X509 Zertifikatsspeicher enthält vertrauenswürdige CA-Zertifikate, die zur Überprüfung von Peer-Zertifikaten verwendet werden.
Der einfachste Weg, einen nützlichen Zertifikatsspeicher zu erstellen, ist
cert_store = OpenSSL::X509::Store.new cert_store.set_default_paths
Dies verwendet die integrierten Zertifikate Ihres Systems.
Wenn Ihr System keine Standardzertifikate hat, können Sie ein Set von Zertifikaten erhalten, die aus dem Mozilla CA Zertifikatsspeicher von den cURL-Maintainern hier extrahiert wurden: curl.haxx.se/docs/caextract.html (Sie möchten möglicherweise das Skript firefox-db2pem.sh verwenden, um die Zertifikate aus einer lokalen Installation zu extrahieren, um Man-in-the-Middle-Angriffe zu vermeiden.)
Nachdem Sie eine cacert.pem von obigem Link heruntergeladen oder generiert haben, können Sie einen Zertifikatsspeicher aus der Pem-Datei wie folgt erstellen:
cert_store = OpenSSL::X509::Store.new cert_store.add_file 'cacert.pem'
Der Zertifikatsspeicher kann wie folgt mit einem SSLSocket verwendet werden:
ssl_context = OpenSSL::SSL::SSLContext.new ssl_context.verify_mode = OpenSSL::SSL::VERIFY_PEER ssl_context.cert_store = cert_store tcp_socket = TCPSocket.open 'example.com', 443 ssl_socket = OpenSSL::SSL::SSLSocket.new tcp_socket, ssl_context
Attribute
Die Zertifikatkette, die durch den letzten Aufruf von verify konstruiert wurde.
Siehe auch StoreContext#chain.
Der Fehlercode, der durch den letzten Aufruf von verify gesetzt wurde.
Siehe auch StoreContext#error.
Die Beschreibung des Fehlercodes, der durch den letzten Aufruf von verify gesetzt wurde.
Siehe auch StoreContext#error_string.
Der Callback für zusätzliche Zertifikatsüberprüfung. Er wird für jedes Zertifikat in der Kette aufgerufen und kann verwendet werden, um benutzerdefinierte Zertifikatsüberprüfungsbedingungen zu implementieren.
Der Callback wird mit zwei Werten aufgerufen: einem booleschen Wert, der angibt, ob die Vorabprüfung durch OpenSSL erfolgreich war oder nicht, und dem verwendeten StoreContext.
Der Callback kann StoreContext#error= verwenden, um den Fehlercode nach Bedarf zu ändern. Der Callback muss entweder true oder false zurückgeben.
HINWEIS: Alle Ausnahmen, die innerhalb des Callbacks ausgelöst werden, werden ignoriert.
Siehe auch die Manpage X509_STORE_CTX_set_verify_cb(3).
Öffentliche Klassenmethoden
Source
static VALUE
ossl_x509store_initialize(int argc, VALUE *argv, VALUE self)
{
X509_STORE *store;
GetX509Store(self, store);
if (argc != 0)
rb_warn("OpenSSL::X509::Store.new does not take any arguments");
X509_STORE_set_verify_cb(store, x509store_verify_cb);
ossl_x509store_set_vfy_cb(self, Qnil);
/* last verification status */
rb_iv_set(self, "@error", Qnil);
rb_iv_set(self, "@error_string", Qnil);
rb_iv_set(self, "@chain", Qnil);
return self;
}
Erstellt ein neues X509::Store.
Öffentliche Instanzmethoden
Source
static VALUE
ossl_x509store_add_cert(VALUE self, VALUE arg)
{
X509_STORE *store;
X509 *cert;
cert = GetX509CertPtr(arg); /* NO NEED TO DUP */
GetX509Store(self, store);
if (X509_STORE_add_cert(store, cert) != 1)
ossl_raise(eX509StoreError, "X509_STORE_add_cert");
return self;
}
Fügt das OpenSSL::X509::Certificate cert dem Zertifikatsspeicher hinzu.
Siehe auch die Manpage X509_STORE_add_cert(3).
Source
static VALUE
ossl_x509store_add_crl(VALUE self, VALUE arg)
{
X509_STORE *store;
X509_CRL *crl;
crl = GetX509CRLPtr(arg); /* NO NEED TO DUP */
GetX509Store(self, store);
if (X509_STORE_add_crl(store, crl) != 1)
ossl_raise(eX509StoreError, "X509_STORE_add_crl");
return self;
}
Fügt die OpenSSL::X509::CRL crl dem Speicher hinzu.
Siehe auch die Manpage X509_STORE_add_crl(3).
Source
static VALUE
ossl_x509store_add_file(VALUE self, VALUE file)
{
X509_STORE *store;
X509_LOOKUP *lookup;
const char *path;
GetX509Store(self, store);
path = StringValueCStr(file);
lookup = X509_STORE_add_lookup(store, X509_LOOKUP_file());
if (!lookup)
ossl_raise(eX509StoreError, "X509_STORE_add_lookup");
if (X509_LOOKUP_load_file(lookup, path, X509_FILETYPE_PEM) != 1)
ossl_raise(eX509StoreError, "X509_LOOKUP_load_file");
return self;
}
Fügt die Zertifikate in file dem Zertifikatsspeicher hinzu. file ist der Pfad zur Datei, und die Datei enthält ein oder mehrere Zertifikate im PEM-Format, die zusammengefügt sind.
Siehe auch die Manpage X509_LOOKUP_file(3).
Source
static VALUE
ossl_x509store_add_path(VALUE self, VALUE dir)
{
X509_STORE *store;
X509_LOOKUP *lookup;
const char *path;
GetX509Store(self, store);
path = StringValueCStr(dir);
lookup = X509_STORE_add_lookup(store, X509_LOOKUP_hash_dir());
if (!lookup)
ossl_raise(eX509StoreError, "X509_STORE_add_lookup");
if (X509_LOOKUP_add_dir(lookup, path, X509_FILETYPE_PEM) != 1)
ossl_raise(eX509StoreError, "X509_LOOKUP_add_dir");
return self;
}
Fügt path als Hash-Verzeichnis hinzu, das vom Speicher durchsucht werden soll.
Siehe auch die Manpage X509_LOOKUP_hash_dir(3).
Source
static VALUE
ossl_x509store_set_flags(VALUE self, VALUE flags)
{
X509_STORE *store;
long f = NUM2LONG(flags);
GetX509Store(self, store);
X509_STORE_set_flags(store, f);
return flags;
}
Legt die Standard-Flags für die Zertifikatskettenüberprüfung fest, die mit dem Store durchgeführt wird.
flags besteht aus null oder mehr der in OpenSSL::X509 definierten Konstanten mit dem Namen V_FLAG_* oder zusammengeorndet.
OpenSSL::X509::StoreContext#flags= kann verwendet werden, um die Flags für einen einzelnen Überprüfungsvorgang zu ändern.
Siehe auch die Manpage X509_VERIFY_PARAM_set_flags(3).
Source
static VALUE
ossl_x509store_set_purpose(VALUE self, VALUE purpose)
{
X509_STORE *store;
int p = NUM2INT(purpose);
GetX509Store(self, store);
X509_STORE_set_purpose(store, p);
return purpose;
}
Legt den Standard-Zweck der Überprüfung des Speichers fest. Wenn angegeben, überprüfen die Überprüfungen im Speicher, ob alle Zertifikatserweiterungen mit dem Zweck übereinstimmen. Der Zweck wird durch Konstanten angegeben
-
X509::PURPOSE_SSL_CLIENT
-
X509::PURPOSE_SSL_SERVER
-
X509::PURPOSE_NS_SSL_SERVER
-
X509::PURPOSE_SMIME_SIGN
-
X509::PURPOSE_SMIME_ENCRYPT
-
X509::PURPOSE_CRL_SIGN
-
X509::PURPOSE_ANY
-
X509::PURPOSE_OCSP_HELPER
-
X509::PURPOSE_TIMESTAMP_SIGN
OpenSSL::X509::StoreContext#purpose= kann verwendet werden, um den Wert für einen einzelnen Überprüfungsvorgang zu ändern.
Siehe auch die Manpage X509_VERIFY_PARAM_set_purpose(3).
Source
static VALUE
ossl_x509store_set_default_paths(VALUE self)
{
X509_STORE *store;
GetX509Store(self, store);
if (X509_STORE_set_default_paths(store) != 1)
ossl_raise(eX509StoreError, "X509_STORE_set_default_paths");
return Qnil;
}
Konfiguriert store so, dass CA-Zertifikate bei Bedarf aus dem systemeigenen Standardzertifikatsspeicher abgerufen werden. Der Speicherort des Speichers kann normalerweise bestimmt werden durch
-
OpenSSL::X509::DEFAULT_CERT_FILE
-
OpenSSL::X509::DEFAULT_CERT_DIR
Siehe auch die Manpage X509_STORE_set_default_paths(3).
Source
static VALUE
ossl_x509store_set_time(VALUE self, VALUE time)
{
X509_STORE *store;
X509_VERIFY_PARAM *param;
GetX509Store(self, store);
param = X509_STORE_get0_param(store);
X509_VERIFY_PARAM_set_time(param, NUM2LONG(rb_Integer(time)));
return time;
}
Legt die für die Zertifikatsüberprüfungen mit dem Speicher zu verwendende Zeit fest. Standardmäßig wird, wenn nicht angegeben, die aktuelle Systemzeit verwendet.
OpenSSL::X509::StoreContext#time= kann verwendet werden, um den Wert für einen einzelnen Überprüfungsvorgang zu ändern.
Siehe auch die Manpage X509_VERIFY_PARAM_set_time(3).
Source
static VALUE
ossl_x509store_set_trust(VALUE self, VALUE trust)
{
X509_STORE *store;
int t = NUM2INT(trust);
GetX509Store(self, store);
X509_STORE_set_trust(store, t);
return trust;
}
Legt die Standard-Vertrauenseinstellungen fest, die bei der Zertifikatsüberprüfung mit dem Speicher verwendet werden.
OpenSSL::X509::StoreContext#trust= kann verwendet werden, um den Wert für einen einzelnen Überprüfungsvorgang zu ändern.
Siehe auch die Manpage X509_VERIFY_PARAM_set_trust(3).
Source
static VALUE
ossl_x509store_verify(int argc, VALUE *argv, VALUE self)
{
VALUE cert, chain;
VALUE ctx, proc, result;
rb_scan_args(argc, argv, "11", &cert, &chain);
ctx = rb_funcall(cX509StoreContext, rb_intern("new"), 3, self, cert, chain);
proc = rb_block_given_p() ? rb_block_proc() :
rb_iv_get(self, "@verify_callback");
rb_iv_set(ctx, "@verify_callback", proc);
result = rb_funcall(ctx, rb_intern("verify"), 0);
rb_iv_set(self, "@error", ossl_x509stctx_get_err(ctx));
rb_iv_set(self, "@error_string", ossl_x509stctx_get_err_string(ctx));
rb_iv_set(self, "@chain", ossl_x509stctx_get_chain(ctx));
return result;
}
Führt eine Zertifikatsüberprüfung des OpenSSL::X509::Certificate cert durch.
chain kann ein Array von OpenSSL::X509::Certificate sein, das zur Konstruktion der Zertifikatkette verwendet wird.
Wenn ein Block gegeben ist, überschreibt dieser den durch verify_callback= gesetzten Callback.
Nach Abschluss der Überprüfung können die Fehlerinformationen über error, error_string abgerufen werden, und die resultierende vollständige Zertifikatkette kann über chain abgerufen werden.
Source
static VALUE
ossl_x509store_set_vfy_cb(VALUE self, VALUE cb)
{
X509_STORE *store;
GetX509Store(self, store);
rb_iv_set(self, "@verify_callback", cb);
X509_STORE_set_ex_data(store, store_ex_verify_cb_idx, (void *)cb);
RB_OBJ_WRITTEN(self, Qundef, cb);
return cb;
}
Allgemeiner Callback für OpenSSL-Verifizierung