mirror of https://github.com/Icinga/icinga2.git
parent
06ba435cdd
commit
b96e9d26a9
|
@ -247,6 +247,8 @@ shared_ptr<X509> GetX509Certificate(const String& pemfile)
|
||||||
|
|
||||||
int MakeX509CSR(const String& cn, const String& keyfile, const String& csrfile, const String& certfile, bool ca)
|
int MakeX509CSR(const String& cn, const String& keyfile, const String& csrfile, const String& certfile, bool ca)
|
||||||
{
|
{
|
||||||
|
char errbuf[120];
|
||||||
|
|
||||||
InitializeOpenSSL();
|
InitializeOpenSSL();
|
||||||
|
|
||||||
RSA *rsa = RSA_generate_key(4096, RSA_F4, NULL, NULL);
|
RSA *rsa = RSA_generate_key(4096, RSA_F4, NULL, NULL);
|
||||||
|
@ -255,7 +257,25 @@ int MakeX509CSR(const String& cn, const String& keyfile, const String& csrfile,
|
||||||
<< "Writing private key to '" << keyfile << "'.";
|
<< "Writing private key to '" << keyfile << "'.";
|
||||||
|
|
||||||
BIO *bio = BIO_new_file(const_cast<char *>(keyfile.CStr()), "w");
|
BIO *bio = BIO_new_file(const_cast<char *>(keyfile.CStr()), "w");
|
||||||
PEM_write_bio_RSAPrivateKey(bio, rsa, NULL, NULL, 0, NULL, NULL);
|
|
||||||
|
if (!bio) {
|
||||||
|
Log(LogCritical, "SSL")
|
||||||
|
<< "Error while opening private RSA key file '" << keyfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
|
||||||
|
BOOST_THROW_EXCEPTION(openssl_error()
|
||||||
|
<< boost::errinfo_api_function("BIO_new_file")
|
||||||
|
<< errinfo_openssl_error(ERR_peek_error())
|
||||||
|
<< boost::errinfo_file_name(keyfile));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!PEM_write_bio_RSAPrivateKey(bio, rsa, NULL, NULL, 0, NULL, NULL)) {
|
||||||
|
Log(LogCritical, "SSL")
|
||||||
|
<< "Error while writing private RSA key to file '" << keyfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
|
||||||
|
BOOST_THROW_EXCEPTION(openssl_error()
|
||||||
|
<< boost::errinfo_api_function("PEM_write_bio_RSAPrivateKey")
|
||||||
|
<< errinfo_openssl_error(ERR_peek_error())
|
||||||
|
<< boost::errinfo_file_name(keyfile));
|
||||||
|
}
|
||||||
|
|
||||||
BIO_free(bio);
|
BIO_free(bio);
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
|
@ -276,9 +296,26 @@ int MakeX509CSR(const String& cn, const String& keyfile, const String& csrfile,
|
||||||
Log(LogInformation, "base")
|
Log(LogInformation, "base")
|
||||||
<< "Writing X509 certificate to '" << certfile << "'.";
|
<< "Writing X509 certificate to '" << certfile << "'.";
|
||||||
|
|
||||||
bio = BIO_new(BIO_s_file());
|
bio = BIO_new_file(const_cast<char *>(certfile.CStr()), "w");
|
||||||
BIO_write_filename(bio, const_cast<char *>(certfile.CStr()));
|
|
||||||
PEM_write_bio_X509(bio, cert.get());
|
if (!bio) {
|
||||||
|
Log(LogCritical, "SSL")
|
||||||
|
<< "Error while opening certificate file '" << certfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
|
||||||
|
BOOST_THROW_EXCEPTION(openssl_error()
|
||||||
|
<< boost::errinfo_api_function("BIO_new_file")
|
||||||
|
<< errinfo_openssl_error(ERR_peek_error())
|
||||||
|
<< boost::errinfo_file_name(certfile));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!PEM_write_bio_X509(bio, cert.get())) {
|
||||||
|
Log(LogCritical, "SSL")
|
||||||
|
<< "Error while writing certificate to file '" << certfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
|
||||||
|
BOOST_THROW_EXCEPTION(openssl_error()
|
||||||
|
<< boost::errinfo_api_function("PEM_write_bio_X509")
|
||||||
|
<< errinfo_openssl_error(ERR_peek_error())
|
||||||
|
<< boost::errinfo_file_name(certfile));
|
||||||
|
}
|
||||||
|
|
||||||
BIO_free(bio);
|
BIO_free(bio);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,9 +336,26 @@ int MakeX509CSR(const String& cn, const String& keyfile, const String& csrfile,
|
||||||
Log(LogInformation, "base")
|
Log(LogInformation, "base")
|
||||||
<< "Writing certificate signing request to '" << csrfile << "'.";
|
<< "Writing certificate signing request to '" << csrfile << "'.";
|
||||||
|
|
||||||
bio = BIO_new(BIO_s_file());
|
bio = BIO_new_file(const_cast<char *>(csrfile.CStr()), "w");
|
||||||
BIO_write_filename(bio, const_cast<char *>(csrfile.CStr()));
|
|
||||||
PEM_write_bio_X509_REQ(bio, req);
|
if (!bio) {
|
||||||
|
Log(LogCritical, "SSL")
|
||||||
|
<< "Error while opening CSR file '" << csrfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
|
||||||
|
BOOST_THROW_EXCEPTION(openssl_error()
|
||||||
|
<< boost::errinfo_api_function("BIO_new_file")
|
||||||
|
<< errinfo_openssl_error(ERR_peek_error())
|
||||||
|
<< boost::errinfo_file_name(csrfile));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!PEM_write_bio_X509_REQ(bio, req)) {
|
||||||
|
Log(LogCritical, "SSL")
|
||||||
|
<< "Error while writing CSR to file '" << csrfile << "': " << ERR_peek_error() << ", \"" << ERR_error_string(ERR_peek_error(), errbuf) << "\"";
|
||||||
|
BOOST_THROW_EXCEPTION(openssl_error()
|
||||||
|
<< boost::errinfo_api_function("PEM_write_bio_X509")
|
||||||
|
<< errinfo_openssl_error(ERR_peek_error())
|
||||||
|
<< boost::errinfo_file_name(csrfile));
|
||||||
|
}
|
||||||
|
|
||||||
BIO_free(bio);
|
BIO_free(bio);
|
||||||
|
|
||||||
X509_REQ_free(req);
|
X509_REQ_free(req);
|
||||||
|
|
|
@ -96,6 +96,9 @@ int FeatureEnableCommand::Run(const boost::program_options::variables_map& vm, c
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::cout << "Enabling feature " << ConsoleColorTag(Console_ForegroundMagenta | Console_Bold) << feature
|
||||||
|
<< ConsoleColorTag(Console_Normal) << ". Make sure to restart Icinga 2 for these changes to take effect.\n";
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
if (symlink(source.CStr(), target.CStr()) < 0) {
|
if (symlink(source.CStr(), target.CStr()) < 0) {
|
||||||
Log(LogCritical, "cli")
|
Log(LogCritical, "cli")
|
||||||
|
@ -107,18 +110,16 @@ int FeatureEnableCommand::Run(const boost::program_options::variables_map& vm, c
|
||||||
#else /* _WIN32 */
|
#else /* _WIN32 */
|
||||||
std::ofstream fp;
|
std::ofstream fp;
|
||||||
fp.open(target.CStr());
|
fp.open(target.CStr());
|
||||||
if (!fp) {
|
fp << "include \"../features-available/" << feature << ".conf\"" << std::endl;
|
||||||
|
fp.close();
|
||||||
|
|
||||||
|
if (fp.fail()) {
|
||||||
Log(LogCritical, "cli")
|
Log(LogCritical, "cli")
|
||||||
<< "Cannot enable feature '" << feature << "'. Failed to open file '" << target << "'.";
|
<< "Cannot enable feature '" << feature << "'. Failed to open file '" << target << "'.";
|
||||||
errors.push_back(feature);
|
errors.push_back(feature);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
fp << "include \"../features-available/" << feature << ".conf\"" << std::endl;
|
|
||||||
fp.close();
|
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
std::cout << "Enabling feature " << ConsoleColorTag(Console_ForegroundMagenta | Console_Bold) << feature
|
|
||||||
<< ConsoleColorTag(Console_Normal) << ". Make sure to restart Icinga 2 for these changes to take effect.\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!errors.empty()) {
|
if (!errors.empty()) {
|
||||||
|
|
|
@ -71,5 +71,11 @@ int PKINewCACommand::Run(const boost::program_options::variables_map& vm, const
|
||||||
fp << "01";
|
fp << "01";
|
||||||
fp.close();
|
fp.close();
|
||||||
|
|
||||||
|
if (fp.fail()) {
|
||||||
|
Log(LogCritical, "cli")
|
||||||
|
<< "Could not create serial file '" << serialpath << "'";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -153,27 +153,25 @@ int PKIRequestCommand::Run(const boost::program_options::variables_map& vm, cons
|
||||||
|
|
||||||
std::ofstream fpcert;
|
std::ofstream fpcert;
|
||||||
fpcert.open(certfile.CStr());
|
fpcert.open(certfile.CStr());
|
||||||
|
|
||||||
if (!fpcert) {
|
|
||||||
Log(LogCritical, "cli")
|
|
||||||
<< "Could not open certificate file '" << certfile << "' for writing.";
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
fpcert << result->Get("cert");
|
fpcert << result->Get("cert");
|
||||||
fpcert.close();
|
fpcert.close();
|
||||||
|
|
||||||
|
if (fpcert.fail()) {
|
||||||
|
Log(LogCritical, "cli")
|
||||||
|
<< "Could not write certificate to file '" << certfile << "'.";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
std::ofstream fpca;
|
std::ofstream fpca;
|
||||||
fpca.open(cafile.CStr());
|
fpca.open(cafile.CStr());
|
||||||
|
fpca << result->Get("ca");
|
||||||
|
fpca.close();
|
||||||
|
|
||||||
if (!fpcert) {
|
if (fpca.fail()) {
|
||||||
Log(LogCritical, "cli")
|
Log(LogCritical, "cli")
|
||||||
<< "Could not open CA certificate file '" << cafile << "' for writing.";
|
<< "Could not open CA certificate file '" << cafile << "' for writing.";
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fpca << result->Get("ca");
|
|
||||||
fpca.close();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue