#include <SSL_Context.h>
Collaboration diagram for ACE_SSL_Context:

Public Types | |
| typedef ACE_SYNCH_MUTEX | lock_type |
| enum | { INVALID_METHOD = -1, SSLv2_client = 1, SSLv2_server, SSLv2, SSLv3_client, SSLv3_server, SSLv3, SSLv23_client, SSLv23_server, SSLv23, TLSv1_client, TLSv1_server, TLSv1 } |
Public Member Functions | |
| ACE_SSL_Context (void) | |
| Constructor. | |
| ~ACE_SSL_Context (void) | |
| Destructor. | |
| int | set_mode (int mode=ACE_SSL_Context::SSLv23) |
| int | get_mode (void) const |
| SSL_CTX * | context (void) |
| Get the SSL context. | |
| int | private_key_type (void) const |
| Get the file name and file format used for the private key. | |
| const char * | private_key_file_name (void) const |
| int | private_key (const char *file_name, int type=SSL_FILETYPE_PEM) |
| Set the private key file. | |
| int | verify_private_key (void) |
| Verify that the private key is valid. | |
| int | certificate_type (void) const |
| Get the file name and file format used for the certificate file. | |
| const char * | certificate_file_name (void) const |
| int | certificate (const char *file_name, int type=SSL_FILETYPE_PEM) |
| Set the certificate file. | |
| int | certificate (X509 *cert) |
| Load certificate from memory rather than a file. | |
| int | load_trusted_ca (const char *ca_file=0, const char *ca_dir=0, bool use_env_defaults=true) |
| int | have_trusted_ca (void) const |
| void | set_verify_peer (int strict=0, int once=1, int depth=0) |
| void | default_verify_mode (int mode) |
| int | default_verify_mode (void) const |
Diffie-Hellman (DH) Parameters | |
When using DSS-based certificates, Diffie-Hellman keys need to be exchanged. These must be provided in the form of DH key generation parameters loaded in, or as fixed keys hardcoded into the code itself. ACE_SSL supports loaded parameters. | |
| int | dh_params (const char *file_name, int type=SSL_FILETYPE_PEM) |
| const char * | dh_params_file_name () const |
| int | dh_params_file_type () const |
Static Public Member Functions | |
| ACE_SSL_Context * | instance (void) |
| void | report_error (unsigned long error_code) |
| Print SSL error corresponding to the given error code. | |
| void | report_error (void) |
| Print the last SSL error for the current thread. | |
OpenSSL Random Number Generator Seed Related Methods | |
These are methods that can be used to seed OpenSSL's pseudo-random number generator. These methods can be called more than once. | |
| int | random_seed (const char *seed) |
| int | egd_file (const char *socket_file) |
| int | seed_file (const char *seed_file, long bytes=-1) |
Private Member Functions | |
| void | check_context (void) |
| Verify if the context has been initialized or not. | |
| void | ssl_library_init () |
| More to document. | |
| void | ssl_library_fini () |
| ACE_SSL_Context (const ACE_SSL_Context &) | |
| ACE_SSL_Context & | operator= (const ACE_SSL_Context &) |
Private Attributes | |
| SSL_CTX * | context_ |
| The SSL_CTX structure. | |
| int | mode_ |
| Cache the mode so we can answer fast. | |
| ACE_SSL_Data_File | private_key_ |
| The private key, certificate, and Diffie-Hellman paramters files. | |
| ACE_SSL_Data_File | certificate_ |
| ACE_SSL_Data_File | dh_params_ |
| int | default_verify_mode_ |
| The default verify mode. | |
| int | have_ca_ |
| count of successful CA load attempts | |
Static Private Attributes | |
| lock_type * | locks_ |
This class provides a wrapper for the SSL_CTX data structure. Since most applications have a single SSL_CTX structure, this class can be used as a singleton.
Definition at line 75 of file SSL_Context.h.
|
|
Definition at line 80 of file SSL_Context.h. |
|
|
Definition at line 83 of file SSL_Context.h.
00083 {
00084 INVALID_METHOD = -1,
00085 SSLv2_client = 1,
00086 SSLv2_server,
00087 SSLv2,
00088 SSLv3_client,
00089 SSLv3_server,
00090 SSLv3,
00091 SSLv23_client,
00092 SSLv23_server,
00093 SSLv23,
00094 TLSv1_client,
00095 TLSv1_server,
00096 TLSv1
00097 };
|
|
|
Constructor.
Definition at line 110 of file SSL_Context.cpp. References ssl_library_init().
00111 : context_ (0), 00112 mode_ (-1), 00113 default_verify_mode_ (SSL_VERIFY_NONE), 00114 have_ca_ (0) 00115 { 00116 ACE_SSL_Context::ssl_library_init (); 00117 } |
|
|
Destructor.
Definition at line 119 of file SSL_Context.cpp. References ssl_library_fini().
00120 {
00121 if (this->context_)
00122 {
00123 ::SSL_CTX_free (this->context_);
00124 this->context_ = 0;
00125 }
00126
00127 ACE_SSL_Context::ssl_library_fini ();
00128 }
|
|
|
|
|
|
Load certificate from memory rather than a file.
Definition at line 463 of file SSL_Context.cpp. References certificate_, check_context(), and ACE_SSL_Data_File::type().
00464 {
00465 // Is it really a good idea to return 0 if we're not setting the
00466 // certificate?
00467 if (this->certificate_.type () != -1)
00468 return 0;
00469
00470 this->check_context();
00471
00472 if (::SSL_CTX_use_certificate (this->context_, cert) <= 0)
00473 {
00474 return -1;
00475 }
00476 else
00477 {
00478 // No file is associated with the certificate, set this to a fictional
00479 // value so we don't reset it later.
00480 this->certificate_ = ACE_SSL_Data_File ("MEMORY CERTIFICATE");
00481
00482 return 0;
00483 }
00484 }
|
|
||||||||||||
|
Set the certificate file.
Definition at line 441 of file SSL_Context.cpp. References certificate_, check_context(), ACE_SSL_Data_File::file_name(), and ACE_SSL_Data_File::type().
00443 {
00444 if (this->certificate_.type () != -1)
00445 return 0;
00446
00447 this->certificate_ = ACE_SSL_Data_File (file_name, type);
00448
00449 this->check_context ();
00450
00451 if (::SSL_CTX_use_certificate_file (this->context_,
00452 this->certificate_.file_name (),
00453 this->certificate_.type ()) <= 0)
00454 {
00455 this->certificate_ = ACE_SSL_Data_File ();
00456 return -1;
00457 }
00458 else
00459 return 0;
00460 }
|
|
|
Definition at line 72 of file SSL_Context.inl. References certificate_, and ACE_SSL_Data_File::file_name().
00073 {
00074 return this->certificate_.file_name ();
00075 }
|
|
|
Get the file name and file format used for the certificate file.
Definition at line 66 of file SSL_Context.inl. References certificate_, and ACE_SSL_Data_File::type().
00067 {
00068 return this->certificate_.type ();
00069 }
|
|
|
Verify if the context has been initialized or not.
Definition at line 36 of file SSL_Context.inl. References default_verify_mode(), and set_mode(). Referenced by certificate(), context(), dh_params(), load_trusted_ca(), private_key(), set_verify_peer(), and verify_private_key().
00037 {
00038 if (this->context_ == 0)
00039 {
00040 this->set_mode ();
00041 }
00042
00043 ::SSL_CTX_set_verify (this->context_, this->default_verify_mode (), 0);
00044 }
|
|
|
Get the SSL context.
Definition at line 47 of file SSL_Context.inl. References check_context(). Referenced by ACE_RCSID(), and ACE_SSL_Asynch_Stream::ACE_SSL_Asynch_Stream().
00048 {
00049 this->check_context ();
00050 return this->context_;
00051 }
|
|
|
Definition at line 96 of file SSL_Context.inl. References default_verify_mode_. Referenced by check_context(), and set_verify_peer().
00097 {
00098 return this->default_verify_mode_;
00099 }
|
|
|
Set and query the default verify mode for this context, it is inherited by all the ACE_SSL objects created using the context. It can be overriden on a per-ACE_SSL object. Definition at line 90 of file SSL_Context.inl. References default_verify_mode_.
00091 {
00092 this->default_verify_mode_ = mode;
00093 }
|
|
||||||||||||
|
Load Diffie-Hellman parameters from file_name. The specified file can be a standalone file containing only DH parameters (e.g., as created by Definition at line 582 of file SSL_Context.cpp. References check_context(), dh_params_, ACE_SSL_Data_File::file_name(), and ACE_SSL_Data_File::type().
00584 {
00585 if (this->dh_params_.type () != -1)
00586 return 0;
00587
00588 // For now we only support PEM encodings
00589 if (type != SSL_FILETYPE_PEM)
00590 return -1;
00591
00592 this->dh_params_ = ACE_SSL_Data_File (file_name, type);
00593
00594 this->check_context ();
00595
00596 {
00597 // Swiped from Rescorla's examples and the OpenSSL s_server.c app
00598 DH * ret=0;
00599 BIO * bio = 0;
00600
00601 if ((bio = ::BIO_new_file (this->dh_params_.file_name (), "r")) == 0)
00602 {
00603 this->dh_params_ = ACE_SSL_Data_File ();
00604 return -1;
00605 }
00606
00607 ret = PEM_read_bio_DHparams (bio, 0, 0, 0);
00608 BIO_free (bio);
00609
00610 if (ret == 0)
00611 {
00612 this->dh_params_ = ACE_SSL_Data_File ();
00613 return -1;
00614 }
00615
00616 if (::SSL_CTX_set_tmp_dh (this->context_, ret) < 0)
00617 {
00618 this->dh_params_ = ACE_SSL_Data_File ();
00619 return -1;
00620 }
00621 DH_free (ret);
00622 }
00623
00624 return 0;
00625 }
|
|
|
Load Diffie-Hellman parameters from file_name. The specified file can be a standalone file containing only DH parameters (e.g., as created by Definition at line 84 of file SSL_Context.inl. References dh_params_, and ACE_SSL_Data_File::file_name().
00085 {
00086 return this->dh_params_.file_name ();
00087 }
|
|
|
Load Diffie-Hellman parameters from file_name. The specified file can be a standalone file containing only DH parameters (e.g., as created by Definition at line 78 of file SSL_Context.inl. References dh_params_, and ACE_SSL_Data_File::type().
00079 {
00080 return this->dh_params_.type ();
00081 }
|
|
|
Set the Entropy Gathering Daemon (EGD) UNIX domain socket file to read random seed values from. Definition at line 523 of file SSL_Context.cpp. References ACE_NOTSUP_RETURN. Referenced by ssl_library_init().
00524 {
00525 #if OPENSSL_VERSION_NUMBER < 0x00905100L
00526 // OpenSSL < 0.9.5 doesn't have EGD support.
00527 ACE_UNUSED_ARG (socket_file);
00528 ACE_NOTSUP_RETURN (-1);
00529 #else
00530 // RAND_egd() returns the amount of entropy used to seed the random
00531 // number generator. The actual value should be greater than 16,
00532 // i.e. 128 bits.
00533 if (::RAND_egd (socket_file) > 0)
00534 return 0;
00535 else
00536 return -1;
00537 #endif /* OPENSSL_VERSION_NUMBER >= 0x00905100L */
00538 }
|
|
|
Definition at line 102 of file SSL_Context.inl.
00103 {
00104 return this->mode_;
00105 }
|
|
|
Test whether any CA locations have been successfully loaded and return the number of successful attempts.
Definition at line 108 of file SSL_Context.inl. References have_ca_.
00109 {
00110 return this->have_ca_;
00111 }
|
|
|
The Singleton context, the SSL components use the singleton if nothing else is available. Definition at line 131 of file SSL_Context.cpp. References ACE_Singleton< TYPE, ACE_LOCK >::instance(). Referenced by ACE_RCSID(), and ACE_SSL_Asynch_Stream::ACE_SSL_Asynch_Stream().
00132 {
00133 return ACE_Singleton<ACE_SSL_Context, ACE_SYNCH_MUTEX>::instance ();
00134 }
|
|
||||||||||||||||
|
Load the location of the trusted certification authority certificates. Note that CA certificates are stored in PEM format as a sequence of certificates in ca_file or as a set of individual certificates in ca_dir (or both). Note this method is called by set_mode() to load the default environment settings for ca_file and ca_dir, if any. This allows for automatic service configuration (and backward compatibility with previous versions). Note that the underlying SSL function will add valid file and directory names to the load location lists maintained as part of the SSL_CTX table. It therefore doesn't make sense to keep a copy of the file and path name of the most recently added ca_file or ca_path.
Definition at line 297 of file SSL_Context.cpp. References ACE_DEFAULT_SSL_CERT_DIR, ACE_DEFAULT_SSL_CERT_FILE, ACE_SSL_CERT_DIR_ENV, ACE_SSL_CERT_FILE_ENV, check_context(), ACE::debug(), ACE_OS::getenv(), have_ca_, report_error(), SSLv2, SSLv23, SSLv23_server, SSLv2_server, SSLv3, SSLv3_server, TLSv1, and TLSv1_server. Referenced by set_mode().
00300 {
00301 this->check_context ();
00302
00303 if (ca_file == 0 && use_env_defaults)
00304 {
00305 // Use the default environment settings.
00306 ca_file = ACE_OS::getenv (ACE_SSL_CERT_FILE_ENV);
00307 if (ca_file == 0)
00308 ca_file = ACE_DEFAULT_SSL_CERT_FILE;
00309 }
00310
00311 if (ca_dir == 0 && use_env_defaults)
00312 {
00313 // Use the default environment settings.
00314 ca_dir = ACE_OS::getenv (ACE_SSL_CERT_DIR_ENV);
00315 if (ca_dir == 0)
00316 ca_dir = ACE_DEFAULT_SSL_CERT_DIR;
00317 }
00318
00319 // NOTE: SSL_CTX_load_verify_locations() returns 0 on error.
00320 if (::SSL_CTX_load_verify_locations (this->context_,
00321 ca_file,
00322 ca_dir) <= 0)
00323 {
00324 if (ACE::debug ())
00325 ACE_SSL_Context::report_error ();
00326 return -1;
00327 }
00328
00329 ++this->have_ca_;
00330
00331 // For TLS/SSL servers scan all certificates in ca_file and ca_dir and
00332 // list them as acceptable CAs when requesting a client certificate.
00333 if (mode_ == SSLv23
00334 || mode_ == SSLv23_server
00335 || mode_ == TLSv1
00336 || mode_ == TLSv1_server
00337 || mode_ == SSLv3
00338 || mode_ == SSLv3_server
00339 || mode_ == SSLv2
00340 || mode_ == SSLv2_server)
00341 {
00342 // Note: The STACK_OF(X509_NAME) pointer is a copy of the pointer in
00343 // the CTX; any changes to it by way of these function calls will
00344 // change the CTX directly.
00345 STACK_OF (X509_NAME) * cert_names;
00346 cert_names = ::SSL_CTX_get_client_CA_list (this->context_);
00347 bool error = false;
00348
00349 // Add CAs from both the file and dir, if specified. There should
00350 // already be a STACK_OF(X509_NAME) in the CTX, but if not, we create
00351 // one.
00352 if (ca_file)
00353 {
00354 if (cert_names == 0)
00355 {
00356 if ((cert_names = ::SSL_load_client_CA_file (ca_file)) != 0)
00357 ::SSL_CTX_set_client_CA_list (this->context_, cert_names);
00358 else
00359 error = true;
00360 }
00361 else
00362 {
00363 // Add new certificate names to the list.
00364 error = (0 == ::SSL_add_file_cert_subjects_to_stack (cert_names,
00365 ca_file));
00366 }
00367
00368 if (error)
00369 {
00370 if (ACE::debug ())
00371 ACE_SSL_Context::report_error ();
00372 return -1;
00373 }
00374 }
00375
00376 // SSL_add_dir_cert_subjects_to_stack is defined at 0.9.8a (but not
00377 // on OpenVMS or Mac Classic); it may be available earlier. Change
00378 // this comparison if so.
00379 #if defined (OPENSSL_VERSION_NUMBER) && (OPENSSL_VERSION_NUMBER >= 0x0090801fL)
00380 # if !defined (OPENSSL_SYS_VMS) && !defined (OPENSSL_SYS_MACINTOSH_CLASSIC)
00381
00382 if (ca_dir != 0)
00383 {
00384 if (cert_names == 0)
00385 {
00386 if ((cert_names = sk_X509_NAME_new_null ()) == 0)
00387 {
00388 if (ACE::debug ())
00389 ACE_SSL_Context::report_error ();
00390 return -1;
00391 }
00392 ::SSL_CTX_set_client_CA_list (this->context_, cert_names);
00393 }
00394 if (0 == ::SSL_add_dir_cert_subjects_to_stack (cert_names, ca_dir))
00395 {
00396 if (ACE::debug ())
00397 ACE_SSL_Context::report_error ();
00398 return -1;
00399 }
00400 }
00401 # endif /* !OPENSSL_SYS_VMS && !OPENSSL_SYS_MACINTOSH_CLASSIC */
00402 #endif /* OPENSSL_VERSION_NUMBER >= 0.9.8a release */
00403
00404 }
00405
00406 return 0;
00407 }
|
|
|
|
|
||||||||||||
|
Set the private key file.
Definition at line 411 of file SSL_Context.cpp. References check_context(), ACE_SSL_Data_File::file_name(), private_key_, ACE_SSL_Data_File::type(), and verify_private_key().
00413 {
00414 if (this->private_key_.type () != -1)
00415 return 0;
00416
00417 this->check_context ();
00418
00419 this->private_key_ = ACE_SSL_Data_File (file_name, type);
00420
00421 if (::SSL_CTX_use_PrivateKey_file (this->context_,
00422 this->private_key_.file_name (),
00423 this->private_key_.type ()) <= 0)
00424 {
00425 this->private_key_ = ACE_SSL_Data_File ();
00426 return -1;
00427 }
00428 else
00429 return this->verify_private_key ();
00430 }
|
|
|
Definition at line 60 of file SSL_Context.inl. References ACE_SSL_Data_File::file_name(), and private_key_.
00061 {
00062 return this->private_key_.file_name ();
00063 }
|
|
|
Get the file name and file format used for the private key.
Definition at line 54 of file SSL_Context.inl. References private_key_, and ACE_SSL_Data_File::type().
00055 {
00056 return this->private_key_.type ();
00057 }
|
|
|
Seed the underlying random number generator. This value should have at least 128 bits of entropy. Definition at line 510 of file SSL_Context.cpp. References ACE_OS::strlen().
00511 {
00512 ::RAND_seed (seed, ACE_OS::strlen (seed));
00513
00514 #if OPENSSL_VERSION_NUMBER >= 0x00905100L
00515 // RAND_status() returns 1 if the PRNG has enough entropy.
00516 return (::RAND_status () == 1 ? 0 : -1);
00517 #else
00518 return 0; // Ugly, but OpenSSL <= 0.9.4 doesn't have RAND_status().
00519 #endif /* OPENSSL_VERSION_NUMBER >= 0x00905100L */
00520 }
|
|
|
Print the last SSL error for the current thread.
Definition at line 574 of file SSL_Context.cpp. References ACE_OS::last_error(). Referenced by ACE_SSL_SOCK_Stream::close(), load_trusted_ca(), ACE_SSL_SOCK_Stream::recv_i(), ACE_SSL_SOCK_Stream::send_i(), ACE_SSL_SOCK_Acceptor::ssl_accept(), and ACE_SSL_SOCK_Connector::ssl_connect().
00575 {
00576 unsigned long err = ::ERR_get_error ();
00577 ACE_SSL_Context::report_error (err);
00578 ACE_OS::last_error (err);
00579 }
|
|
|
Print SSL error corresponding to the given error code.
Definition at line 558 of file SSL_Context.cpp. References ACE_ERROR, ACE_TEXT, and LM_ERROR.
00559 {
00560 if (error_code == 0)
00561 return;
00562
00563 char error_string[256];
00564
00565 (void) ::ERR_error_string (error_code, error_string);
00566
00567 ACE_ERROR ((LM_ERROR,
00568 ACE_TEXT ("ACE_SSL (%P|%t) error code: %u - %C\n"),
00569 error_code,
00570 error_string));
00571 }
|
|
||||||||||||
|
Set the file that contains the random seed value state, and the amount of bytes to read. "-1" bytes causes the entire file to be read. Definition at line 541 of file SSL_Context.cpp. Referenced by ssl_library_init().
00542 {
00543 // RAND_load_file() returns the number of bytes used to seed the
00544 // random number generator. If the file reads ok, check RAND_status to
00545 // see if it got enough entropy.
00546 if (::RAND_load_file (seed_file, bytes) > 0)
00547 #if OPENSSL_VERSION_NUMBER >= 0x00905100L
00548 // RAND_status() returns 1 if the PRNG has enough entropy.
00549 return (::RAND_status () == 1 ? 0 : -1);
00550 #else
00551 return 0; // Ugly, but OpenSSL <= 0.9.4 doesn't have RAND_status().
00552 #endif /* OPENSSL_VERSION_NUMBER >= 0x00905100L */
00553 else
00554 return -1;
00555 }
|
|
|
Set the CTX mode. The mode can be set only once, afterwards the function has no effect and returns -1. Once the mode is set the underlying SSL_CTX is initialized and the class can be used. If the mode is not set, then the class automatically initializes itself to the default mode. Definition at line 224 of file SSL_Context.cpp. References ACE_GUARD_RETURN, load_trusted_ca(), SSLv2, SSLv23, SSLv23_client, SSLv23_server, SSLv2_client, SSLv2_server, SSLv3, SSLv3_client, SSLv3_server, TLSv1, TLSv1_client, and TLSv1_server. Referenced by check_context().
00225 {
00226 ACE_MT (ACE_GUARD_RETURN (ACE_Recursive_Thread_Mutex,
00227 ace_ssl_mon,
00228 *ACE_Static_Object_Lock::instance (),
00229 -1));
00230
00231 if (this->context_ != 0)
00232 return -1;
00233
00234 SSL_METHOD *method = 0;
00235
00236 switch (mode)
00237 {
00238 case ACE_SSL_Context::SSLv2_client:
00239 method = ::SSLv2_client_method ();
00240 break;
00241 case ACE_SSL_Context::SSLv2_server:
00242 method = ::SSLv2_server_method ();
00243 break;
00244 case ACE_SSL_Context::SSLv2:
00245 method = ::SSLv2_method ();
00246 break;
00247 case ACE_SSL_Context::SSLv3_client:
00248 method = ::SSLv3_client_method ();
00249 break;
00250 case ACE_SSL_Context::SSLv3_server:
00251 method = ::SSLv3_server_method ();
00252 break;
00253 case ACE_SSL_Context::SSLv3:
00254 method = ::SSLv3_method ();
00255 break;
00256 case ACE_SSL_Context::SSLv23_client:
00257 method = ::SSLv23_client_method ();
00258 break;
00259 case ACE_SSL_Context::SSLv23_server:
00260 method = ::SSLv23_server_method ();
00261 break;
00262 case ACE_SSL_Context::SSLv23:
00263 method = ::SSLv23_method ();
00264 break;
00265 case ACE_SSL_Context::TLSv1_client:
00266 method = ::TLSv1_client_method ();
00267 break;
00268 case ACE_SSL_Context::TLSv1_server:
00269 method = ::TLSv1_server_method ();
00270 break;
00271 case ACE_SSL_Context::TLSv1:
00272 method = ::TLSv1_method ();
00273 break;
00274 default:
00275 method = ::SSLv3_method ();
00276 break;
00277 }
00278
00279 this->context_ = ::SSL_CTX_new (method);
00280 if (this->context_ == 0)
00281 return -1;
00282
00283 this->mode_ = mode;
00284
00285 // Load the trusted certificate authority (default) certificate
00286 // locations. But do not return -1 on error, doing so confuses CTX
00287 // allocation (severe error) with the less important loading of CA
00288 // certificate location error. If it is important for your
00289 // application then call ACE_SSL_Context::have_trusted_ca(),
00290 // immediately following this call to set_mode().
00291 (void) this->load_trusted_ca ();
00292
00293 return 0;
00294 }
|
|
||||||||||||||||
|
Note for verification to work correctly there should be a valid CA name list set using load_trusted_ca().
Definition at line 487 of file SSL_Context.cpp. References check_context(), and default_verify_mode().
00488 {
00489 this->check_context ();
00490
00491 // Setup the peer verififcation mode.
00492
00493 int verify_mode = SSL_VERIFY_PEER;
00494 if (once)
00495 verify_mode |= SSL_VERIFY_CLIENT_ONCE;
00496 if (strict)
00497 verify_mode |= SSL_VERIFY_FAIL_IF_NO_PEER_CERT;
00498
00499 // set the default verify mode
00500 this->default_verify_mode (verify_mode);
00501
00502 // Set the max certificate depth but later let the verify_callback
00503 // catch the depth error by adding one to the required depth.
00504 if (depth > 0)
00505 ::SSL_CTX_set_verify_depth (this->context_, depth + 1);
00506 }
|
|
|
Definition at line 198 of file SSL_Context.cpp. References ACE_GUARD, and locks_. Referenced by ~ACE_SSL_Context().
00199 {
00200 ACE_MT (ACE_GUARD (ACE_Recursive_Thread_Mutex,
00201 ace_ssl_mon,
00202 *ACE_Static_Object_Lock::instance ()));
00203
00204 --ssl_library_init_count;
00205 if (ssl_library_init_count == 0)
00206 {
00207 ::ERR_free_strings ();
00208 ::EVP_cleanup ();
00209
00210 // Clean up the locking callbacks after everything else has been
00211 // cleaned up.
00212 #ifdef ACE_HAS_THREADS
00213 ::CRYPTO_set_locking_callback (0);
00214 ssl_locks = 0;
00215
00216 delete [] this->locks_;
00217 this->locks_ = 0;
00218
00219 #endif /* ACE_HAS_THREADS */
00220 }
00221 }
|
|
|
More to document. @ Definition at line 137 of file SSL_Context.cpp. References ACE_GUARD, ACE_SSL_EGD_FILE_ENV, ACE_SSL_LOCKING_CALLBACK_NAME, ACE_SSL_RAND_FILE_ENV, ACE_SSL_THREAD_ID_NAME, egd_file(), ACE_OS::getenv(), locks_, and seed_file(). Referenced by ACE_SSL_Context().
00138 {
00139 ACE_MT (ACE_GUARD (ACE_Recursive_Thread_Mutex,
00140 ace_ssl_mon,
00141 *ACE_Static_Object_Lock::instance ()));
00142
00143 if (ssl_library_init_count == 0)
00144 {
00145 // Initialize the locking callbacks before initializing anything
00146 // else.
00147 #ifdef ACE_HAS_THREADS
00148 int const num_locks = ::CRYPTO_num_locks ();
00149
00150 this->locks_ = new lock_type[num_locks];
00151 ssl_locks = this->locks_;
00152
00153 # if !defined (WIN32)
00154 // This call isn't necessary on some platforms. See the CRYPTO
00155 // library's threads(3) man page for details.
00156 ::CRYPTO_set_id_callback (ACE_SSL_THREAD_ID_NAME);
00157 # endif /* !WIN32 */
00158 ::CRYPTO_set_locking_callback (ACE_SSL_LOCKING_CALLBACK_NAME);
00159 #endif /* ACE_HAS_THREADS */
00160
00161 ::SSLeay_add_ssl_algorithms ();
00162 ::SSL_load_error_strings ();
00163
00164 // Seed the random number generator. Note that the random
00165 // number generator can be seeded more than once to "stir" its
00166 // state.
00167
00168 #ifdef WIN32
00169 // Seed the random number generator by sampling the screen.
00170 ::RAND_screen ();
00171 #endif /* WIN32 */
00172
00173 #if OPENSSL_VERSION_NUMBER >= 0x00905100L
00174 // OpenSSL < 0.9.5 doesn't have EGD support.
00175
00176 const char *egd_socket_file =
00177 ACE_OS::getenv (ACE_SSL_EGD_FILE_ENV);
00178
00179 if (egd_socket_file != 0)
00180 (void) this->egd_file (egd_socket_file);
00181 #endif /* OPENSSL_VERSION_NUMBER */
00182
00183 const char *rand_file =
00184 ACE_OS::getenv (ACE_SSL_RAND_FILE_ENV);
00185
00186 if (rand_file != 0)
00187 (void) this->seed_file (rand_file);
00188
00189 // Initialize the mutexes that will be used by the SSL and
00190 // crypto library.
00191
00192 }
00193
00194 ++ssl_library_init_count;
00195 }
|
|
|
Verify that the private key is valid.
Definition at line 433 of file SSL_Context.cpp. References check_context(). Referenced by private_key().
00434 {
00435 this->check_context ();
00436
00437 return (::SSL_CTX_check_private_key (this->context_) <= 0 ? -1 : 0);
00438 }
|
|
|
Definition at line 359 of file SSL_Context.h. Referenced by certificate(), certificate_file_name(), and certificate_type(). |
|
|
The SSL_CTX structure.
Definition at line 352 of file SSL_Context.h. |
|
|
The default verify mode.
Definition at line 363 of file SSL_Context.h. Referenced by default_verify_mode(). |
|
|
Definition at line 360 of file SSL_Context.h. Referenced by dh_params(), dh_params_file_name(), and dh_params_file_type(). |
|
|
count of successful CA load attempts
Definition at line 366 of file SSL_Context.h. Referenced by have_trusted_ca(), and load_trusted_ca(). |
|
|
Array of mutexes used internally by OpenSSL when the SSL application is multithreaded. Definition at line 371 of file SSL_Context.h. Referenced by ssl_library_fini(), and ssl_library_init(). |
|
|
Cache the mode so we can answer fast.
Definition at line 355 of file SSL_Context.h. |
|
|
The private key, certificate, and Diffie-Hellman paramters files.
Definition at line 358 of file SSL_Context.h. Referenced by private_key(), private_key_file_name(), and private_key_type(). |
1.3.6