Hi Guys, quick fix for the problem - there was an error in passing the dataType variable from the viewCert to the send certificate command. I attach the fix to this email.
Basically, you shall just copy the new files to: PREFIX/lib/openca/cmds where PREFIX, in the binaries distros, is '/opt/openca'. Let me know if this fixes the CA Certificate retrieval problem... Later, Max P.S.: This does not fix the missing-symlinks problem.. :( Massimiliano Pala wrote:
Hi Samuel, it is probably a bug - I can not find a reason why it should not work. I'll check on it and send you the results - maybe tomorrow! Later, Max Samuel Rios Carvalho wrote:I installed Openca 1.0.2 and created user´s certificates perfectly. But when I downloaded CA certificate in https://ca/pub didn´t found. So I go to CA, in INFORMATION , CA CERTIFICATES and VALID. Showed me the certificate. I clicked in certificate, more info and show this error: Error Code: 6295020 [initServer:314] Cannot load certificate 2147483647 from the database. So I created other CA Certificate and same error. Any idea? Samuel Rios Carvalho
-- Best Regards, Massimiliano Pala --o------------------------------------------------------------------------ Massimiliano Pala [OpenCA Project Manager] [EMAIL PROTECTED] [EMAIL PROTECTED] Dartmouth Computer Science Dept Home Phone: +1 (603) 369-9332 PKI/Trust Laboratory Work Phone: +1 (603) 646-9179 --o------------------------------------------------------------------------ People who think they know everything are a great annoyance to those of us who do. -- Isaac Asimov
## OpenCA - Command ## (c) 1998-2001 by Massimiliano Pala and OpenCA Group ## (c) Copyright 2002-2004 The OpenCA Project ## ## File Name: viewCert ## Brief: Display a certificate ## Version: $Revision: 1.6 $ ## Description: Display certificate data ## Parameters: dataType, key ## this script supports the following configurable references ## ## INSTALL_CERT ## LDAP ## REVOCATION ## SENDCERT ## SEND_CERT_KEY ## VIEW_CSR ## TOKENHANDLING ## MAIL ## SET_PUBLIC_PASSWD ## DELETE_PUBLIC_PASSWD use strict; sub cmdViewCert { our ( $query, $self ); my ($info_list, $cmd_list, $hidden_list, $cmd_panel) = (undef, undef, undef, undef); my ($hidden_pos, $info_pos, $cmd_pos) = (0, 0, 0); ## Get the Serial Number my $key = $query->param( 'key' ); my $dataType = $query->param( 'dataType' ); my $status; my @certDataTypes = ( "VALID_CERTIFICATE", "EXPIRED_CERTIFICATE", "SUSPENDED_CERTIFICATE", "REVOKED_CERTIFICATE" ); if( not $key and ($key != 0)) { configError( gettext ("Error, missing key!") ); } if ( not $dataType ) { $dataType = "CERTIFICATE"; } if ( $dataType =~ /^VALID_CERTIFICATE/ ) { $status = gettext ("Valid"); } elsif ( $dataType =~ /^EXPIRED_CERTIFICATE/ ) { $status = gettext("Expired"); } elsif ( $dataType =~ /^SUSPENDED_CERTIFICATE/ ) { $status = gettext("Suspended"); } elsif ( $dataType =~ /^REVOKED_CERTIFICATE/ ) { $status = gettext("Revoked"); } elsif ( $dataType =~ /^VALID_CA_CERTIFICATE/ ) { $status = gettext("Valid"); } elsif ( $dataType =~ /^EXPIRED_CA_CERTIFICATE/ ) { $status = gettext("Expired"); } elsif ( $dataType =~ /^CA_CERTIFICATE/ ) { ## try to determine the datatype if ($db->getItem ( DATATYPE => "VALID_CA_CERTIFICATE", KEY => $key )) { $dataType = "VALID_CA_CERTIFICATE"; $status = gettext("Valid"); } elsif ($db->getItem ( DATATYPE => "EXPIRED_CA_CERTIFICATE", KEY => $key )) { $dataType = "EXPIRED_CA_CERTIFICATE"; $status = gettext("Expired"); } else { configError ( gettext ("Cannot determine status of this CA-Certificate!")); } } elsif ( $dataType =~ /^CERTIFICATE/ ) { ## try to determine the datatype if ($db->getItem ( DATATYPE => "VALID_CERTIFICATE", KEY => $key )) { $dataType = "VALID_CERTIFICATE"; $status = gettext("Valid"); } elsif ($db->getItem ( DATATYPE => "EXPIRED_CERTIFICATE", KEY => $key )) { $dataType = "EXPIRED_CERTIFICATE"; $status = gettext("Expired"); } elsif ($db->getItem ( DATATYPE => "SUSPENDED_CERTIFICATE", KEY => $key )) { $dataType = "SUSPENDED_CERTIFICATE"; $status = gettext("Suspended"); } elsif ($db->getItem ( DATATYPE => "REVOKED_CERTIFICATE", KEY => $key )) { $dataType = "REVOKED_CERTIFICATE"; $status = gettext("Revoked"); } else { configError ( gettext ("Cannot determine status of this Certificate!")); } } else { configError (i18nGettext ("DataType not supported (__DATATYPE__)!", "__DATATYPE__", $dataType)); } my $cert = $db->getItem( DATATYPE=>$dataType, KEY=>$key ); configError( i18nGettext ("Error __ERRNO__, unable to get cert from dB! (__ERRVAL__)", "__ERRNO__", $db->errno(), "__ERRVAL__", $db->errval())) if( not $cert ); my $parsedCert = $cert->getParsed(); ## build emailaddress string my $emails = ""; foreach my $email (@{$parsedCert->{EMAILADDRESSES}}) { $emails .= ", " if ($emails); $emails .= $email; } $hidden_list->{"cmd"} = ""; $hidden_list->{"GET_PARAMS_CMD"} = ""; $hidden_list->{"passwd"} = ""; $hidden_list->{"key"} = $key; $hidden_list->{"HIDDEN_key"} = $key; $hidden_list->{"dataType"} = $dataType; $hidden_list->{"dn"} = $parsedCert->{DN}; $hidden_list->{"new_dn"} = ""; $hidden_list->{"name"} = "PUBLIC"; $hidden_list->{"format"} = ""; $hidden_list->{"text"} = ""; $hidden_list->{"signature"} = ""; my $tmpIssuer = $parsedCert->{ISSUER}; my $tmpDN = $parsedCert->{DN}; my $tmpStatus = $status; ## old version - if it can be removed then simply remove it $tmpIssuer =~ s/[\/,]\s*(?=[A-Za-z0-9\-]+=)/<BR>\n/g; $tmpDN =~ s/[\/,]\s*(?=[A-Za-z0-9\-]+=)/<BR>\n/g; my $now = timestamp(); if ( $tmpStatus =~ /^Valid/i ) { if ($now > $cryptoShell->getNumericDate ($parsedCert->{NOTAFTER})) { $tmpStatus = gettext("Expired"); } } elsif ( $tmpStatus =~ /revoked/gi ) { $tmpStatus = i18nGettext ("Revoked on __DATE__", "__DATE__", $parsedCert->{HEADER}->{REVOKED}); } elsif ( $tmpStatus =~ /^Expired/i ) { if ($now <= $cryptoShell->getNumericDate ($parsedCert->{NOTAFTER})) { $tmpStatus = gettext("Not Expired"); } } my $download = ""; my $revoke = ""; my $ctype = ""; if ( $dataType =~ /CA_CERTIFICATE/gi ) { $download = '?cmd=send_email_cert;type=ca;dataType=$dataType;key='. $key; # $cert->getSerial(); $ctype = "ca"; } else { $download = '?cmd=send_email_cert;type=email;dataType=$dataType;key='. $key; # $cert->getSerial(); $ctype = "email"; $revoke = '?cmd=revoke_req;key='.$cert->getSerial(); } # $info_list->{HEAD}->[0] = gettext("Variable"); # $info_list->{HEAD}->[1] = gettext("Value"); my $html_download = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Download")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='sendcert'; format_sendcert.value='CER';\">"; my $text = undef; $text = "<table style='width: 500px;'>"; $text .= "<tr><td style='padding: 10px;'>" . "<a href=\"$self?cmd=send_email_cert;type=$ctype;" . "dataType=$dataType;key=" . # $cert->getSerial() . "\" alt=\"" . $key . "\" alt=\"" . gettext ("Install this Certificate" ) . "\">" . " <img src=\"" . getRequired('HtdocsUrlPrefix') . "/images/cert-icon.png\" alt='" . gettext("Install this Certificate") . "'/></a>" . "</td>"; $text .= "<td>" ; $text .= " <table style='width: 400px;'>" . " <tr><td colspan='2' " . "style='font-size: 150%; font-style: bold;'>" . $parsedCert->{DN_HASH}->{CN}[0] . " [" . $cert->getSerial() . "]</td></tr>"; $text .= " <tr><td style='color: #777;'>" . "Issued By:</td>" . " <td style='color: #777'>" . $parsedCert->{ISSUER_HASH}->{O}[0] . "</td>"; $text .= " </tr>"; $text .= " <tr><td style='color: #777;'>" . "Expiration on:</td>" . " <td style='color: #777;'>" . $parsedCert->{NOTAFTER} . "</td></tr>"; $text .= " <tr><td style='color: #777;'> " . "Profile:</td>" . " <td style='color: #777;'>" . $parsedCert->{HEADER}->{ROLE} . "</td></tr>"; $text .= " <tr><td> </td>" . " <td style='font-size: 80%; color: #777;'>" . "<a href=\"$self?cmd=viewCertFull;dataType=$dataType;" . # "key=" . $cert->getSerial() . "\" >" . "key=$key\" >" . gettext ( "More Info" ) . "... </a></td></tr>"; $text .= " </table>"; $text .= "</td>"; $text .= "</tr>"; $text .= "<tr><td colspan='2'><hr size='1' style='color: #fff;'/>" . "</tr></td>"; # $text .= " <tr><td colspan='2'>" . # " <td style='text-align: right;'>" . # $html_download . "</td></tr>"; # $text .= "<tr><td colspan='2'>" . gettext ("Certificate Profile" ) . # ":<br/>" . $parsedCert->{HEADER}->{ROLE} . "</td></tr>"; $text .= "<tr><td colspan='2'>" . gettext ("Fingerprint" ) . ":<br/>" . $parsedCert->{FINGERPRINT} . "</td></tr>"; $text .= "</table>"; $info_list->{BODY}->[$info_pos++]->[1] = $text; ####################################### ## here starts the filtered commands ## ## here starts the filtered commands ## ## cmd_list ## ####################################### $cmd_list->{HEAD}->[0] = gettext ("Operations"); my $allow = libGetPermissionHash (getRequiredList ('CmdRefs_viewCert')); ## perhaps an operator want to have a look at the request if ($allow->{VIEW_CSR} and $parsedCert->{HEADER}->{CSR_SERIAL} ) { $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("CSR's Serial Number"); $cmd_list->{BODY}->[$cmd_pos]->[1] = "<a href=\"". "?cmd=viewCSR&dataType=ARCHIVED_REQUEST&key=". $parsedCert->{HEADER}->{CSR_SERIAL}."\">". "$parsedCert->{HEADER}->{CSR_SERIAL}</a>"; $cmd_pos++; } ## download certs in different formats if ( $allow->{SENDCERT} and ($dataType =~ /(VALID|EXPIRED|SUSPENDED)/i) ) { my $select = "<select " . " class=\"Medium\" name=\"format_sendcert\">\n". "<option value=\"pem\">PEM</option>\n". "<option value=\"der\">CER</option>\n". "<option value=\"pem\">CRT</option>\n". "<option value=\"der\">DER</option>\n". "<option value=\"txt\">TXT</option>\n". "</select>\n"; my $button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Download")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='sendcert';\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Certificate"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $select.$button; $cmd_pos++; } ## prepare download of private keys if ( $allow->{SEND_CERT_KEY} and $parsedCert->{KEY} ) { my $select = "<select name=\"format_send_cert_key\">\n". "<option value=\"openssl\">SSLeay (mod_ssl)</option>\n". "<option value=\"pkcs8\">PKCS#8</option>\n". "<option value=\"pkcs12\">PKCS#12</option>\n". "</select>\n"; my $button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Download")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='getParams';GET_PARAMS_CMD.value='send_cert_key';\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Certificate and Keypair"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $select.$button; $cmd_pos++; ## Change passphrase my $change_button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Change")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='changePasswd'\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Change Passphrase"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $change_button; $cmd_pos++; ## Remove private key from DB my $remove_button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Remove")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='removeKey'\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Remove Key from database"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $remove_button; $cmd_pos++; } ## prepare the actualization of the LDAP if ( $allow->{LDAP} and (getRequired ('LDAP') =~ /y/i) ) { ## update cert on LDAP my $ldap_button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Add to LDAP")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='ldapAddCert'\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Add the certificate to LDAP"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $ldap_button; $cmd_pos++; ## update cert on LDAP with modified DN $ldap_button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Add to LDAP with modified DN")."\" ". "onClick=\"cmd.value='getParams';GET_PARAMS_CMD.value='ldapAddCertByName';\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Add the certificate to LDAP but with changed DN"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $ldap_button; $cmd_pos++; ## delete cert from LDAP $ldap_button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Delete from LDAP")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='ldapDeleteCert'\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Delete the certificate from LDAP"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $ldap_button; $cmd_pos++; ## delete cert from LDAP with modified DN $ldap_button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Delete from LDAP with modified DN")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='getParams';GET_PARAMS_CMD.value='ldapDeleteCertByName';\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Delete the certificate from LDAP but with changed DN"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $ldap_button; $cmd_pos++; } if ($allow->{TOKENHANDLING} and not $parsedCert->{IS_CA} and $status ne gettext("Revoked") and $status ne gettext("Suspended") ) { my $ra_button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Class=\"Medium\" " . "Value=\"".gettext("Install Certificate")."\" ". "onClick=\"cmd.value='getcert'\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Tokenhandling"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $ra_button; $cmd_pos++; } if ($allow->{MAIL}) { my $ra_button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Write a mail")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='writeCertMail'\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Send mail to the User"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $ra_button; $cmd_pos++; } ## set enrollment passphrase for certificate and private key on public gateway if ( $allow->{SET_PUBLIC_PASSWD} and $parsedCert->{KEY} and ($dataType =~ /(VALID|EXPIRED|SUSPENDED)/i) ) { my $button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Set passphrase")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='setPasswd';\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Set passphrase for key enrollment"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $button; $cmd_pos++; } if ( $allow->{DELETE_PUBLIC_PASSWD} and $parsedCert->{KEY} and ($dataType =~ /(VALID|EXPIRED|SUSPENDED)/i) ) { my $button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Delete passphrase")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='deletePasswd';\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Delete passphrase for key enrollment"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $button; $cmd_pos++; } ## revoke cert if ( $allow->{REVOCATION} and $status ne gettext("Revoked") ) { my $ra_button = "<input ". "TYPE=\"Submit\" ". "Name=\"Submit\" ". "Value=\"".gettext("Revoke")."\" ". "Class=\"medium\" " . "onClick=\"cmd.value='revoke_req'\">"; $cmd_list->{BODY}->[$cmd_pos]->[0] = gettext("Start Revocation"); $cmd_list->{BODY}->[$cmd_pos]->[1] = $ra_button; $cmd_pos++; } if ($allow->{INSTALL_CERT}) { if ($dataType =~ /(VALID|EXPIRED|SUSPENDED)_CERTIFICATE/) { $cmd_panel->[0] = "<a href=\"".$download."\" onClick=\"alert('The Certificate will be installed under Other People Certificates Tab');\">".gettext("Install the certificate")."</a>"; $cmd_panel->[1] = "<a href=\"".$revoke."\">".gettext("Revoke the certificate")."</a>"; } } return libSendReply ( "NAME" => i18nGettext ("__STATUS__ Certificate", "__STATUS__", $status), # "EXPLANATION" => gettext ("Following you can find the certificate details."), # "TIMESTAMP" => 1, "INFO_LIST" => $info_list, # "CMD_LIST" => $cmd_list, # "CMD_PANEL" => $cmd_panel, "HIDDEN_LIST" => $hidden_list ); } 1;
## OpenCA - Command ## (c) 1998-2001 by Massimiliano Pala and OpenCA Group ## (c) Copyright 2002-2004 The OpenCA Project ## ## File Name: send_email_cert ## Brief: send cert in PEM-format ## Version: $Revision: 1.2 $ ## Description: this script is used to give the user a cert ## Parameters: key, dataType use strict; sub cmdSend_email_cert { ## Version Information $VER = '2.1.01'; $PRG = 'Certificates Send over HTTP'; ##// Let's get parameters my $type = $query->param('type'); my $key = ( $query->param('key') || $query->param('serial') ); my $dataType = ( $query->param('dataType') || "VALID_CERTIFICATE" ); my $mimetype = "Content-type: application/x-X509-XXX-cert\n\n"; my $bgcert = '-----BEGIN CERTIFICATE-----'; my $endcert = '-----END CERTIFICATE-----'; my $cert; ## Now we must take different path for we can give certs for user/ca ## or whatever we want. if ( "$type" =~ /(email|user|ca)/i ) { $mimetype =~ s/XXX/$type/g; } ## If we want the Text Version of the Certificate if ( $type =~ /txt/i ) { $mimetype = "Content-type: text/html\n\n"; $mimetype .= "<PRE>\n"; } ## fix the format if ( $query->param ("HTTP_USER_AGENT") =~ /IE/i ) { $type = "DER"; } ## Get the certificate from the DB if ( $cert = $db->getItem(DATATYPE=>$dataType, KEY=>$key ) ) { print "$mimetype"; if( $type =~ /txt/i ) { print $cert->getTXT(); } elsif ( $type =~ /der/i ) { print $cert->getDER(); } else { print $cert->getPEM(); } } else { generalError (gettext ("Cannot load certificate from the database!")); } } 1;
smime.p7s
Description: S/MIME Cryptographic Signature
------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________ Openca-Users mailing list Openca-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/openca-users