}
} else if( job->task == "revoke" ) {
try {
+ logger::note( "revoking" );
auto data = jp->getRevocationInfo( job );
std::vector<std::string> serials;
serials.push_back( data.first );
+ logger::note( "revoking" );
std::pair<std::shared_ptr<CRL>, std::string> rev = sign->revoke( CAs.at( data.second ), serials );
std::string date = rev.second;
const unsigned char* pos = ( const unsigned char* ) date.data();
} catch( const std::string& c ) {
logger::error( "Exception: ", c );
} catch ( std::exception &e ){
- logger::errorf ( "Exception while fetchJob: %s", e.what() );
+ logger::errorf ( "std::exception in mainloop: %s", e.what() );
}
}
#include "CRL.h"
#include <openssl/ssl.h>
+#include <log/logger.hpp>
CRL::CRL( std::string path ) {
std::shared_ptr<BIO> bio( BIO_new_file( path.c_str(), "r" ), free );
std::string CRL::revoke( std::string serial, std::string time ) {
BIGNUM* serBN = 0;
+ logger::note("parsing serial");
if( ! BN_hex2bn( &serBN, serial.c_str() ) ) {
throw "hex2bn malloc fail";
}
throw "BN Malloc fail";
}
+ logger::note("building current time");
std::shared_ptr<ASN1_TIME> tmptm( ASN1_TIME_new(), ASN1_TIME_free );
if( !tmptm ) {
X509_gmtime_adj( tmptm.get(), 0 );
+ logger::note("creating entry");
X509_REVOKED* rev = X509_REVOKED_new();
X509_REVOKED_set_serialNumber( rev, ser.get() );
X509_gmtime_adj( tmptm.get(), 0 );
+ logger::note("setting issuer");
if( !X509_CRL_set_issuer_name( crl.get(), X509_get_subject_name( ca->ca.get() ) ) ) {
throw "Setting issuer failed";
}
+ logger::note("setting update");
X509_CRL_set_lastUpdate( crl.get(), tmptm.get() );
if( !X509_time_adj_ex( tmptm.get(), 1, 10, NULL ) ) {
throw "Updating time failed";
}
+ logger::note("setting next update");
X509_CRL_set_nextUpdate( crl.get(), tmptm.get() );
+ logger::note("sorting");
// Sorting and signing
X509_CRL_sort( crl.get() );
+ logger::note("signing");
X509_CRL_sign( crl.get(), ca->caKey.get(), EVP_sha256() );
}
}
void CRL::setSignature( std::string signature ) {
+ X509_CRL_sort( crl.get() );
const unsigned char* data = ( unsigned char* )( signature.data() );
const unsigned char* buffer = data;
d2i_X509_ALGOR( &crl->sig_alg, &buffer, signature.size() );
}
std::pair<std::shared_ptr<CRL>, std::string> SimpleOpensslSigner::revoke( std::shared_ptr<CAConfig> ca, std::vector<std::string> serials ) {
+ logger::note( "revoking" );
std::string crlpath = ca->path + "/ca.crl";
auto crl = std::make_shared<CRL>( crlpath );
std::string date = "";
+ logger::note( "adding serials" );
for( std::string serial : serials ) {
date = crl->revoke( serial, "" );
}
+ logger::note( "signing CRL" );
crl->sign( ca );
writeFile( crlpath, crl->toString() );
+ logger::note( "wrote CRL" );
return std::pair<std::shared_ptr<CRL>, std::string>( crl, date );
}
std::shared_ptr<ASN1_GENERALIZEDTIME> gtime( ASN1_TIME_to_generalizedtime( time.get(), 0 ) );
std::string strdate( ( char* ) ASN1_STRING_data( gtime.get() ), ASN1_STRING_length( gtime.get() ) );
+ logger::notef("openssl formatted me a date: %s", strdate);
if( strdate[strdate.size() - 1] != 'Z' ) {
throw "Got invalid date?";
}
}
std::pair<std::string, std::string> PostgresJobProvider::getRevocationInfo( std::shared_ptr<Job> job ) {
- return {"",""};
pqxx::work txn(c);
- std::string q = "SELECT certs.serial, cacerts.keyname FROM certs INNER JOIN cacerts ON certs.\"caId\" = cacerts.id WHERE certs.id = " + txn.quote( job->target );
+ std::string q = "SELECT certs.serial, cacerts.keyname FROM certs INNER JOIN cacerts ON certs.\"caid\" = cacerts.id WHERE certs.id = " + txn.quote( job->target );
pqxx::result r = txn.exec( q );
if( r.size() != 1) {
}
void PostgresJobProvider::writeBackRevocation( std::shared_ptr<Job> job, std::string date ) {
+ logger::errorf( "Revoking at " + date);
pqxx::work txn(c);
- pqxx::result r = txn.exec( "UPDATE certs SET revoked = " + txn.quote( date ) + " WHERE id = " + txn.quote( job->target ) );
+ logger::errorf( "executing" );
+ pqxx::result r = txn.exec( "UPDATE certs SET revoked = " + txn.quote( pgTime( date ) ) + " WHERE id = " + txn.quote( job->target ) );
if( r.affected_rows() != 1 ){
throw "Only one row should be updated.";
}
+ logger::errorf( "committing" );
txn.commit();
+ logger::errorf( "committed" );
}