security/nss/lib/pki/doc/standoc.html

Wed, 31 Dec 2014 06:55:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:55:50 +0100
changeset 2
7e26c7da4463
permissions
-rw-r--r--

Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2

michael@0 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
michael@0 2 <html>
michael@0 3 <head>
michael@0 4 <!-- This Source Code Form is subject to the terms of the Mozilla Public
michael@0 5 - License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 6 - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
michael@0 7
michael@0 8
michael@0 9 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
michael@0 10 <title>Stan Design - Work In Progress</title>
michael@0 11 </head>
michael@0 12 <body>
michael@0 13 <br>
michael@0 14 This is a working document for progress on Stan design/development.<br>
michael@0 15 <br>
michael@0 16 Current <a href="#build">build</a>
michael@0 17 and <a href="#test">test</a>
michael@0 18 instructions.<br>
michael@0 19 <br>
michael@0 20 The current set of Stan libraries.<br>
michael@0 21 <a href="#asn1">asn1</a>
michael@0 22 <br>
michael@0 23 <a href="#base">base</a>
michael@0 24 <br>
michael@0 25 <a href="#ckfw">ckfw</a>
michael@0 26 <br>
michael@0 27 <a href="#dev">dev</a>
michael@0 28 <br>
michael@0 29 <a href="#pki">pki</a>
michael@0 30 <br>
michael@0 31 <a href="#pki1">pki1</a>
michael@0 32 <br>
michael@0 33 <a href="#pkix">pkix</a>
michael@0 34 <br>
michael@0 35 <br>
michael@0 36 "Public" types below (those available to consumers of
michael@0 37 NSS) begin with "NSS". &nbsp;"Protected" types (those only available
michael@0 38 within NSS) begin with "nss".<br>
michael@0 39 <br>
michael@0 40 Open issues appears as numbered indents.<br>
michael@0 41 <br>
michael@0 42 <br>
michael@0 43
michael@0 44 <hr width="100%" size="2" align="Left"><br>
michael@0 45
michael@0 46 <h3><a name="asn1"></a>
michael@0 47 <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/asn1/">
michael@0 48 ASN.1</a>
michael@0 49 </h3>
michael@0 50 ASN.1 encoder/decoder wrapping around the current
michael@0 51 ASN.1 implementation.<br>
michael@0 52 <br>
michael@0 53 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSASN1EncodingType"> NSSASN1EncodingType</a>
michael@0 54 <br>
michael@0 55 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1Item">nssASN1Item</a>
michael@0 56 <br>
michael@0 57 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1Template">nssASN1Template</a>
michael@0 58 <br>
michael@0 59 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1ChooseTemplateFunction">
michael@0 60 nssASN1ChooseTemplateFunction</a>
michael@0 61 <br>
michael@0 62 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1Encoder">nssASN1Encoder</a>
michael@0 63 <br>
michael@0 64 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1Decoder">nssASN1Decoder</a>
michael@0 65 <br>
michael@0 66 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1EncodingPart"> nssASN1EncodingPart</a>
michael@0 67 <br>
michael@0 68 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1NotifyFunction">
michael@0 69 nssASN1NotifyFunction</a>
michael@0 70 <br>
michael@0 71 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1EncoderWriteFunction">
michael@0 72 nssASN1EncoderWriteFunction</a>
michael@0 73 <br>
michael@0 74 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssASN1DecoderFilterFunction">
michael@0 75 nssASN1DecoderFilterFunction</a>
michael@0 76 <br>
michael@0 77 <br>
michael@0 78
michael@0 79 <hr width="100%" size="2" align="Left">
michael@0 80 <h3><a name="base"></a>
michael@0 81 <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/base/">
michael@0 82 Base</a>
michael@0 83 </h3>
michael@0 84 Set of base utilities for Stan implementation.
michael@0 85 &nbsp;These are all fairly straightforward, except for nssPointerTracker.<br>
michael@0 86 <br>
michael@0 87 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSError">NSSError</a>
michael@0 88 <br>
michael@0 89 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSArena">NSSArena</a>
michael@0 90 <br>
michael@0 91 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSItem">NSSItem</a>
michael@0 92 <br>
michael@0 93 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSBER">NSSBER</a>
michael@0 94 <br>
michael@0 95 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSDER">NSSDER</a>
michael@0 96 <br>
michael@0 97 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSBitString">NSSBitString</a>
michael@0 98 <br>
michael@0 99 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSUTF8">NSSUTF8</a>
michael@0 100 <br>
michael@0 101 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSASCII7">NSSASCII7</a>
michael@0 102 <br>
michael@0 103 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssArenaMark">nssArenaMark</a>
michael@0 104 <br>
michael@0 105 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssPointerTracker">nssPointerTracker</a>
michael@0 106 <br>
michael@0 107 This is intended for debug builds only.<br>
michael@0 108
michael@0 109 <ol>
michael@0 110 <li>Ignored for now.<br>
michael@0 111 </li>
michael@0 112
michael@0 113 </ol>
michael@0 114 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssStringType">nssStringType</a>
michael@0 115 <br>
michael@0 116 <br>
michael@0 117 Suggested additions:<br>
michael@0 118
michael@0 119 <ol>
michael@0 120 <li>nssList - A list that optionally uses a lock. &nbsp;This list would
michael@0 121 manage the currently loaded modules in a trust domain, etc.</li>
michael@0 122
michael@0 123 <ul>
michael@0 124 <li>SECMODListLock kept track of the number of waiting threads. &nbsp;Will
michael@0 125 this be needed in the trust domain?</li>
michael@0 126
michael@0 127 </ul>
michael@0 128
michael@0 129 </ol>
michael@0 130 <br>
michael@0 131
michael@0 132 <hr width="100%" size="2" align="Left">
michael@0 133 <h3><a name="ckfw"></a>
michael@0 134 <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/">
michael@0 135 CKFW</a>
michael@0 136 </h3>
michael@0 137 The cryptoki framework, used for building cryptoki tokens.
michael@0 138 &nbsp;This needs to be described in a separate document showing how
michael@0 139 to set up a token using CKFW. &nbsp;This code only relates to tokens,
michael@0 140 so it is not relevant here.<br>
michael@0 141 <br>
michael@0 142 <br>
michael@0 143
michael@0 144 <hr width="100%" size="2" align="Left">
michael@0 145 <h3><a name="dev"></a>
michael@0 146 <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/dev/">
michael@0 147 Device</a>
michael@0 148 </h3>
michael@0 149 Defines cryptoki devices used in NSS. &nbsp;This
michael@0 150 is not part of the exposed API. &nbsp;It is a low-level API allowing
michael@0 151 NSS to manage cryptoki devices.<br>
michael@0 152 <br>
michael@0 153 The relationship is like this:<br>
michael@0 154 <br>
michael@0 155 libpki --&gt; libdev --&gt; cryptoki<br>
michael@0 156 <br>
michael@0 157 As an example,<br>
michael@0 158 <br>
michael@0 159 NSSTrustDomain_FindCertificate --&gt; NSSToken_FindCertificate --&gt;
michael@0 160 C_FindObjects<br>
michael@0 161 <br>
michael@0 162 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSModule">NSSModule</a>
michael@0 163 <br>
michael@0 164 Replaces the SECMOD API. &nbsp;The module manages a
michael@0 165 PRLibrary that holds a cryptoki implementation via a number of slots.
michael@0 166 &nbsp;The API should provide the ability to Load and Unload a module,
michael@0 167 Login and Logout to the module (through its slots), and to locate a
michael@0 168 particular slot/token.<br>
michael@0 169 <br>
michael@0 170 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSSlot">NSSSlot</a>
michael@0 171 <br>
michael@0 172 This and NSSToken combine to replace the PK11 API parts
michael@0 173 that relate to slot and token management. &nbsp;The slot API should
michael@0 174 provide the ability to Login/Logout to a slot, check the login status,
michael@0 175 determine basic configuration information about the slot, and modify
michael@0 176 the password settings.<br>
michael@0 177
michael@0 178 <ol>
michael@0 179 <li>Should slots also maintain a default session? &nbsp;This session would
michael@0 180 be used for slot management calls (sections 9.5 and9.6 of PKCS#11). &nbsp;Or
michael@0 181 is the token session sufficient (this would not work if C_GetTokenInfo and
michael@0 182 C_InitToken need to be wrapped in a threadsafe session).<br>
michael@0 183 </li>
michael@0 184
michael@0 185 </ol>
michael@0 186 <br>
michael@0 187 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSToken">NSSToken</a>
michael@0 188 <br>
michael@0 189 Fills in the gaps left by NSSSlot. &nbsp;Much of the
michael@0 190 cryptoki API is directed towards slots. &nbsp;However, some functionality
michael@0 191 clearly belongs with a token type. &nbsp;For example, a certificate
michael@0 192 lives on a token, not a slot, so one would expect a function NSSToken_FindCertificate.
michael@0 193 &nbsp;Thus functions that deal with importing/exporting an object
michael@0 194 and performing actual cryptographic operations belong here.<br>
michael@0 195
michael@0 196 <ol>
michael@0 197 <li>The distinction between a slot and a token is not clear. &nbsp;Most
michael@0 198 functions take a slotID as an argument, even though it is obvious that
michael@0 199 the event is intended to occur on a token. &nbsp;That leaves various
michael@0 200 possibilities:</li>
michael@0 201
michael@0 202 <ol>
michael@0 203 <li>Implement the API entirely as NSSToken. &nbsp;If the token is not
michael@0 204 present, some calls will simply fail.</li>
michael@0 205 <li>Divide the API between NSSToken and NSSSlot, as described above.
michael@0 206 &nbsp;NSSSlot would handle cryptoki calls specified as "slot management",
michael@0 207 while NSSToken handles actual token operations.</li>
michael@0 208 <li>Others?</li>
michael@0 209
michael@0 210 </ol>
michael@0 211 <li>Session management. &nbsp;Tokens needs a threadsafe session handle
michael@0 212 to perform operations. &nbsp;CryptoContexts are meant to provide such sessions,
michael@0 213 but other objects will need access to token functions as well (examples:
michael@0 214 the TrustDomain_Find functions, _Login, _Logout, and others that do not exist
michael@0 215 such as NSSToken_ChangePassword). &nbsp;For those functions, the token could
michael@0 216 maintain a default session. &nbsp;Thus all NSSToken API functions would take
michael@0 217 sessionOpt as an argument. &nbsp;If the caller is going to provide a session,
michael@0 218 it sends an NSSSession there, otherwise it sends NULL and the default session
michael@0 219 is utilized.<br>
michael@0 220 </li>
michael@0 221
michael@0 222 </ol>
michael@0 223 Proposed:<br>
michael@0 224 NSSSession<br>
michael@0 225 Wraps a Cryptoki session. &nbsp;Created from a slot. &nbsp;Used to manage
michael@0 226 sessions for crypto contexts. &nbsp;Has a lock field, which locks the session
michael@0 227 if the slot is not threadsafe.<br>
michael@0 228 <br>
michael@0 229
michael@0 230 <hr width="100%" size="2" align="Left"><br>
michael@0 231
michael@0 232 <h3><a name="pki"></a>
michael@0 233 <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pki/">
michael@0 234 PKI</a>
michael@0 235 </h3>
michael@0 236 The NSS PKI library.<br>
michael@0 237 <br>
michael@0 238 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSCertificate">NSS</a>
michael@0 239 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSCertificate">Certificate</a>
michael@0 240 <br>
michael@0 241
michael@0 242 <ol>
michael@0 243 <li>The API leaves open the possibility of NSSCertificate meaning various
michael@0 244 certificate types, not just X.509. &nbsp;The way to keep open this possibility
michael@0 245 is to keep only generally useful information in the NSSCertificate type.
michael@0 246 &nbsp;Examples would be the certificate encoding, label, trust (obtained
michael@0 247 from cryptoki calls), an email address, etc. &nbsp;Some type of generic
michael@0 248 reference should be kept to the decoded certificate, which would then be
michael@0 249 accessed by a type-specific API (e.g., NSSX509_GetSubjectName).</li>
michael@0 250
michael@0 251 </ol>
michael@0 252 <br>
michael@0 253 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSUserCertificate">NSSUserCertificate</a>
michael@0 254 <br>
michael@0 255
michael@0 256 <ol>
michael@0 257 <li>Should this be a typedef of NSSCertificate?&nbsp; This implies that
michael@0 258 any function that requires an NSSUserCertificate would fail when called
michael@0 259 with a certificate lacking a private key. </li>
michael@0 260
michael@0 261 </ol>
michael@0 262 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSPrivateKey">NSSPrivateKey</a>
michael@0 263 <br>
michael@0 264 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSPublicKey">NSSPublicKey</a>
michael@0 265 <br>
michael@0 266 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSSymmetricKey">NSSSymmetricKey</a>
michael@0 267 <br>
michael@0 268 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSTrustDomain">NSSTrustDomain</a>
michael@0 269 <br>
michael@0 270 A trust domain is "the field in which certificates may
michael@0 271 be validated." &nbsp;It is a collection of modules capable of performing
michael@0 272 cryptographic operations and storing certs and keys. &nbsp;This collection
michael@0 273 is managed by NSS in a manner opaque to the consumer. &nbsp;The slots
michael@0 274 will have various orderings determining which has preference for a
michael@0 275 given operation. &nbsp;For example, the trust domain may order the storage
michael@0 276 of user certificates one way, and the storage of email certificates in
michael@0 277 another way [is that a good example?].<br>
michael@0 278 <br>
michael@0 279
michael@0 280 <ol>
michael@0 281 <li> How will ordering work? &nbsp;We already have the suggestion
michael@0 282 that there be two kinds of ordering: storage and search. &nbsp;How
michael@0 283 will they be constructed/managed? &nbsp;Do we want to expose access
michael@0 284 to a token that overrides this ordering (i.e., the download of updated
michael@0 285 root certs may need to override storage order)</li>
michael@0 286 <li>How are certs cached? &nbsp;Nelson wonders what it means to Stan
michael@0 287 when a cert does not live on a token yet. &nbsp;Bob, Terry, and I discussed
michael@0 288 this. &nbsp;My conclusion is that there should be a type, separate
michael@0 289 from NSSCertificate, that holds the decoded cert parts (e.g., NSSX509Certificate,
michael@0 290 or to avoid confusion, NSSX509DecodedParts). &nbsp;NSSCertificate would
michael@0 291 keep a handle to this type, so that it only needs to decode the cert
michael@0 292 once. &nbsp;The NSSTrustDomain would keep a hash table of cached certs,
michael@0 293 some of which may not live on a token yet (i.e., they are only NSSX509DecodedParts).
michael@0 294 &nbsp;This cache could be accessed in the same way the temp db was,
michael@0 295 and when the cert is ready to be moved onto a token a call to NSSTrustDomain_ImportCertificate
michael@0 296 is made. &nbsp;Note that this is essentially the same as CERT_TempCertToPerm.</li>
michael@0 297
michael@0 298 <ul>
michael@0 299 <li>The hashtable in lib/base (copied from ckfw/hash.c) uses the identity
michael@0 300 hash. &nbsp;Therefore, in a hash of certificates, the key is the certificate
michael@0 301 pointer itself. &nbsp;One possibility is to store the decoded cert (NSSX509DecodedParts
michael@0 302 above) as the value in the {key, value} pair. &nbsp;When a cert is decoded,
michael@0 303 the cert pointer and decoding pointer are added to the hash. &nbsp;Subsequent
michael@0 304 lookups have access to one or both of these pointers. &nbsp;This keeps NSSCertificate
michael@0 305 separate from its decoding, while providing a way to locate it.</li>
michael@0 306
michael@0 307 </ul>
michael@0 308 <li>The API is designed to keep token details hidden from the user. &nbsp;However,
michael@0 309 it has already been realized that PSM and CMS may need special access to
michael@0 310 tokens. &nbsp;Is this part of the TrustDomain API, or should PSM and CMS
michael@0 311 be allowed to use "friend" headers from the Token API?</li>
michael@0 312 <li>Do we want to allow traversal via NSSTrustDomain_TraverseXXXX?<br>
michael@0 313 </li>
michael@0 314
michael@0 315 </ol>
michael@0 316 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSCryptoContext"><br>
michael@0 317 NSSCryptoContext</a>
michael@0 318 <br>
michael@0 319 Analgous to a Cryptoki session. &nbsp;Manages session objects only.<br>
michael@0 320 <br>
michael@0 321 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSTime">NSSTime</a>
michael@0 322 <br>
michael@0 323 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSUsage">NSSUsage</a>
michael@0 324 <br>
michael@0 325
michael@0 326 <ol>
michael@0 327 <li> See Fred's <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pki/nsspkit.h#187">
michael@0 328 comments</a>
michael@0 329 .</li>
michael@0 330
michael@0 331 </ol>
michael@0 332 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSPolicies">NSSPolicies</a>
michael@0 333 <br>
michael@0 334 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSAlgorithmAndParameters">
michael@0 335 NSSAlgorithmAndParameters</a>
michael@0 336 <br>
michael@0 337
michael@0 338 <ol>
michael@0 339 <li> Again, Fred's <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pki/nsspkit.h#215">
michael@0 340 comments</a>
michael@0 341 . &nbsp;The old NSS code had various types related to algorithms
michael@0 342 running around in it. &nbsp;We had SECOidTag, SECAlgorithmID, SECItem's
michael@0 343 for parameters, CK_MECHANISM for cryptoki, etc. &nbsp;This type should
michael@0 344 be able to encapsulate all of those.</li>
michael@0 345
michael@0 346 </ol>
michael@0 347 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSCallback">NSSCallback</a>
michael@0 348 <br>
michael@0 349 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSOperations">NSSOperations</a>
michael@0 350 <br>
michael@0 351 <br>
michael@0 352 <br>
michael@0 353
michael@0 354 <hr width="100%" size="2"><br>
michael@0 355 <br>
michael@0 356 A diagram to suggest a possible TrustDomain architecture.<br>
michael@0 357 <br>
michael@0 358 <img src="./standiag.png" alt="Trust Domain Diagram" width="748" height="367">
michael@0 359 <br>
michael@0 360
michael@0 361 <hr width="100%" size="2" align="Left"><br>
michael@0 362
michael@0 363 <h3><a name="pki1"></a>
michael@0 364 <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pki1/">
michael@0 365 PKI1</a>
michael@0 366 </h3>
michael@0 367 <br>
michael@0 368 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSOID">NSSOID</a>
michael@0 369 <br>
michael@0 370 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSATAV">NSSATAV</a>
michael@0 371 <br>
michael@0 372 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSRDN">NSSRDN</a>
michael@0 373 <br>
michael@0 374 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSRDNSeq">NSSRDNSeq</a>
michael@0 375 <br>
michael@0 376 <a href="http://lxr.mozilla.org/mozilla/ident?i=NSSName">NSSName</a>
michael@0 377 <br>
michael@0 378 NSSNameChoice<br>
michael@0 379 NSSGeneralName<br>
michael@0 380 NSSGeneralNameChoice<br>
michael@0 381 NSSOtherName<br>
michael@0 382 NSSRFC822Name<br>
michael@0 383 NSSDNSName<br>
michael@0 384 NSSX400Address<br>
michael@0 385 NSSEdiParityAddress<br>
michael@0 386 NSSURI<br>
michael@0 387 NSSIPAddress<br>
michael@0 388 NSSRegisteredID<br>
michael@0 389 NSSGeneralNameSeq<br>
michael@0 390 <a href="http://lxr.mozilla.org/mozilla/ident?i=nssAttributeTypeAliasTable">
michael@0 391 nssAttributeTypeAliasTable</a>
michael@0 392 <br>
michael@0 393 <br>
michael@0 394 <br>
michael@0 395
michael@0 396 <hr width="100%" size="2" align="Left"><br>
michael@0 397
michael@0 398 <h3><a name="pkix"></a>
michael@0 399 <a href="http://lxr.mozilla.org/mozilla/source/security/nss/lib/pkix/">
michael@0 400 PKIX&nbsp;</a>
michael@0 401 </h3>
michael@0 402 There is a plethora of PKIX related types here.<br>
michael@0 403 <br>
michael@0 404
michael@0 405 <hr width="100%" size="2" align="Left"><br>
michael@0 406
michael@0 407 <h3><a name="build"></a>
michael@0 408 Building Stan</h3>
michael@0 409 <br>
michael@0 410 From nss/lib, run "make BUILD_STAN=1"<br>
michael@0 411 <br>
michael@0 412
michael@0 413 <hr width="100%" size="2" align="Left"><br>
michael@0 414
michael@0 415 <h3><a name="test"></a>
michael@0 416 Testing Stan</h3>
michael@0 417 A&nbsp;new command line tool, pkiutil, has been created to use only
michael@0 418 the Stan API. &nbsp;It depends on a new library, cmdlib, meant to replace
michael@0 419 the old secutil library. &nbsp;The old library had code used by products
michael@0 420 that needed to be integrated into the main library codebase somehow. &nbsp;The
michael@0 421 goal of the new cmdlib is to have functionality needed strictly for NSS
michael@0 422 tools.<br>
michael@0 423 <br>
michael@0 424 How to build:<br>
michael@0 425
michael@0 426 <ol>
michael@0 427 <li>cd nss/cmd/cmdlib; make</li>
michael@0 428 <li>cd ../pkiutil; make</li>
michael@0 429
michael@0 430 </ol>
michael@0 431 pkiutil will give detailed help with either "pkiutil -?" or "pkiutil
michael@0 432 --help".<br>
michael@0 433 <br>
michael@0 434 So far, the only available test is to list certs on the builtins token.
michael@0 435 &nbsp;Copy "libnssckbi.so" (or whatever it is) to cmd/pkiutil. &nbsp;Then
michael@0 436 run "pkiutil -L" or "pkiutil --list". &nbsp;The list of certificate nicknames
michael@0 437 should be displayed.<br>
michael@0 438 <br>
michael@0 439 <br>
michael@0 440
michael@0 441 </body>
michael@0 442 </html>

mercurial