/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* ** certutil.c ** ** utility for managing certificates and the cert database **
*/ #include <stdio.h> #include <string.h> #include <stdlib.h>
/* Since cert request is a signed data, must decode to get the inner data
*/
PORT_Memset(&signedData, 0, sizeof(signedData));
rv = SEC_ASN1DecodeItem(arena, &signedData,
SEC_ASN1_GET(CERT_SignedDataTemplate), reqDER); if (rv) { break;
}
rv = SEC_ASN1DecodeItem(arena, certReq,
SEC_ASN1_GET(CERT_CertificateRequestTemplate), &signedData.data); if (rv) { break;
}
rv = CERT_VerifySignedDataWithPublicKeyInfo(&signedData,
&certReq->subjectPublicKeyInfo, pwarg);
} while (0);
if (rv) {
SECU_PrintError(progName, "bad certificate request\n"); if (arena) {
PORT_FreeArena(arena, PR_FALSE);
}
certReq = NULL;
}
do { /* Read in an ASCII cert and return a CERTCertificate */
cert = CERT_DecodeCertFromPackage((char *)certDER->data, certDER->len); if (!cert) {
SECU_PrintError(progName, "could not decode certificate");
GEN_BREAK(SECFailure);
}
/* Create a cert trust */
trust = (CERTCertTrust *)PORT_ZAlloc(sizeof(CERTCertTrust)); if (!trust) {
SECU_PrintError(progName, "unable to allocate cert trust");
GEN_BREAK(SECFailure);
}
rv = CERT_DecodeTrustString(trust, trusts); if (rv) {
SECU_PrintError(progName, "unable to decode trust string");
GEN_BREAK(SECFailure);
}
rv = PK11_ImportCert(slot, cert, CK_INVALID_HANDLE, name, PR_FALSE); if (rv != SECSuccess) { /* sigh, PK11_Import Cert and CERT_ChangeCertTrust should have
* been coded to take a password arg. */ if (PORT_GetError() == SEC_ERROR_TOKEN_NOT_LOGGED_IN) {
rv = PK11_Authenticate(slot, PR_TRUE, pwdata); if (rv != SECSuccess) {
SECU_PrintError(progName, "could not authenticate to token %s.",
PK11_GetTokenName(slot));
GEN_BREAK(SECFailure);
}
rv = PK11_ImportCert(slot, cert, CK_INVALID_HANDLE,
name, PR_FALSE);
} if (rv != SECSuccess) {
SECU_PrintError(progName, "could not add certificate to token or database");
GEN_BREAK(SECFailure);
}
}
rv = ChangeCertTrust(handle, cert, trust, slot, pwdata); if (rv != SECSuccess) {
SECU_PrintError(progName, "could not change trust on certificate");
GEN_BREAK(SECFailure);
}
if (emailcert) {
CERT_SaveSMimeProfile(cert, NULL, pwdata);
}
arena = PORT_NewArena(DER_DEFAULT_CHUNKSIZE); if (!arena) {
SECU_PrintError(progName, "out of memory"); return SECFailure;
}
/* Create info about public key */
spki = SECKEY_CreateSubjectPublicKeyInfo(pubk); if (!spki) {
PORT_FreeArena(arena, PR_FALSE);
SECU_PrintError(progName, "unable to create subject public key"); return SECFailure;
}
/* Change cert type to RSA-PSS, if desired. */ if (pssCertificate) {
params = SEC_CreateSignatureAlgorithmParameters(arena,
NULL,
SEC_OID_PKCS1_RSA_PSS_SIGNATURE,
hashAlgTag,
NULL,
privk); if (!params) {
PORT_FreeArena(arena, PR_FALSE);
SECKEY_DestroySubjectPublicKeyInfo(spki);
SECU_PrintError(progName, "unable to create RSA-PSS parameters"); return SECFailure;
}
cert = CERT_FindCertByNicknameOrEmailAddrCX(handle, name, pwdata); if (!cert) {
SECU_PrintError(progName, "could not find certificate named \"%s\"",
name); return SECFailure;
}
trust = (CERTCertTrust *)PORT_ZAlloc(sizeof(CERTCertTrust)); if (!trust) {
SECU_PrintError(progName, "unable to allocate cert trust"); return SECFailure;
}
/* This function only decodes these characters: pPwcTCu, */
rv = CERT_DecodeTrustString(trust, trusts); if (rv) {
SECU_PrintError(progName, "unable to decode trust string"); return SECFailure;
}
/* CERT_ChangeCertTrust API does not have a way to pass in * a context, so NSS can't prompt for the password if it needs to. * check to see if the failure was token not logged in and
* log in if need be. */
rv = ChangeCertTrust(handle, cert, trust, slot, pwdata); if (rv != SECSuccess) {
SECU_PrintError(progName, "unable to modify trust attributes"); return SECFailure;
}
CERT_DestroyCertificate(cert);
PORT_Free(trust);
/* List certs on a non-internal slot. */ if (!PK11_IsFriendly(slot) && PK11_NeedLogin(slot)) {
SECStatus newrv = PK11_Authenticate(slot, PR_TRUE, pwarg); if (newrv != SECSuccess) {
SECU_PrintError(progName, "could not authenticate to token %s.",
PK11_GetTokenName(slot)); return SECFailure;
}
} if (name) {
CERTCertificate *the_cert =
SECU_FindCertByNicknameOrFilename(handle, name, ascii, NULL); if (!the_cert) {
SECU_PrintError(progName, "Could not find cert: %s\n", name); return SECFailure;
} /* Here, we have one cert with the desired nickname or email * address. Now, we will attempt to get a list of ALL certs * with the same subject name as the cert we have. That list * should contain, at a minimum, the one cert we have already found. * If the list of certs is empty (NULL), the libraries have failed.
*/
certs = CERT_CreateSubjectCertList(NULL, handle, &the_cert->derSubject,
PR_Now(), PR_FALSE);
CERT_DestroyCertificate(the_cert); if (!certs) {
PORT_SetError(SEC_ERROR_LIBRARY_FAILURE);
SECU_PrintError(progName, "problem printing certificates"); return SECFailure;
} for (node = CERT_LIST_HEAD(certs); !CERT_LIST_END(node, certs);
node = CERT_LIST_NEXT(node)) {
rv = outputCertOrExtension(node->cert, raw, ascii, extensionOID,
outfile); if (rv != SECSuccess) { break;
}
}
} elseif (email) {
certs = PK11_FindCertsFromEmailAddress(email, NULL); if (!certs) {
SECU_PrintError(progName, "Could not find certificates for email address: %s\n",
email); return SECFailure;
} for (node = CERT_LIST_HEAD(certs); !CERT_LIST_END(node, certs);
node = CERT_LIST_NEXT(node)) {
rv = outputCertOrExtension(node->cert, raw, ascii, extensionOID,
outfile); if (rv != SECSuccess) { break;
}
}
} else {
certs = PK11_ListCertsInSlot(slot); if (certs) { for (node = CERT_LIST_HEAD(certs); !CERT_LIST_END(node, certs);
node = CERT_LIST_NEXT(node)) {
SECU_PrintCertNickname(node, stdout);
}
rv = SECSuccess;
}
} if (certs) {
CERT_DestroyCertList(certs);
} if (rv) {
SECU_PrintError(progName, "problem printing certificate nicknames"); return SECFailure;
}
/* output human readable key ID in buffer, which should have at least
* MAX_CKA_ID_STR_LEN + 3 octets (quotations and a null terminator) */ staticvoid
formatPrivateKeyID(SECKEYPrivateKey *privkey, char *buffer)
{
SECItem *ckaID;
/* * L i s t M o d u l e s * * Print a list of the PKCS11 modules that are * available. This is useful for smartcard people to * make sure they have the drivers loaded. *
*/ static SECStatus
ListModules(void)
{
PK11SlotList *list;
PK11SlotListElement *le;
/* get them all! */
list = PK11_GetAllTokens(CKM_INVALID_MECHANISM, PR_FALSE, PR_FALSE, NULL); if (list == NULL) return SECFailure;
/* look at each slot*/ for (le = list->head; le; le = le->next) { char *token_uri = PK11_GetTokenURI(le->slot);
printf("\n");
printf(" slot: %s\n", PK11_GetSlotName(le->slot));
printf(" token: %s\n", PK11_GetTokenName(le->slot));
printf(" uri: %s\n", token_uri);
PORT_Free(token_uri);
}
PK11_FreeSlotList(list);
staticvoid
luA(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "A")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Add a certificate to the database (create if needed)\n", "-A"); if (ul == usage_selected && !is_my_command) return; if (ul == usage_all) {
FPS "%-20s\n", " All options under -E apply");
} else {
luCommonDetailsAE();
}
}
staticvoid
luB(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "B")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Run a series of certutil commands from a batch file\n", "-B"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Specify the batch file\n", " -i batch-file");
}
staticvoid
luE(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "E")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Add an Email certificate to the database (create if needed)\n", "-E"); if (ul == usage_selected && !is_my_command) return;
luCommonDetailsAE();
}
staticvoid
luCommonDetailsAE()
{
FPS "%-20s Specify the nickname of the certificate to add\n", " -n cert-name");
FPS "%-20s Set the certificate trust attributes:\n", " -t trustargs");
FPS "%-25s trustargs is of the form x,y,z where x is for SSL, y is for S/MIME,\n", "");
FPS "%-25s and z is for code signing. Use ,, for no explicit trust.\n", "");
FPS "%-25s p \t prohibited (explicitly distrusted)\n", "");
FPS "%-25s P \t trusted peer\n", "");
FPS "%-25s c \t valid CA\n", "");
FPS "%-25s T \t trusted CA to issue client certs (implies c)\n", "");
FPS "%-25s C \t trusted CA to issue server certs (implies c)\n", "");
FPS "%-25s u \t user cert\n", "");
FPS "%-25s w \t send warning\n", "");
FPS "%-25s g \t make step-up cert\n", "");
FPS "%-20s Specify the password file\n", " -f pwfile");
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s The input certificate is encoded in ASCII (RFC1113)\n", " -a");
FPS "%-20s Specify the certificate file (default is stdin)\n", " -i input");
FPS "\n");
}
staticvoid
luC(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "C")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Create a new binary certificate from a BINARY cert request\n", "-C"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s The nickname of the issuer cert\n", " -c issuer-name");
FPS "%-20s The BINARY certificate request file\n", " -i cert-request ");
FPS "%-20s Output binary cert to this file (default is stdout)\n", " -o output-cert");
FPS "%-20s Self sign\n", " -x");
FPS "%-20s Sign the certificate with RSA-PSS (the issuer key must be rsa)\n", " --pss-sign");
FPS "%-20s Cert serial number\n", " -m serial-number");
FPS "%-20s Time Warp\n", " -w warp-months");
FPS "%-20s Months valid (default is 3)\n", " -v months-valid");
FPS "%-20s Specify the password file\n", " -f pwfile");
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s \n" "%-20s Specify the hash algorithm to use. Possible keywords:\n" "%-20s \"MD2\", \"MD4\", \"MD5\", \"SHA1\", \"SHA224\",\n" "%-20s \"SHA256\", \"SHA384\", \"SHA512\"\n", " -Z hashAlg", "", "", "");
FPS "%-20s \n" "%-20s Create key usage extension. Possible keywords:\n" "%-20s \"digitalSignature\", \"nonRepudiation\", \"keyEncipherment\",\n" "%-20s \"dataEncipherment\", \"keyAgreement\", \"certSigning\",\n" "%-20s \"crlSigning\", \"critical\"\n", " -1 | --keyUsage keyword,keyword,...", "", "", "", "");
FPS "%-20s Create basic constraint extension\n", " -2 ");
FPS "%-20s Create authority key ID extension\n", " -3 ");
FPS "%-20s Create crl distribution point extension\n", " -4 ");
FPS "%-20s \n" "%-20s Create netscape cert type extension. Possible keywords:\n" "%-20s \"sslClient\", \"sslServer\", \"smime\", \"objectSigning\",\n" "%-20s \"sslCA\", \"smimeCA\", \"objectSigningCA\", \"critical\".\n", " -5 | --nsCertType keyword,keyword,... ", "", "", "");
FPS "%-20s \n" "%-20s Create extended key usage extension. Possible keywords:\n" "%-20s \"serverAuth\", \"clientAuth\",\"codeSigning\",\n" "%-20s \"emailProtection\", \"timeStamp\",\"ocspResponder\",\n" "%-20s \"stepUp\", \"msTrustListSign\", \"x509Any\",\n" "%-20s \"ipsecIKE\", \"ipsecIKEEnd\", \"ipsecIKEIntermediate\",\n" "%-20s \"ipsecEnd\", \"ipsecTunnel\", \"ipsecUser\",\n" "%-20s \"critical\"\n", " -6 | --extKeyUsage keyword,keyword,...", "", "", "", "", "", "", "");
FPS "%-20s Create an email subject alt name extension\n", " -7 emailAddrs");
FPS "%-20s Create an dns subject alt name extension\n", " -8 dnsNames");
FPS "%-20s The input certificate request is encoded in ASCII (RFC1113)\n", " -a");
FPS "\n");
}
staticvoid
luG(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "G")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Generate a new key pair\n", "-G"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Name of token in which to generate key (default is internal)\n", " -h token-name");
FPS "%-20s Type of key pair to generate (\"dsa\", \"ec\", \"rsa\" (default))\n", " -k key-type");
FPS "%-20s Key size in bits, (min %d, max %d, default %d) (not for ec)\n", " -g key-size", MIN_KEY_BITS, MAX_KEY_BITS, DEFAULT_KEY_BITS);
FPS "%-20s Set the public exponent value (3, 17, 65537) (rsa only)\n", " -y exp");
FPS "%-20s Specify the password file\n", " -f password-file");
FPS "%-20s Specify the noise file to be used\n", " -z noisefile");
FPS "%-20s read PQG value from pqgfile (dsa only)\n", " -q pqgfile");
FPS "%-20s Elliptic curve name (ec only)\n", " -q curve-name");
FPS "%-20s One of nistp256, nistp384, nistp521, curve25519.\n", "");
FPS "%-20s If a custom token is present, the following curves are also supported:\n", "");
FPS "%-20s sect163k1, nistk163, sect163r1, sect163r2,\n", "");
FPS "%-20s nistb163, sect193r1, sect193r2, sect233k1, nistk233,\n", "");
FPS "%-20s sect233r1, nistb233, sect239k1, sect283k1, nistk283,\n", "");
FPS "%-20s sect283r1, nistb283, sect409k1, nistk409, sect409r1,\n", "");
FPS "%-20s nistb409, sect571k1, nistk571, sect571r1, nistb571,\n", "");
FPS "%-20s secp160k1, secp160r1, secp160r2, secp192k1, secp192r1,\n", "");
FPS "%-20s nistp192, secp224k1, secp224r1, nistp224, secp256k1,\n", "");
FPS "%-20s secp256r1, secp384r1, secp521r1,\n", "");
FPS "%-20s prime192v1, prime192v2, prime192v3, \n", "");
FPS "%-20s prime239v1, prime239v2, prime239v3, c2pnb163v1, \n", "");
FPS "%-20s c2pnb163v2, c2pnb163v3, c2pnb176v1, c2tnb191v1, \n", "");
FPS "%-20s c2tnb191v2, c2tnb191v3, \n", "");
FPS "%-20s c2pnb208w1, c2tnb239v1, c2tnb239v2, c2tnb239v3, \n", "");
FPS "%-20s c2pnb272w1, c2pnb304w1, \n", "");
FPS "%-20s c2tnb359w1, c2pnb368w1, c2tnb431r1, secp112r1, \n", "");
FPS "%-20s secp112r2, secp128r1, secp128r2, sect113r1, sect113r2\n", "");
FPS "%-20s sect131r1, sect131r2\n", "");
FPS "%-20s Key database directory (default is ~/.netscape)\n", " -d keydir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s\n" "%-20s PKCS #11 key Attributes.\n", " --keyAttrFlags attrflags", "");
FPS "%-20s Comma separated list of key attribute attribute flags,\n", "");
FPS "%-20s selected from the following list of choices:\n", "");
FPS "%-20s {token | session} {public | private} {sensitive | insensitive}\n", "");
FPS "%-20s {modifiable | unmodifiable} {extractable | unextractable}\n", "");
FPS "%-20s\n", " --keyOpFlagsOn opflags");
FPS "%-20s\n" "%-20s PKCS #11 key Operation Flags.\n", " --keyOpFlagsOff opflags", "");
FPS "%-20s Comma separated list of one or more of the following:\n", "");
FPS "%-20s encrypt, decrypt, sign, sign_recover, verify,\n", "");
FPS "%-20s verify_recover, wrap, unwrap, derive\n", "");
FPS "\n");
}
staticvoid
luD(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "D")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Delete a certificate from the database\n", "-D"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s The nickname of the cert to delete\n", " -n cert-name");
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "\n");
}
staticvoid
luF(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "F")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Delete a key and associated certificate from the database\n", "-F"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s The nickname of the key to delete\n", " -n cert-name");
FPS "%-20s The key id of the key to delete, obtained using -K\n", " -k key-id");
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "\n");
}
staticvoid
luU(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "U")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s List all modules\n", /*, or print out a single named module\n",*/ "-U"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Module database directory (default is '~/.netscape')\n", " -d moddir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s force the database to open R/W\n", " -X");
FPS "\n");
}
staticvoid
luK(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "K")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s List all private keys\n", "-K"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Name of token to search (\"all\" for all tokens)\n", " -h token-name ");
FPS "%-20s Key type (\"all\" (default), \"dsa\"," " \"ec\"," " \"rsa\")\n", " -k key-type");
FPS "%-20s The nickname of the key or associated certificate\n", " -n name");
FPS "%-20s Specify the password file\n", " -f password-file");
FPS "%-20s Key database directory (default is ~/.netscape)\n", " -d keydir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s force the database to open R/W\n", " -X");
FPS "\n");
}
staticvoid
luL(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "L")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s List all certs, or print out a single named cert (or a subset)\n", "-L"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Name of token to search (\"all\" for all tokens)\n", " -h token-name ");
FPS "%-20s Pretty print named cert (list all if unspecified)\n", " -n cert-name");
FPS "%-20s \n" "%-20s Pretty print cert with email address (list all if unspecified)\n", " --email email-address", "");
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s force the database to open R/W\n", " -X");
FPS "%-20s For single cert, print binary DER encoding\n", " -r");
FPS "%-20s For single cert, print ASCII encoding (RFC1113)\n", " -a");
FPS "%-20s \n" "%-20s For single cert, print binary DER encoding of extension OID\n", " --dump-ext-val OID", "");
FPS "\n");
}
staticvoid
luM(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "M")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Modify trust attributes of certificate\n", "-M"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s The nickname of the cert to modify\n", " -n cert-name");
FPS "%-20s Set the certificate trust attributes (see -A above)\n", " -t trustargs");
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "\n");
}
staticvoid
luN(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "N")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Create a new certificate database\n", "-N"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s Specify the password file\n", " -f password-file");
FPS "%-20s use empty password when creating a new database\n", " --empty-password");
FPS "\n");
}
staticvoid
luT(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "T")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Reset the Key database or token\n", "-T"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s Token to reset (default is internal)\n", " -h token-name");
FPS "%-20s Set token's Site Security Officer password\n", " -0 SSO-password");
FPS "\n");
}
staticvoid
luO(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "O")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Print the chain of a certificate\n", "-O"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s The nickname of the cert to modify\n", " -n cert-name");
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Input the certificate in ASCII (RFC1113); default is binary\n", " -a");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s force the database to open R/W\n", " -X");
FPS "%-20s don't search for a chain if issuer name equals subject name\n", " --simple-self-signed");
FPS "\n");
}
staticvoid
luR(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "R")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Generate a certificate request (stdout)\n", "-R"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Specify the subject name (using RFC1485)\n", " -s subject");
FPS "%-20s Output the cert request to this file\n", " -o output-req");
FPS "%-20s Type of key pair to generate (\"dsa\", \"ec\", \"rsa\" (default))\n", " -k key-type-or-id");
FPS "%-20s or nickname of the cert key to use, or key id obtained using -K\n", "");
FPS "%-20s Name of token in which to generate key (default is internal)\n", " -h token-name");
FPS "%-20s Key size in bits, RSA keys only (min %d, max %d, default %d)\n", " -g key-size", MIN_KEY_BITS, MAX_KEY_BITS, DEFAULT_KEY_BITS);
FPS "%-20s Create a certificate request restricted to RSA-PSS (rsa only)\n", " --pss");
FPS "%-20s Name of file containing PQG parameters (dsa only)\n", " -q pqgfile");
FPS "%-20s Elliptic curve name (ec only)\n", " -q curve-name");
FPS "%-20s See the \"-G\" option for a full list of supported names.\n", "");
FPS "%-20s Specify the password file\n", " -f pwfile");
FPS "%-20s Key database directory (default is ~/.netscape)\n", " -d keydir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s Specify the contact phone number (\"123-456-7890\")\n", " -p phone");
FPS "%-20s \n" "%-20s Specify the hash algorithm to use. Possible keywords:\n" "%-20s \"MD2\", \"MD4\", \"MD5\", \"SHA1\", \"SHA224\",\n" "%-20s \"SHA256\", \"SHA384\", \"SHA512\"\n", " -Z hashAlg", "", "", "");
FPS "%-20s Output the cert request in ASCII (RFC1113); default is binary\n", " -a");
FPS "%-20s \n", " See -S for available extension options");
FPS "%-20s \n", " See -G for available key flag options");
FPS "\n");
}
staticvoid
luV(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "V")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Validate a certificate\n", "-V"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s The nickname of the cert to Validate\n", " -n cert-name");
FPS "%-20s validity time (\"YYMMDDHHMMSS[+HHMM|-HHMM|Z]\")\n", " -b time");
FPS "%-20s Check certificate signature \n", " -e ");
FPS "%-20s Specify certificate usage:\n", " -u certusage");
FPS "%-25s C \t SSL Client\n", "");
FPS "%-25s V \t SSL Server\n", "");
FPS "%-25s I \t IPsec\n", "");
FPS "%-25s L \t SSL CA\n", "");
FPS "%-25s A \t Any CA\n", "");
FPS "%-25s Y \t Verify CA\n", "");
FPS "%-25s S \t Email signer\n", "");
FPS "%-25s R \t Email Recipient\n", "");
FPS "%-25s O \t OCSP status responder\n", "");
FPS "%-25s J \t Object signer\n", "");
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Input the certificate in ASCII (RFC1113); default is binary\n", " -a");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "%-20s force the database to open R/W\n", " -X");
FPS "\n");
}
staticvoid
luW(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "W")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Change the key database password\n", "-W"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s cert and key database directory\n", " -d certdir");
FPS "%-20s Specify a file with the current password\n", " -f pwfile");
FPS "%-20s Specify a file with the new password in two lines\n", " -@ newpwfile");
FPS "\n");
}
staticvoid
luRename(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "rename")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Change the database nickname of a certificate\n", "--rename"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s The old nickname of the cert to rename\n", " -n cert-name");
FPS "%-20s The new nickname of the cert to rename\n", " --new-n new-name");
FPS "%-20s Cert database directory (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix\n", " -P dbprefix");
FPS "\n");
}
staticvoid
luUpgradeMerge(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "upgrade-merge")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Upgrade an old database and merge it into a new one\n", "--upgrade-merge"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Cert database directory to merge into (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix of the target database\n", " -P dbprefix");
FPS "%-20s Specify the password file for the target database\n", " -f pwfile");
FPS "%-20s \n%-20s Cert database directory to upgrade from\n", " --source-dir certdir", "");
FPS "%-20s \n%-20s Cert & Key database prefix of the upgrade database\n", " --source-prefix dbprefix", "");
FPS "%-20s \n%-20s Unique identifier for the upgrade database\n", " --upgrade-id uniqueID", "");
FPS "%-20s \n%-20s Name of the token while it is in upgrade state\n", " --upgrade-token-name name", "");
FPS "%-20s Specify the password file for the upgrade database\n", " -@ pwfile");
FPS "\n");
}
staticvoid
luMerge(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "merge")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Merge source database into the target database\n", "--merge"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Cert database directory of target (default is ~/.netscape)\n", " -d certdir");
FPS "%-20s Cert & Key database prefix of the target database\n", " -P dbprefix");
FPS "%-20s Specify the password file for the target database\n", " -f pwfile");
FPS "%-20s \n%-20s Cert database directory of the source database\n", " --source-dir certdir", "");
FPS "%-20s \n%-20s Cert & Key database prefix of the source database\n", " --source-prefix dbprefix", "");
FPS "%-20s Specify the password file for the source database\n", " -@ pwfile");
FPS "\n");
}
staticvoid
luS(enum usage_level ul, constchar *command)
{ int is_my_command = (command && 0 == strcmp(command, "S")); if (ul == usage_all || !command || is_my_command)
FPS "%-15s Make a certificate and add to database\n", "-S"); if (ul == usage_selected && !is_my_command) return;
FPS "%-20s Specify the nickname of the cert\n", " -n key-name");
FPS "%-20s Specify the subject name (using RFC1485)\n", " -s subject");
FPS "%-20s The nickname of the issuer cert\n", " -c issuer-name");
FPS "%-20s Set the certificate trust attributes (see -A above)\n", " -t trustargs");
FPS "%-20s Type of key pair to generate (\"dsa\", \"ec\", \"rsa\" (default))\n", " -k key-type-or-id");
FPS "%-20s Name of token in which to generate key (default is internal)\n", " -h token-name");
FPS "%-20s Key size in bits, RSA keys only (min %d, max %d, default %d)\n", " -g key-size", MIN_KEY_BITS, MAX_KEY_BITS, DEFAULT_KEY_BITS);
FPS "%-20s Create a certificate restricted to RSA-PSS (rsa only)\n", " --pss");
FPS "%-20s Name of file containing PQG parameters (dsa only)\n",
--> --------------------
--> maximum size reached
--> --------------------
Messung V0.5
¤ Dauer der Verarbeitung: 0.39 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.