[xmlsec] question: signing xml with pfx
Aleksey Sanin
aleksey at aleksey.com
Wed Aug 25 09:03:17 PDT 2004
Try xmlSecCryptoAppPkcs12Load() function which has "password callbacks".
Aleksey
Leonardo Lazcano wrote:
> Hi, does any one know how to load a private key and
> certificate(pfx format) in a signing context when
> certificate is password protected?
>
> I'm using C# and making calls to methods in dll, but
> method that loads certificate data:
>
> xmlSecCryptoAppKeyCertLoad(Key, FileName,
> xmlsecInterface.xmlSecKeyDataFormatPkcs12)
>
> doesn't allow a password, so there is another way to
> load private key and certificate data from a pfx file?
> or another xmlSecCryptoAppKeyCertLoad function that
> allows passwords?
>
>
>
> xmlsecInterface.xmlInitParser();
> //i =
> xmlsecInterface.xmlSubstituteEntitiesDefault(1);
> i = xmlsecInterface.xmlSecInit();
> //i = xmlsecInterface.xmlSecCheckVersion();
> i =
> xmlsecInterface.xmlSecCryptoDLLoadLibrary(cryptolib);
> i = xmlsecInterface.xmlSecCryptoAppInit(null);
> i = xmlsecInterface.xmlSecCryptoInit();
>
> p =
> System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(sXmlData);
> xmlData = (char *)p.ToPointer();
> document =
> xmlsecInterface.xmlParseMemory(xmlData,sXmlData.Length);
> if (document == IntPtr.Zero.ToPointer() ||
> xmlsecInterface.xmlDocGetRootElement(document) ==
> IntPtr.Zero.ToPointer())
> {
> MessageBox.Show("No se pudo cargar el xml");
> return;
> }
>
> signNode =
> xmlsecInterface.xmlSecTmplSignatureCreate(document,
> xmlsecInterface.xmlSecTransformExclC14NWithCommentsGetKlass(),
>
>
> xmlsecInterface.xmlSecTransformDsaSha1GetKlass(),(char
> *)IntPtr.Zero.ToPointer());
>
> if (signNode == IntPtr.Zero.ToPointer())
> {
> MessageBox.Show("No se pudo crear el nodo de
> firma");
> return;
> }
>
>
> xmlsecInterface.xmlAddChild(xmlsecInterface.xmlDocGetRootElement(document),
> signNode);
> refNode =
> xmlsecInterface.xmlSecTmplSignatureAddReference(signNode,
> xmlsecInterface.xmlSecTransformSha1GetKlass(),
> (char *)IntPtr.Zero.ToPointer(), (char
> *)IntPtr.Zero.ToPointer(), (char
> *)IntPtr.Zero.ToPointer());
>
> if (refNode == IntPtr.Zero.ToPointer())
> {
> MessageBox.Show("No se pudo crear la
> transformacion del SHA");
> return;
> }
>
> if
> (xmlsecInterface.xmlSecTmplReferenceAddTransform(refNode,
> xmlsecInterface.xmlSecTransformEnvelopedGetKlass()) ==
> IntPtr.Zero.ToPointer())
> {
> MessageBox.Show("No se pudo crear la
> transformacion de firma");
> return;
> }
>
> keyInfoNode =
> xmlsecInterface.xmlSecTmplSignatureEnsureKeyInfo(signNode,
> (char *)IntPtr.Zero.ToPointer());
> if (keyInfoNode == IntPtr.Zero.ToPointer())
> {
> MessageBox.Show("No se pudo crear el nodo
> keyinfo");
> return;
> }
>
> if
> (xmlsecInterface.xmlSecTmplKeyInfoAddX509Data(keyInfoNode)
> == IntPtr.Zero.ToPointer())
> {
> MessageBox.Show("No se pudo crear el nodo X509");
> return;
> }
>
> dsigCtx = (xmlSecDSigCtx
> *)xmlsecInterface.xmlSecDSigCtxCreate(IntPtr.Zero.ToPointer());
>
> if (dsigCtx == IntPtr.Zero.ToPointer())
> {
> MessageBox.Show("No se pudo crear el contexto de
> firma");
> return;
> }
>
>
> Key =
> xmlsecInterface.xmlSecOpenSSLAppPkcs12Load(FileName,
> pfxPass,
> xmlsecInterface.xmlSecCryptoAppGetDefaultPwdCallback(),
> dsigCtx);
> if (Key == IntPtr.Zero.ToPointer())
> {
> MessageBox.Show("No se pudo cargar la clave");
> return;
> }
>
> dsigCtx->signKey = Key;
>
> //always fail because the pfx file has password
> //if
> (xmlsecInterface.xmlSecCryptoAppKeyCertLoad(Key,
> FileName,
> xmlsecInterface.xmlSecKeyDataFormatPkcs12)<0)
> //{
> // MessageBox.Show("No se pudo cargar el
> certificado");
> //return;
> //}
>
> if ((i = xmlsecInterface.xmlSecDSigCtxSign(dsigCtx,
> signNode))<0)
> {
> MessageBox.Show("No se pudo firmar el xml");
> //return;
> }
>
>
> xmlsecInterface.xmlDocDumpMemory(document,
> &signedXml, &signedXmlSize);
>
> p = (IntPtr)signedXml;
>
> resultXml =
> System.Runtime.InteropServices.Marshal.PtrToStringAnsi(p);
> textBox2.Text = resultXml;
>
>
>
>
> Leonardo Lazcano.
>
>
>
> __________________________________
> Do you Yahoo!?
> Yahoo! Mail Address AutoComplete - You start. We finish.
> http://promotions.yahoo.com/new_mail
> _______________________________________________
> xmlsec mailing list
> xmlsec at aleksey.com
> http://www.aleksey.com/mailman/listinfo/xmlsec
More information about the xmlsec
mailing list