[xmlsec] Key/cert selected for verification
Peter
allmail89 at gmail.com
Sun Jun 30 11:27:08 PDT 2013
Hi Aleksey
I am new to xmlsec and have a few questions. I tried to do my home first
and went through the documentation and old emails but still have a few
question. I will be very grateful if you can find the time to look into
this please.
I am using x509 certs and I am using the .18 prebuilt windows version
FIRST
---------
My first question is very similar to the one posted here
http://www.aleksey.com/pipermail/xmlsec/2002/004466.html
I basically want to look at the certificate or the chain that actually
validated the xml to check the Subject, Issuer, etc. I can’t find the
structures mentioned in that thread, I am guessing the code must have
changed since then or may be I am looking in the wrong place. Can you
please confirm?
So then I looked at the command line tool code since it prints out the info
that I need. I followed through the code but I cant find any accessible
function to pull out the subject/issuer for the certs. I found
the xmlSecKeyDataGetIdentifier function but it didnt print anythng for me.
It was late and may be I am doing something wrong but I thought I will
check with you if I am on the right track
/////////////////////////////////////////////////////////////
//key is the signKey from the context
if (!xmlSecPtrListIsValid(key->dataList))
{
info = "SignKey dataList is not valid";
return false;
}
// key->dataList->id is the pointer to the xmlSecKeyDataListKlass struct
if (!xmlSecPtrListCheckId(key->dataList, xmlSecKeyDataListId))
{
info = "SignKey dataList kind is not xmlSecKeyDataListId";
return false;
}
// "key-data-list"
InfoLog << " DATALIST kind [" << (char*)key->dataList->id->name << "] size
[" << key->dataList->use << "]" << endl;
xmlSecSize pos;
for (pos = 0; pos < key->dataList->use; ++pos)
{
ostringstream ss; ss << pos;
xmlSecKeyDataPtr value = (xmlSecKeyDataPtr)key->dataList->data[pos];
if (value == NULL)
{
info = "SignKey dataList data[" + ss.str() + "] is not valid";
return false;
}
//key->dataList->id->debugDumpItem(key->dataList->data[pos], stdout);
if (!xmlSecKeyDataCheckId(value, xmlSecMSCryptoKeyDataX509Id))
{
info = "SignKey dataList data[" + ss.str() + "] kind is not
xmlSecMSCryptoKeyDataX509Id";
return false;
}
InfoLog << "SignKey dataList data[" << ss.str().c_str() << "] kind [" <<
(char*)value->id->name << "]" << endl;
string identifier = (char*)xmlSecKeyDataGetIdentifier(value) ;
// this did not print anything
InfoLog << "SignKey dataList data[" << ss.str().c_str() << "] identifier ["
<< identifier.c_str() << "]" << endl;
}
/* THIS IS THE INFO I AM LOOKING FOR. Is it accessible from outside?
xmlSecMSCryptoKeyDataX509DebugDump(xmlSecKeyDataPtr data, FILE* output)
{
PCCERT_CONTEXT cert;
xmlSecSize size, pos;
xmlSecAssert(xmlSecKeyDataCheckId(data, xmlSecMSCryptoKeyDataX509Id));
fprintf(output, "=== X509 Data:\n");
cert = xmlSecMSCryptoKeyDataX509GetKeyCert(data);
if(cert != NULL) {
fprintf(output, "==== Key Certificate:\n");
xmlSecMSCryptoX509CertDebugDump(cert, output);
}
size = xmlSecMSCryptoKeyDataX509GetCertsSize(data);
for(pos = 0; pos < size; ++pos) {
cert = xmlSecMSCryptoKeyDataX509GetCert(data, pos);
if(cert == NULL) {
xmlSecError(XMLSEC_ERRORS_HERE,
xmlSecErrorsSafeString(xmlSecKeyDataGetName(data)),
"xmlSecMSCryptoKeyDataX509GetCert",
XMLSEC_ERRORS_R_XMLSEC_FAILED,
"pos=%d", pos);
return;
}
fprintf(output, "==== Certificate:\n");
xmlSecMSCryptoX509CertDebugDump(cert, output);
}
*/
/////////////////////////////////////////////////////////////
SECOND
--------------
In one of your replies (http://www.aleksey.com/pipermail/xmlsec
/2011/009076.html) you said****
“I think you can get what you want by using "--enabled-key-data" (and
"--list-key-data") command line options for xmlsec utility. Simply disable
reading of certs from XML file completely and provide the signature key
(not necessarily in a cert) from the command line.”
How exactly do I do that? Because –enabled-key-data always expects a
parameter. I guess I can just say “hmac” or some other option that doesn’t
apply in my case to achieve that, is that right?
**
Also the command to list them "xmlsec list-key-data –crypto mscrypto", I
didn’t see it documented in the command line help.
>From verify4 example, I found the following. What is the corresponding
equivalent for the code (to disable reading of certs from xml completely?
/* in addition, limit possible key data to valid X509 certificates only
*/
if(xmlSecPtrListAdd(&(dsigCtx->keyInfoReadCtx.enabledKeyData), BAD_CAST
xmlSecKeyDataX509Id) < 0) {
fprintf(stderr,"Error: failed to limit allowed key data\n");
goto done;
}
Thanks a lot for your help
**
**
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.aleksey.com/pipermail/xmlsec/attachments/20130630/dbe85bca/attachment.html>
More information about the xmlsec
mailing list