+++ /dev/null
-testing the NISCC test cases
-
--- testing client certs, use good server cert --------
-
-1. Set up server KC
-
- % rm -f ~/Library/Keychains/nisccServer
- % certtool i server_crt.pem k=nisccServer r=server_key.pem c
-
-2. Run server (from testcases dir)
-
- % sslServer l k=nisccServer P=1300 a rootca.crt u=t
-
- -- not u=t --> try auth
-
-3. Run client no auth
-
- % sv localhost P=1300 H a rootca.crt
-
- -- note 'H' - disable host name verify since server common name =
- "Simple Server"
-
-4. Set up client keychain
-
- % rm -f ~/Library/Keychains/nisccClient
- % certtool i client_crt.pem k=nisccClient r=client_key.pem c
-
-5. Run client w/auth
-
- % sv localhost P=1300 H a rootca.crt k=nisccClient
-
-6. Bad client
-
- # just once
- % pemtool d client_key.pem client_key.der
- #
- % rm -f ~/Library/Keychains/nisccClient
- % certtool i simple_client/00035377 k=nisccClient r=client_key.der c
- % sv localhost P=1300 H k=nisccClient x
-
- ...note 'x' avoids client checking its own bogus cert, and we don't have to specify
- an anchor
-
- result on client side = errSSLPeerCertUnknown
- clientCertState = ClientCertRejected
-
- result on server side = errSSLXCertChainInvalid
- clientCertState = ClientCertRejected
-
-7. Mods needed to uses these certs
-
- -- modified dbTool to allow importing a bad cert (via DL/DB, not Sec*)
- -- wrote simple client app, clxutils/NISCC/TLS_SSL/nisccSimpleClient
-
- -- also SecureTransport needs the following mod to ignore bad certs on client side
-
-===================================================================
-RCS file: /cvs/root/Security/SecureTransport/sslKeychain.cpp,v
-retrieving revision 1.5
-diff -u -r1.5 sslKeychain.cpp
---- sslKeychain.cpp 2003/04/25 19:40:18 1.5
-+++ sslKeychain.cpp 2003/11/10 21:20:14
-@@ -174,6 +174,11 @@
- /* FIXME = release keyRef? */
-
- /* obtain public key from cert */
-+ /*
-+ * FIXME : THIS IS TOTALLY UNNECESSARY WHEN PARSING OUR OWN CERTS, except
-+ * for the "separate signing and encryptionj certs" case. For now, to
-+ * facilitate NISCC testing, we ignore errors here.
-+ */
- ortn = SecCertificateGetCLHandle(certRef, &clHand);
- if(ortn) {
- sslErrorLog("parseIncomingCerts: SecCertificateGetCLHandle err %d\n",
-@@ -183,10 +188,12 @@
- certData.Data = thisSslCert->derCert.data;
- certData.Length = thisSslCert->derCert.length;
- crtn = CSSM_CL_CertGetKeyInfo(clHand, &certData, pubKey);
-+ #if 0
- if(crtn) {
- sslErrorLog("parseIncomingCerts: CSSM_CL_CertGetKeyInfo err\n");
- return (OSStatus)crtn;
- }
-+ #endif
-
- /* obtain keychain from key, CSP handle from keychain */
- ortn = SecKeychainItemCopyKeychain((SecKeychainItemRef)keyRef, &kcRef);
-
-........
-
-...with this in place cert 00070004 causes anything parsing it to get a seg fault.
-
-...........
-
-problems found:
-
-1. Processing SEC_ASN1_SAVE, the destination item is mallocd once, with the length
- of the top-level item to be saved. However data gets added to this item on a
- leaf-by-leaf basis so that if the sizes of the leaves adds up to greater than
- the stated/mallocd len of the otp-level item, overflow.
-
- -- verified by disabling the SAVE in TBS_Cert
- -- fixed using sec_asn1d_state.dest_alloc_len field to track alloc size in
- aggregate items
-
-..............
-
-certs known to crash the Panther Security.framework:
-
- "00000668",
- "00000681",
- "00001980",
- "00002040",
- "00007472",
- "00008064",
- "00008656",
- "00009840",
- "00010432",
- "00011614",
- "00011615",
- "00011616",