Hallo all
I have a little problem atm where I have to sign certificates. I have both
the private key, and the ca certificate loaded as cacert and cakey
respectively. Here is the part of the code where I suspect
things break.
/*
* Variables to be used:
* X509 *cacert; // contains CA certificate.
* EVP_PKEY *cakey; // contains CA private key.
*/
X509 *usrcert = X509_new();
if(!usrcert)
{
log_ssl_errors("X509_new");
return ERROR_NULL;
}
if(!X509_set_version(usrcert,USRCERTVERSION))
{
log_ssl_errors("X509_set_version");
return ERROR_SSL;
}
if(!X509_set_issuer_name(usrcert,X509_get_subject_name(cacert)))
{
log_ssl_errors("X509_set_issuer_name/X509_get_subject_name");
return ERROR_SSL;
}
X509_gmtime_adj(X509_get_notBefore(usrcert),0);
X509_gmtime_adj(X509_get_notAfter(usrcert),(long)60*60*24*TRIALPERIOD);
X509_NAME *subject = X509_NAME_new();
if(!subject)
{
log_ssl_errors("X509_NAME_new");
return ERROR_NULL;
}
if(
!X509_NAME_add_entry_by_NID(subject,NID_pkcs9_emailAddress,MBSTRING_ASC,(uns
igned char*)email,-1,-1,0) ||
!X509_NAME_add_entry_by_NID(subject,NID_commonName,MBSTRING_ASC,(unsigned
char*)uname,-1,-1,0)
)
{
log_ssl_errors("X509_NAME_add_entry_by_NID");
return ERROR_SSL;
}
if(!X509_set_subject_name(usrcert,subject))
{
log_ssl_errors("X509_set_subject_name");
return ERROR_SSL;
}
X509_NAME_free(subject);
if(!X509_set_pubkey(usrcert,pkey))
{
log_ssl_errors("X509_set_pubkey");
return ERROR_SSL;
}
EVP_MD *dgst = USR_DGST();
res = X509_sign(usrcert,cakey,dgst);
/*
* res now equals 128 - the size of the private rsa key.
*/
I then go ahead and dump the certificate using X509_print and get
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 0 (0x0)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=ZA, ST=Gauteng, L=Pretoria, O=InterExcel, OU=BackupServer,
[EMAIL PROTECTED]
Validity
Not Before: Jan 22 19:20:46 2003 GMT
Not After : Feb 21 19:20:46 2003 GMT
Subject: [EMAIL PROTECTED], CN=6feffc9edd8be3e8
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:b9:d5:be:8b:1e:f2:9e:6c:4b:88:5a:84:23:c5:
ec:3e:be:7c:97:1d:e4:c1:f8:c4:45:b5:a6:1e:45:
b9:57:d2:84:36:21:ec:53:35:94:65:18:c9:f8:f5:
ef:da:10:c1:25:14:04:fa:14:77:83:a7:8b:79:ac:
d2:c7:51:f2:6f:8e:83:19:ba:20:8d:ed:96:24:fd:
ad:e9:9c:68:78:92:76:64:c0:b9:54:08:2c:5c:6a:
d0:70:15:75:4c:57:b6:9e:f9:68:b1:44:8e:2a:16:
2e:90:85:73:63:30:43:21:28:f2:46:5d:f7:40:d5:
8a:a5:72:a2:00:0d:f9:7c:d7
Exponent: 65537 (0x10001)
Signature Algorithm: sha1WithRSAEncryption
4c:7b:eb:10:3b:70:7f:d6:96:67:96:2d:55:e6:ce:ab:48:ee:
cc:28:dc:81:9e:2a:b1:80:ac:e5:bf:84:e6:71:b7:56:dd:39:
41:2b:1d:fb:dc:8e:16:85:2a:f0:f7:96:6f:b1:c9:69:38:bc:
46:2e:13:cc:28:5e:95:72:81:81:f7:83:97:80:98:96:35:73:
c7:4e:3b:48:b9:99:60:ae:c8:8f:4f:57:74:73:fb:09:0c:19:
c5:00:37:71:40:1f:cb:2c:3e:11:c5:c8:88:a5:53:f7:d6:61:
e2:f6:76:e7:3b:d8:bb:35:9d:24:21:55:bd:fe:09:81:ee:6b:
70:bc
Which is what I want. Except that when I perform the command "openssl
verify -CAfile cacert.pem gencert.pem" I get the output:
error 7 at 0 depth lookup:certificate signature failure
And my own program gives more detail:
rsa routines::RSA_verify failed with error code 0x4077068 (bad signature).
asn1 encoding routines::ASN1_verify failed with error code 0xd079006 (bad
get asn1 object call).
Certificate failed.
I output the X509 certificate using PEM_write_X509(stdout,usrcert) which I
then pipe into a file.
Jaco
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]