From 69b15f5299e0e11ca50601f1f766f66cb21812d6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Felix=20D=C3=B6rre?= Date: Sat, 1 Nov 2014 14:34:22 +0100 Subject: [PATCH] add: Include dummy Subject DN --- src/X509.cpp | 18 ++++++++++++++++++ src/X509.h | 2 ++ src/simpleOpensslSigner.cpp | 10 ++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/X509.cpp b/src/X509.cpp index 19901e4..a391b0e 100644 --- a/src/X509.cpp +++ b/src/X509.cpp @@ -103,6 +103,20 @@ X509Cert::X509Cert() { if( !X509_set_version( c, 2 ) ) { throw "Setting X509-version to 3 failed"; } + + X509_NAME* subjectP = X509_NAME_new(); + + if( !subjectP ) { + throw "malloc failure"; + } + + subject = std::shared_ptr( subjectP, X509_NAME_free ); +} + +void X509Cert::addRDN( int nid, std::string data ) { + if( ! X509_NAME_add_entry_by_NID( subject.get(), nid, MBSTRING_UTF8, ( unsigned char* )const_cast( data.data() ), data.size(), -1, 0 ) ) { + throw "malloc failure"; + } } void X509Cert::setIssuerNameFrom( std::shared_ptr caCert ) { @@ -204,6 +218,10 @@ void X509Cert::setExtensions( std::shared_ptr caCert, std::vector X509Cert::sign( std::shared_ptr caKey ) { + if( !X509_set_subject_name( target.get(), subject.get() ) ) { + throw "error setting subject"; + } + if( !X509_sign( target.get(), caKey.get(), EVP_sha512() ) ) { throw "Signing failed."; } diff --git a/src/X509.h b/src/X509.h index ac6c635..62f32a4 100644 --- a/src/X509.h +++ b/src/X509.h @@ -24,8 +24,10 @@ public: class X509Cert { private: std::shared_ptr target; + std::shared_ptr subject; public: X509Cert(); + void addRDN( int nid, std::string data ); void setIssuerNameFrom( std::shared_ptr ca ); void setPubkeyFrom( std::shared_ptr r ); void setSerialNumber( BIGNUM* num ); diff --git a/src/simpleOpensslSigner.cpp b/src/simpleOpensslSigner.cpp index c8d0bdf..5ff4630 100644 --- a/src/simpleOpensslSigner.cpp +++ b/src/simpleOpensslSigner.cpp @@ -149,6 +149,16 @@ std::shared_ptr SimpleOpensslSigner::sign( std::shared_ptr subject = std::shared_ptr( subjectP, X509_NAME_free ); + const char* strdata = "commonName"; + X509_NAME_add_entry_by_NID( subject.get(), NID_commonName, MBSTRING_UTF8, ( unsigned char* )const_cast( strdata ), 10, -1, 0 ); // guard + c.addRDN( NID_commonName, "common-Content" ); c.setIssuerNameFrom( caCert ); c.setPubkeyFrom( req ); std::shared_ptr ser = nextSerial(); -- 2.39.5