]> WPIA git - cassiopeia.git/commitdiff
add: Include dummy Subject DN
authorFelix Dörre <felix@dogcraft.de>
Sat, 1 Nov 2014 13:34:22 +0000 (14:34 +0100)
committerBenny Baumann <BenBE@geshi.org>
Fri, 7 Nov 2014 22:53:05 +0000 (23:53 +0100)
src/X509.cpp
src/X509.h
src/simpleOpensslSigner.cpp

index 19901e41b0c19b38d322f744722c3e2b703df0ef..a391b0e6715bd2273cd03b594755b9e021bbe479 100644 (file)
@@ -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<X509_NAME>( 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<char*>( data.data() ), data.size(), -1, 0 ) ) {
+        throw "malloc failure";
+    }
 }
 
 void X509Cert::setIssuerNameFrom( std::shared_ptr<X509> caCert ) {
@@ -204,6 +218,10 @@ void X509Cert::setExtensions( std::shared_ptr<X509> caCert, std::vector<std::sha
 }
 
 std::shared_ptr<SignedCertificate> X509Cert::sign( std::shared_ptr<EVP_PKEY> 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.";
     }
index ac6c6354dcc60fa536e5559f7cc38fff2613cb8f..62f32a481c3705ed404e4a32d6c17647a61e60c2 100644 (file)
@@ -24,8 +24,10 @@ public:
 class X509Cert {
 private:
     std::shared_ptr<X509> target;
+    std::shared_ptr<X509_NAME> subject;
 public:
     X509Cert();
+    void addRDN( int nid, std::string data );
     void setIssuerNameFrom( std::shared_ptr<X509> ca );
     void setPubkeyFrom( std::shared_ptr<X509Req> r );
     void setSerialNumber( BIGNUM* num );
index c8d0bdf7a5cbaaa6d52ec4fa5f89c410bbf4cf0e..5ff46307fcd57db30e88fa4c4bd2bf62d49b20f8 100644 (file)
@@ -149,6 +149,16 @@ std::shared_ptr<SignedCertificate> SimpleOpensslSigner::sign( std::shared_ptr<TB
         throw "Creating X509 failed.";
     }
 
+    X509_NAME* subjectP = X509_NAME_new();
+
+    if( !subjectP ) {
+        throw "malloc failure";
+    }
+
+    std::shared_ptr<X509_NAME> subject = std::shared_ptr<X509_NAME>( subjectP, X509_NAME_free );
+    const char* strdata = "commonName";
+    X509_NAME_add_entry_by_NID( subject.get(), NID_commonName, MBSTRING_UTF8, ( unsigned char* )const_cast<char*>( strdata ), 10, -1, 0 ); // guard
+    c.addRDN( NID_commonName, "common-Content" );
     c.setIssuerNameFrom( caCert );
     c.setPubkeyFrom( req );
     std::shared_ptr<BIGNUM> ser = nextSerial();