X-Git-Url: https://code.wpia.club/?p=cassiopeia.git;a=blobdiff_plain;f=src%2Fcrypto%2FsimpleOpensslSigner.cpp;fp=src%2Fcrypto%2FsimpleOpensslSigner.cpp;h=a6d037188fbbf915336db93e305c9a0d71dc165b;hp=6cf10d060a6039e785095ea652ea5ba280ba46db;hb=25b4018f92fc3245ad91ff6c0d12fc5dacc3cadd;hpb=9c88683457862a86656172dfba127717bf41b86a diff --git a/src/crypto/simpleOpensslSigner.cpp b/src/crypto/simpleOpensslSigner.cpp index 6cf10d0..a6d0371 100644 --- a/src/crypto/simpleOpensslSigner.cpp +++ b/src/crypto/simpleOpensslSigner.cpp @@ -18,6 +18,7 @@ #include "sslUtil.h" extern std::unordered_map profiles; +extern std::unordered_map> CAs; std::shared_ptr SimpleOpensslSigner::lib_ref = ssl_lib_ref; @@ -74,12 +75,28 @@ std::shared_ptr SimpleOpensslSigner::sign( std::shared_ptrprofile ); + std::shared_ptr ca; + Profile *prof; - Profile& prof = profiles.at( cert->profile ); - logger::note( "FINE: Profile ID is: ", prof.id ); + if( cert->ocspCA != "" ) { + auto caIterator = CAs.find( cert->ocspCA ); - std::shared_ptr ca = prof.getCA(); + if( caIterator == CAs.end() ) { + logger::error( "ERROR: Signing CA specified in request for an OCSP cert could not be loaded." ); + throw std::runtime_error( "CA-key for OCSP cert not found" ); + } + + ca = caIterator->second; + logger::note( "Trying to fetch OCSP-profile" ); + prof = &profiles.at( "0100-ocsp" ); + logger::note( "Done with it" ); + } else { + logger::note( "FINE: Profile name is: ", cert->profile ); + + prof = &profiles.at( cert->profile ); + logger::note( "FINE: Profile ID is: ", prof->id ); + ca = prof->getCA(); + } if( !ca ) { logger::error( "ERROR: Signing CA specified in profile could not be loaded." ); @@ -92,8 +109,8 @@ std::shared_ptr SimpleOpensslSigner::sign( std::shared_ptrku ); + logger::note( "INFO: Extended Key Usage is: ", prof->eku ); logger::note( "FINE: Signing is wanted by: ", cert->wishFrom ); logger::note( "FINE: Signing is wanted for: ", cert->wishTo ); @@ -207,7 +224,7 @@ std::shared_ptr SimpleOpensslSigner::sign( std::shared_ptrmaxValidity; if( ( to - from > limit ) || ( to - from < 0 ) ) { to = from + limit; @@ -232,13 +249,13 @@ std::shared_ptr SimpleOpensslSigner::sign( std::shared_ptrca, cert->SANs, prof, ca->crlURL, ca->crtURL ); + c.setExtensions( ca->ca, cert->SANs, *prof, ca->crlURL, ca->crtURL ); logger::note( "FINE: Setting extensions successful." ); logger::note( "INFO: Generating next Serial Number ..." ); std::shared_ptr ser; std::string num; - std::tie( ser, num ) = nextSerial( prof, ca ); + std::tie( ser, num ) = nextSerial( *prof, ca ); c.setSerialNumber( ser.get() ); logger::note( "FINE: Certificate Serial Number set to: ", num );