File: xmlsec-notes-sign-x509.html

package info (click to toggle)
xmlsec1 1.3.7-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 19,916 kB
  • sloc: ansic: 100,493; xml: 19,156; sh: 8,079; makefile: 1,186; javascript: 438; perl: 199
file content (123 lines) | stat: -rw-r--r-- 5,854 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Signing data with X509 certificate.: XML Security Library Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="XML Security Library Reference Manual">
<link rel="up" href="xmlsec-notes-x509.html" title="Using X509 Certificates.">
<link rel="prev" href="xmlsec-notes-x509.html" title="Using X509 Certificates.">
<link rel="next" href="xmlsec-notes-verify-x509.html" title="Verifing document signed with X509 certificates.">
<meta name="generator" content="GTK-Doc V1.34.0 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="xmlsec-notes-x509.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="xmlsec-notes-x509.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="xmlsec-notes-verify-x509.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="sect1">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="xmlsec-notes-sign-x509"></a>Signing data with X509 certificate.</h2></div></div></div>
<p>To sign a file using X509 certificate, 
	an application need to associate the certificate (or certificates) 
	with the private key using one of the following functions:
	</p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem"><p>
	    <a class="link" href="xmlsec-openssl-app.html#xmlSecOpenSSLAppKeyCertLoad" title="xmlSecOpenSSLAppKeyCertLoad ()">xmlSecOpenSSLAppKeyCertLoad</a> - loads
	    certificate from a file and adds to the key;
	    </p></li>
<li class="listitem"><p>
	    <a class="link" href="xmlsec-openssl-app.html#xmlSecOpenSSLAppPkcs12Load" title="xmlSecOpenSSLAppPkcs12Load ()">xmlSecOpenSSLAppPkcs12Load</a> -
	    loads private key and all the certificates associated with it from a PKCS12 file;
	    </p></li>
<li class="listitem"><p>
	    <a class="link" href="xmlsec-keys.html#xmlSecKeyAdoptData" title="xmlSecKeyAdoptData ()">xmlSecKeyAdoptData</a> - low level
	    function to add key data (including X509 key data) to the key.
	    </p></li>
</ul></div>
<p>	    
	</p>
<div class="example">
<a name="id-1.2.11.3.2.2"></a><p class="title"><b>Example 20. Loading private key and X509 certificate.</b></p>
<div class="example-contents">
<pre class="programlisting">
    /* load private key, assuming that there is not password */
    key = xmlSecCryptoAppKeyLoad(key_file, xmlSecKeyDataFormatPem, NULL, NULL, NULL);
    if(key == NULL) {
        fprintf(stderr,"Error: failed to load private pem key from \"%s\"\n", key_file);
	goto done;
    }
    
    /* load certificate and add to the key */
    if(xmlSecCryptoAppKeyCertLoad(key, cert_file, xmlSecKeyDataFormatPem) &lt; 0) {
        fprintf(stderr,"Error: failed to load pem certificate \"%s\"\n", cert_file);
	goto done;
    }
	    </pre>
<p><a class="link" href="xmlsec-examples-sign-x509.html#xmlsec-example-sign3" title="sign3.c">Full program listing</a></p>
</div>
</div>
<p><br class="example-break">
	</p>
<p>Next step is to prepare signature template with &lt;dsig:X509Data/&gt;
	child of the &lt;dsig:KeyInfo/&gt; element. When XML Security Library finds
	this node in the template, it automaticaly creates &lt;dsig:X509Certificate/&gt; 
	children of the &lt;dsig:X509Data/&gt; element and writes to result XML document
	all the certificates associated with the signature key. 
	</p>
<div class="example">
<a name="id-1.2.11.3.3.1"></a><p class="title"><b>Example 21. Dynamicaly creating a signature template for signing document using X509 certificate.</b></p>
<div class="example-contents">
<pre class="programlisting">
    /* create signature template for RSA-SHA1 enveloped signature */
    signNode = xmlSecTmplSignatureCreate(doc, xmlSecTransformExclC14NId,
				         xmlSecTransformRsaSha1Id, NULL);
    if(signNode == NULL) {
	fprintf(stderr, "Error: failed to create signature template\n");
	goto done;		
    }

    /* add &lt;dsig:Signature/&gt; node to the doc */
    xmlAddChild(xmlDocGetRootElement(doc), signNode);
    
    /* add reference */
    refNode = xmlSecTmplSignatureAddReference(signNode, xmlSecTransformSha1Id,
					NULL, NULL, NULL);
    if(refNode == NULL) {
	fprintf(stderr, "Error: failed to add reference to signature template\n");
	goto done;		
    }

    /* add enveloped transform */
    if(xmlSecTmplReferenceAddTransform(refNode, xmlSecTransformEnvelopedId) == NULL) {
	fprintf(stderr, "Error: failed to add enveloped transform to reference\n");
	goto done;		
    }
    
    /* add &lt;dsig:KeyInfo/&gt; and &lt;dsig:X509Data/&gt; */
    keyInfoNode = xmlSecTmplSignatureEnsureKeyInfo(signNode, NULL);
    if(keyInfoNode == NULL) {
	fprintf(stderr, "Error: failed to add key info\n");
	goto done;		
    }
    
    if(xmlSecTmplKeyInfoAddX509Data(keyInfoNode) == NULL) {
	fprintf(stderr, "Error: failed to add X509Data node\n");
	goto done;		
    }
	    </pre>
<p><a class="link" href="xmlsec-examples-sign-x509.html#xmlsec-example-sign3" title="sign3.c">Full program listing</a></p>
</div>
</div>
<p><br class="example-break">
	</p>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.34.0</div>
</body>
</html>