mirror of https://github.com/aria2/aria2
2009-06-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
In TLSContext::addClientKeyFile() and addTrustedCACertFile(), handle excepion inside these functions. * src/LibgnutlsTLSContext.cc * src/LibgnutlsTLSContext.h * src/LibsslTLSContext.cc * src/LibsslTLSContext.h * src/MultiUrlRequestInfo.ccpull/1/head
parent
a60ba71f1e
commit
4cfe156aa7
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
2009-06-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
In TLSContext::addClientKeyFile() and addTrustedCACertFile(),
|
||||
handle excepion inside these functions.
|
||||
* src/LibgnutlsTLSContext.cc
|
||||
* src/LibgnutlsTLSContext.h
|
||||
* src/LibsslTLSContext.cc
|
||||
* src/LibsslTLSContext.h
|
||||
* src/MultiUrlRequestInfo.cc
|
||||
|
||||
2009-06-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||
|
||||
Added comment
|
||||
|
|
|
@ -78,36 +78,39 @@ bool TLSContext::bad() const
|
|||
return !_good;
|
||||
}
|
||||
|
||||
void TLSContext::addClientKeyFile(const std::string& certfile,
|
||||
bool TLSContext::addClientKeyFile(const std::string& certfile,
|
||||
const std::string& keyfile)
|
||||
throw(DlAbortEx)
|
||||
{
|
||||
int ret = gnutls_certificate_set_x509_key_file(_certCred,
|
||||
certfile.c_str(),
|
||||
keyfile.c_str(),
|
||||
GNUTLS_X509_FMT_PEM);
|
||||
if(ret != GNUTLS_E_SUCCESS) {
|
||||
throw DL_ABORT_EX
|
||||
(StringFormat("Failed to load client certificate from %s and"
|
||||
" private key from %s. Cause: %s",
|
||||
certfile.c_str(), keyfile.c_str(),
|
||||
gnutls_strerror(ret)).str());
|
||||
if(ret == GNUTLS_E_SUCCESS) {
|
||||
_logger->info("Client Key File(cert=%s, key=%s) were successfully added.",
|
||||
certfile.c_str(), keyfile.c_str());
|
||||
return true;
|
||||
} else {
|
||||
_logger->error("Failed to load client certificate from %s and"
|
||||
" private key from %s. Cause: %s",
|
||||
certfile.c_str(), keyfile.c_str(),
|
||||
gnutls_strerror(ret));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void TLSContext::addTrustedCACertFile(const std::string& certfile)
|
||||
throw(DlAbortEx)
|
||||
bool TLSContext::addTrustedCACertFile(const std::string& certfile)
|
||||
{
|
||||
int ret = gnutls_certificate_set_x509_trust_file(_certCred,
|
||||
certfile.c_str(),
|
||||
GNUTLS_X509_FMT_PEM);
|
||||
if(ret < 0) {
|
||||
throw DL_ABORT_EX
|
||||
(StringFormat
|
||||
(MSG_LOADING_TRUSTED_CA_CERT_FAILED,
|
||||
certfile.c_str(), gnutls_strerror(ret)).str());
|
||||
_logger->error(MSG_LOADING_TRUSTED_CA_CERT_FAILED,
|
||||
certfile.c_str(), gnutls_strerror(ret));
|
||||
return false;
|
||||
} else {
|
||||
_logger->info("%d certificate(s) were imported.", ret);
|
||||
return true;
|
||||
}
|
||||
_logger->info("%d certificate(s) were imported.", ret);
|
||||
}
|
||||
|
||||
gnutls_certificate_credentials_t TLSContext::getCertCred() const
|
||||
|
|
|
@ -62,11 +62,11 @@ public:
|
|||
~TLSContext();
|
||||
|
||||
// private key `keyfile' must be decrypted.
|
||||
void addClientKeyFile(const std::string& certfile,
|
||||
const std::string& keyfile) throw(DlAbortEx);
|
||||
bool addClientKeyFile(const std::string& certfile,
|
||||
const std::string& keyfile);
|
||||
|
||||
// certfile can contain multiple certificates.
|
||||
void addTrustedCACertFile(const std::string& certfile) throw(DlAbortEx);
|
||||
bool addTrustedCACertFile(const std::string& certfile);
|
||||
|
||||
bool good() const;
|
||||
|
||||
|
|
|
@ -73,33 +73,34 @@ bool TLSContext::bad() const
|
|||
return !_good;
|
||||
}
|
||||
|
||||
void TLSContext::addClientKeyFile(const std::string& certfile,
|
||||
bool TLSContext::addClientKeyFile(const std::string& certfile,
|
||||
const std::string& keyfile)
|
||||
throw(DlAbortEx)
|
||||
{
|
||||
if(SSL_CTX_use_PrivateKey_file(_sslCtx, keyfile.c_str(),
|
||||
SSL_FILETYPE_PEM) != 1) {
|
||||
throw DL_ABORT_EX
|
||||
(StringFormat
|
||||
("Failed to load client private key from %s. Cause: %s",
|
||||
keyfile.c_str(), ERR_error_string(ERR_get_error(), 0)).str());
|
||||
_logger->error("Failed to load client private key from %s. Cause: %s",
|
||||
keyfile.c_str(), ERR_error_string(ERR_get_error(), 0));
|
||||
return false;
|
||||
}
|
||||
if(SSL_CTX_use_certificate_chain_file(_sslCtx, certfile.c_str()) != 1) {
|
||||
throw DL_ABORT_EX
|
||||
(StringFormat
|
||||
("Failed to load client certificate from %s. Cause: %s",
|
||||
certfile.c_str(), ERR_error_string(ERR_get_error(), 0)).str());
|
||||
_logger->error("Failed to load client certificate from %s. Cause: %s",
|
||||
certfile.c_str(), ERR_error_string(ERR_get_error(), 0));
|
||||
return false;
|
||||
}
|
||||
_logger->info("Client Key File(cert=%s, key=%s) were successfully added.",
|
||||
certfile.c_str(), keyfile.c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
void TLSContext::addTrustedCACertFile(const std::string& certfile)
|
||||
throw(DlAbortEx)
|
||||
bool TLSContext::addTrustedCACertFile(const std::string& certfile)
|
||||
{
|
||||
if(SSL_CTX_load_verify_locations(_sslCtx, certfile.c_str(), 0) != 1) {
|
||||
throw DL_ABORT_EX
|
||||
(StringFormat
|
||||
(MSG_LOADING_TRUSTED_CA_CERT_FAILED,
|
||||
certfile.c_str(), ERR_error_string(ERR_get_error(), 0)).str());
|
||||
_logger->error(MSG_LOADING_TRUSTED_CA_CERT_FAILED,
|
||||
certfile.c_str(), ERR_error_string(ERR_get_error(), 0));
|
||||
return false;
|
||||
} else {
|
||||
_logger->info("Trusted CA certificates were successfully added.");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -62,11 +62,11 @@ public:
|
|||
~TLSContext();
|
||||
|
||||
// private key `keyfile' must be decrypted.
|
||||
void addClientKeyFile(const std::string& certfile,
|
||||
const std::string& keyfile) throw(DlAbortEx);
|
||||
bool addClientKeyFile(const std::string& certfile,
|
||||
const std::string& keyfile);
|
||||
|
||||
// certfile can contain multiple certificates.
|
||||
void addTrustedCACertFile(const std::string& certfile) throw(DlAbortEx);
|
||||
bool addTrustedCACertFile(const std::string& certfile);
|
||||
|
||||
bool good() const;
|
||||
|
||||
|
|
|
@ -140,10 +140,7 @@ DownloadResult::RESULT MultiUrlRequestInfo::execute()
|
|||
_option->get(PREF_PRIVATE_KEY));
|
||||
}
|
||||
if(!_option->blank(PREF_CA_CERTIFICATE)) {
|
||||
try {
|
||||
tlsContext->addTrustedCACertFile(_option->get(PREF_CA_CERTIFICATE));
|
||||
} catch(RecoverableException& e) {
|
||||
_logger->error(EX_EXCEPTION_CAUGHT, e);
|
||||
if(!tlsContext->addTrustedCACertFile(_option->get(PREF_CA_CERTIFICATE))) {
|
||||
_logger->warn(MSG_WARN_NO_CA_CERT);
|
||||
}
|
||||
} else if(_option->getAsBool(PREF_CHECK_CERTIFICATE)) {
|
||||
|
|
Loading…
Reference in New Issue