summaryrefslogtreecommitdiffstats
path: root/doc/invoke-p11tool.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/invoke-p11tool.texi')
-rw-r--r--doc/invoke-p11tool.texi626
1 files changed, 626 insertions, 0 deletions
diff --git a/doc/invoke-p11tool.texi b/doc/invoke-p11tool.texi
new file mode 100644
index 0000000..53009bf
--- /dev/null
+++ b/doc/invoke-p11tool.texi
@@ -0,0 +1,626 @@
+@node p11tool Invocation
+@subsection Invoking p11tool
+@pindex p11tool
+
+Program that allows operations on PKCS #11 smart cards
+and security modules.
+
+To use PKCS #11 tokens with GnuTLS the p11-kit configuration files need to be setup.
+That is create a .module file in /etc/pkcs11/modules with the contents 'module: /path/to/pkcs11.so'.
+Alternatively the configuration file /etc/gnutls/pkcs11.conf has to exist and contain a number
+of lines of the form 'load=/usr/lib/opensc-pkcs11.so'.
+
+You can provide the PIN to be used for the PKCS #11 operations with the environment variables
+GNUTLS_PIN and GNUTLS_SO_PIN.
+
+
+@anchor{p11tool usage}
+@subsubheading p11tool help/usage (@option{-?})
+@cindex p11tool help
+
+The text printed is the same whether selected with the @code{help} option
+(@option{--help}) or the @code{more-help} option (@option{--more-help}). @code{more-help} will print
+the usage text by passing it through a pager program.
+@code{more-help} is disabled on platforms without a working
+@code{fork(2)} function. The @code{PAGER} environment variable is
+used to select the program, defaulting to @file{more}. Both will exit
+with a status code of 0.
+
+@exampleindent 0
+@example
+p11tool - GnuTLS PKCS #11 tool
+Usage: p11tool [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [url]
+
+None:
+
+
+Tokens:
+
+ --list-tokens List all available tokens
+ --list-token-urls List the URLs available tokens
+ --list-mechanisms List all available mechanisms in a token
+ --initialize Initializes a PKCS #11 token
+ --initialize-pin Initializes/Resets a PKCS #11 token user PIN
+ --initialize-so-pin Initializes/Resets a PKCS #11 token security officer PIN
+ --set-pin=str Specify the PIN to use on token operations
+ --set-so-pin=str Specify the Security Officer's PIN to use on token initialization
+
+Object listing:
+
+ --list-all List all available objects in a token
+ --list-all-certs List all available certificates in a token
+ --list-certs List all certificates that have an associated private key
+ --list-all-privkeys List all available private keys in a token
+ --list-privkeys an alias for the 'list-all-privkeys' option
+ --list-keys an alias for the 'list-all-privkeys' option
+ --list-all-trusted List all available certificates marked as trusted
+ --export Export the object specified by the URL
+ - prohibits these options:
+ export-stapled
+ export-chain
+ export-pubkey
+ --export-stapled Export the certificate object specified by the URL
+ - prohibits these options:
+ export
+ export-chain
+ export-pubkey
+ --export-chain Export the certificate specified by the URL and its chain of trust
+ - prohibits these options:
+ export-stapled
+ export
+ export-pubkey
+ --export-pubkey Export the public key for a private key
+ - prohibits these options:
+ export-stapled
+ export
+ export-chain
+ --info List information on an available object in a token
+ --trusted an alias for the 'mark-trusted' option
+ --distrusted an alias for the 'mark-distrusted' option
+
+Key generation:
+
+ --generate-privkey=str Generate private-public key pair of given type
+ --bits=num Specify the number of bits for the key generate
+ --curve=str Specify the curve used for EC key generation
+ --sec-param=str Specify the security level
+
+Writing objects:
+
+ --set-id=str Set the CKA_ID (in hex) for the specified by the URL object
+ - prohibits the option 'write'
+ --set-label=str Set the CKA_LABEL for the specified by the URL object
+ - prohibits these options:
+ write
+ set-id
+ --write Writes the loaded objects to a PKCS #11 token
+ --delete Deletes the objects matching the given PKCS #11 URL
+ --label=str Sets a label for the write operation
+ --id=str Sets an ID for the write operation
+ --mark-wrap Marks the generated key to be a wrapping key
+ --mark-trusted Marks the object to be written as trusted
+ - prohibits the option 'mark-distrusted'
+ --mark-distrusted When retrieving objects, it requires the objects to be distrusted (blacklisted)
+ - prohibits the option 'mark-trusted'
+ --mark-decrypt Marks the object to be written for decryption
+ --mark-sign Marks the object to be written for signature generation
+ --mark-ca Marks the object to be written as a CA
+ --mark-private Marks the object to be written as private
+ --ca an alias for the 'mark-ca' option
+ --private an alias for the 'mark-private' option
+ --mark-always-authenticate Marks the object to be written as always authenticate
+ --secret-key=str Provide a hex encoded secret key
+ --load-privkey=file Private key file to use
+ - file must pre-exist
+ --load-pubkey=file Public key file to use
+ - file must pre-exist
+ --load-certificate=file Certificate file to use
+ - file must pre-exist
+
+Other options:
+
+ -d, --debug=num Enable debugging
+ - it must be in the range:
+ 0 to 9999
+ --outfile=str Output file
+ --login Force (user) login to token
+ --so-login Force security officer login to token
+ --admin-login an alias for the 'so-login' option
+ --test-sign Tests the signature operation of the provided object
+ --sign-params=str Sign with a specific signature algorithm
+ --hash=str Hash algorithm to use for signing
+ --generate-random=num Generate random data
+ -8, --pkcs8 Use PKCS #8 format for private keys
+ --inder Use DER/RAW format for input
+ --inraw an alias for the 'inder' option
+ --outder Use DER format for output certificates, private keys, and DH parameters
+ --outraw an alias for the 'outder' option
+ --provider=file Specify the PKCS #11 provider library
+ --detailed-url Print detailed URLs
+ --only-urls Print a compact listing using only the URLs
+ --batch Disable all interaction with the tool
+
+Version, usage and configuration options:
+
+ -v, --version[=arg] output version information and exit
+ -h, --help display extended usage information and exit
+ -!, --more-help extended usage information passed thru pager
+
+Options are specified by doubled hyphens and their name or by a single
+hyphen and the flag character.
+Operands and options may be intermixed. They will be reordered.
+
+Program that allows operations on PKCS #11 smart cards
+and security modules.
+
+To use PKCS #11 tokens with GnuTLS the p11-kit configuration files need to be setup.
+That is create a .module file in /etc/pkcs11/modules with the contents 'module: /path/to/pkcs11.so'.
+Alternatively the configuration file /etc/gnutls/pkcs11.conf has to exist and contain a number
+of lines of the form 'load=/usr/lib/opensc-pkcs11.so'.
+
+You can provide the PIN to be used for the PKCS #11 operations with the environment variables
+GNUTLS_PIN and GNUTLS_SO_PIN.
+
+
+Please send bug reports to: <bugs@@gnutls.org>
+
+@end example
+@exampleindent 4
+
+@anchor{p11tool token-related-options}
+@subsubheading token-related-options options
+Tokens.
+@subsubheading list-token-urls option.
+@anchor{p11tool list-token-urls}
+
+This is the ``list the urls available tokens'' option.
+This is a more compact version of --list-tokens.
+@subsubheading initialize-so-pin option.
+@anchor{p11tool initialize-so-pin}
+
+This is the ``initializes/resets a pkcs #11 token security officer pin'' option.
+This initializes the security officer's PIN. When used non-interactively use the GNUTLS_NEW_SO_PIN
+environment variables to initialize SO's PIN.
+@subsubheading set-pin option.
+@anchor{p11tool set-pin}
+
+This is the ``specify the pin to use on token operations'' option.
+This option takes a ArgumentType.STRING argument.
+Alternatively the GNUTLS_PIN environment variable may be used.
+@subsubheading set-so-pin option.
+@anchor{p11tool set-so-pin}
+
+This is the ``specify the security officer's pin to use on token initialization'' option.
+This option takes a ArgumentType.STRING argument.
+Alternatively the GNUTLS_SO_PIN environment variable may be used.
+@anchor{p11tool object-list-related-options}
+@subsubheading object-list-related-options options
+Object listing.
+@subsubheading list-all option.
+@anchor{p11tool list-all}
+
+This is the ``list all available objects in a token'' option.
+All objects available in the token will be listed. That includes
+objects which are potentially unaccessible using this tool.
+@subsubheading list-all-certs option.
+@anchor{p11tool list-all-certs}
+
+This is the ``list all available certificates in a token'' option.
+That option will also provide more information on the
+certificates, for example, expand the attached extensions in a trust
+token (like p11-kit-trust).
+@subsubheading list-certs option.
+@anchor{p11tool list-certs}
+
+This is the ``list all certificates that have an associated private key'' option.
+That option will only display certificates which have a private
+key associated with them (share the same ID).
+@subsubheading list-all-privkeys option.
+@anchor{p11tool list-all-privkeys}
+
+This is the ``list all available private keys in a token'' option.
+Lists all the private keys in a token that match the specified URL.
+@subsubheading list-privkeys option.
+@anchor{p11tool list-privkeys}
+
+This is an alias for the @code{list-all-privkeys} option,
+@pxref{p11tool list-all-privkeys, the list-all-privkeys option documentation}.
+
+@subsubheading list-keys option.
+@anchor{p11tool list-keys}
+
+This is an alias for the @code{list-all-privkeys} option,
+@pxref{p11tool list-all-privkeys, the list-all-privkeys option documentation}.
+
+@subsubheading export-stapled option.
+@anchor{p11tool export-stapled}
+
+This is the ``export the certificate object specified by the url'' option.
+
+@noindent
+This option has some usage constraints. It:
+@itemize @bullet
+@item
+must not appear in combination with any of the following options:
+export, export-chain, export-pubkey.
+@end itemize
+
+Exports the certificate specified by the URL while including any attached extensions to it.
+Since attached extensions are a p11-kit extension, this option is only
+available on p11-kit registered trust modules.
+@subsubheading export-chain option.
+@anchor{p11tool export-chain}
+
+This is the ``export the certificate specified by the url and its chain of trust'' option.
+
+@noindent
+This option has some usage constraints. It:
+@itemize @bullet
+@item
+must not appear in combination with any of the following options:
+export-stapled, export, export-pubkey.
+@end itemize
+
+Exports the certificate specified by the URL and generates its chain of trust based on the stored certificates in the module.
+@subsubheading export-pubkey option.
+@anchor{p11tool export-pubkey}
+
+This is the ``export the public key for a private key'' option.
+
+@noindent
+This option has some usage constraints. It:
+@itemize @bullet
+@item
+must not appear in combination with any of the following options:
+export-stapled, export, export-chain.
+@end itemize
+
+Exports the public key for the specified private key
+@subsubheading trusted option.
+@anchor{p11tool trusted}
+
+This is an alias for the @code{mark-trusted} option,
+@pxref{p11tool mark-trusted, the mark-trusted option documentation}.
+
+@subsubheading distrusted option.
+@anchor{p11tool distrusted}
+
+This is an alias for the @code{mark-distrusted} option,
+@pxref{p11tool mark-distrusted, the mark-distrusted option documentation}.
+
+@anchor{p11tool keygen-related-options}
+@subsubheading keygen-related-options options
+Key generation.
+@subsubheading generate-privkey option.
+@anchor{p11tool generate-privkey}
+
+This is the ``generate private-public key pair of given type'' option.
+This option takes a ArgumentType.STRING argument.
+Generates a private-public key pair in the specified token.
+Acceptable types are RSA, ECDSA, Ed25519, and DSA. Should be combined with --sec-param or --bits.
+@subsubheading generate-rsa option.
+@anchor{p11tool generate-rsa}
+
+This is the ``generate an rsa private-public key pair'' option.
+Generates an RSA private-public key pair on the specified token.
+Should be combined with --sec-param or --bits.
+
+@strong{NOTE}@strong{: THIS OPTION IS DEPRECATED}
+@subsubheading generate-dsa option.
+@anchor{p11tool generate-dsa}
+
+This is the ``generate a dsa private-public key pair'' option.
+Generates a DSA private-public key pair on the specified token.
+Should be combined with --sec-param or --bits.
+
+@strong{NOTE}@strong{: THIS OPTION IS DEPRECATED}
+@subsubheading generate-ecc option.
+@anchor{p11tool generate-ecc}
+
+This is the ``generate an ecdsa private-public key pair'' option.
+Generates an ECDSA private-public key pair on the specified token.
+Should be combined with --curve, --sec-param or --bits.
+
+@strong{NOTE}@strong{: THIS OPTION IS DEPRECATED}
+@subsubheading bits option.
+@anchor{p11tool bits}
+
+This is the ``specify the number of bits for the key generate'' option.
+This option takes a ArgumentType.NUMBER argument.
+For applications which have no key-size restrictions the
+--sec-param option is recommended, as the sec-param levels will adapt
+to the acceptable security levels with the new versions of gnutls.
+@subsubheading curve option.
+@anchor{p11tool curve}
+
+This is the ``specify the curve used for ec key generation'' option.
+This option takes a ArgumentType.STRING argument.
+Supported values are secp192r1, secp224r1, secp256r1, secp384r1 and secp521r1.
+@subsubheading sec-param option.
+@anchor{p11tool sec-param}
+
+This is the ``specify the security level'' option.
+This option takes a ArgumentType.STRING argument @file{Security parameter}.
+This is alternative to the bits option. Available options are [low, legacy, medium, high, ultra].
+@anchor{p11tool write-object-related-options}
+@subsubheading write-object-related-options options
+Writing objects.
+@subsubheading set-id option.
+@anchor{p11tool set-id}
+
+This is the ``set the cka_id (in hex) for the specified by the url object'' option.
+This option takes a ArgumentType.STRING argument.
+
+@noindent
+This option has some usage constraints. It:
+@itemize @bullet
+@item
+must not appear in combination with any of the following options:
+write.
+@end itemize
+
+Modifies or sets the CKA_ID in the specified by the URL object. The ID should be specified in hexadecimal format without a '0x' prefix.
+@subsubheading set-label option.
+@anchor{p11tool set-label}
+
+This is the ``set the cka_label for the specified by the url object'' option.
+This option takes a ArgumentType.STRING argument.
+
+@noindent
+This option has some usage constraints. It:
+@itemize @bullet
+@item
+must not appear in combination with any of the following options:
+write, set-id.
+@end itemize
+
+Modifies or sets the CKA_LABEL in the specified by the URL object
+@subsubheading write option.
+@anchor{p11tool write}
+
+This is the ``writes the loaded objects to a pkcs #11 token'' option.
+It can be used to write private, public keys, certificates or secret keys to a token. Must be combined with one of --load-privkey, --load-pubkey, --load-certificate option.
+
+When writing a certificate object, its CKA_ID is set to the same CKA_ID of the corresponding public key, if it exists on the token; otherwise it will be derived from the X.509 Subject Key Identifier of the certificate. If this behavior is undesired, write the public key to the token beforehand.
+@subsubheading id option.
+@anchor{p11tool id}
+
+This is the ``sets an id for the write operation'' option.
+This option takes a ArgumentType.STRING argument.
+Sets the CKA_ID to be set by the write operation. The ID should be specified in hexadecimal format without a '0x' prefix.
+@subsubheading mark-wrap option.
+@anchor{p11tool mark-wrap}
+
+This is the ``marks the generated key to be a wrapping key'' option.
+Marks the generated key with the CKA_WRAP flag.
+@subsubheading mark-trusted option.
+@anchor{p11tool mark-trusted}
+
+This is the ``marks the object to be written as trusted'' option.
+
+@noindent
+This option has some usage constraints. It:
+@itemize @bullet
+@item
+must not appear in combination with any of the following options:
+mark-distrusted.
+@item
+can be disabled with --no-mark-trusted.
+@end itemize
+
+Marks the object to be generated/written with the CKA_TRUST flag.
+@subsubheading mark-distrusted option.
+@anchor{p11tool mark-distrusted}
+
+This is the ``when retrieving objects, it requires the objects to be distrusted (blacklisted)'' option.
+
+@noindent
+This option has some usage constraints. It:
+@itemize @bullet
+@item
+must not appear in combination with any of the following options:
+mark-trusted.
+@end itemize
+
+Ensures that the objects retrieved have the CKA_X_TRUST flag.
+This is p11-kit trust module extension, thus this flag is only valid with
+p11-kit registered trust modules.
+@subsubheading mark-decrypt option.
+@anchor{p11tool mark-decrypt}
+
+This is the ``marks the object to be written for decryption'' option.
+Marks the object to be generated/written with the CKA_DECRYPT flag set to true.
+@subsubheading mark-sign option.
+@anchor{p11tool mark-sign}
+
+This is the ``marks the object to be written for signature generation'' option.
+Marks the object to be generated/written with the CKA_SIGN flag set to true.
+@subsubheading mark-ca option.
+@anchor{p11tool mark-ca}
+
+This is the ``marks the object to be written as a ca'' option.
+Marks the object to be generated/written with the CKA_CERTIFICATE_CATEGORY as CA.
+@subsubheading mark-private option.
+@anchor{p11tool mark-private}
+
+This is the ``marks the object to be written as private'' option.
+Marks the object to be generated/written with the CKA_PRIVATE flag. The written object will require a PIN to be used.
+@subsubheading ca option.
+@anchor{p11tool ca}
+
+This is an alias for the @code{mark-ca} option,
+@pxref{p11tool mark-ca, the mark-ca option documentation}.
+
+@subsubheading private option.
+@anchor{p11tool private}
+
+This is an alias for the @code{mark-private} option,
+@pxref{p11tool mark-private, the mark-private option documentation}.
+
+@subsubheading mark-always-authenticate option.
+@anchor{p11tool mark-always-authenticate}
+
+This is the ``marks the object to be written as always authenticate'' option.
+Marks the object to be generated/written with the CKA_ALWAYS_AUTHENTICATE flag. The written object will Mark the object as requiring authentication (pin entry) before every operation.
+@subsubheading secret-key option.
+@anchor{p11tool secret-key}
+
+This is the ``provide a hex encoded secret key'' option.
+This option takes a ArgumentType.STRING argument.
+This secret key will be written to the module if --write is specified.
+@anchor{p11tool other-options}
+@subsubheading other-options options
+Other options.
+@subsubheading debug option (-d).
+@anchor{p11tool debug}
+
+This is the ``enable debugging'' option.
+This option takes a ArgumentType.NUMBER argument.
+Specifies the debug level.
+@subsubheading so-login option.
+@anchor{p11tool so-login}
+
+This is the ``force security officer login to token'' option.
+Forces login to the token as security officer (admin).
+@subsubheading admin-login option.
+@anchor{p11tool admin-login}
+
+This is an alias for the @code{so-login} option,
+@pxref{p11tool so-login, the so-login option documentation}.
+
+@subsubheading test-sign option.
+@anchor{p11tool test-sign}
+
+This is the ``tests the signature operation of the provided object'' option.
+It can be used to test the correct operation of the signature operation.
+If both a private and a public key are available this operation will sign and verify
+the signed data.
+@subsubheading sign-params option.
+@anchor{p11tool sign-params}
+
+This is the ``sign with a specific signature algorithm'' option.
+This option takes a ArgumentType.STRING argument.
+This option can be combined with --test-sign, to sign with
+a specific signature algorithm variant. The only option supported is 'RSA-PSS', and should be
+specified in order to use RSA-PSS signature on RSA keys.
+@subsubheading hash option.
+@anchor{p11tool hash}
+
+This is the ``hash algorithm to use for signing'' option.
+This option takes a ArgumentType.STRING argument.
+This option can be combined with test-sign. Available hash functions are SHA1, RMD160, SHA256, SHA384, SHA512, SHA3-224, SHA3-256, SHA3-384, SHA3-512.
+@subsubheading generate-random option.
+@anchor{p11tool generate-random}
+
+This is the ``generate random data'' option.
+This option takes a ArgumentType.NUMBER argument.
+Asks the token to generate a number of bytes of random bytes.
+@subsubheading inder option.
+@anchor{p11tool inder}
+
+This is the ``use der/raw format for input'' option.
+Use DER/RAW format for input certificates and private keys.
+@subsubheading inraw option.
+@anchor{p11tool inraw}
+
+This is an alias for the @code{inder} option,
+@pxref{p11tool inder, the inder option documentation}.
+
+@subsubheading outder option.
+@anchor{p11tool outder}
+
+This is the ``use der format for output certificates, private keys, and dh parameters'' option.
+The output will be in DER or RAW format.
+@subsubheading outraw option.
+@anchor{p11tool outraw}
+
+This is an alias for the @code{outder} option,
+@pxref{p11tool outder, the outder option documentation}.
+
+@subsubheading provider option.
+@anchor{p11tool provider}
+
+This is the ``specify the pkcs #11 provider library'' option.
+This option takes a ArgumentType.FILE argument.
+This will override the default options in /etc/gnutls/pkcs11.conf
+@subsubheading provider-opts option.
+@anchor{p11tool provider-opts}
+
+This is the ``specify parameters for the pkcs #11 provider library'' option.
+This option takes a ArgumentType.STRING argument.
+This is a PKCS#11 internal option used by few modules.
+ Mainly for testing PKCS#11 modules.
+
+@strong{NOTE}@strong{: THIS OPTION IS DEPRECATED}
+@subsubheading batch option.
+@anchor{p11tool batch}
+
+This is the ``disable all interaction with the tool'' option.
+In batch mode there will be no prompts, all parameters need to be specified on command line.
+@subsubheading version option (-v).
+@anchor{p11tool version}
+
+This is the ``output version information and exit'' option.
+This option takes a ArgumentType.KEYWORD argument.
+Output version of program and exit. The default mode is `v', a simple
+version. The `c' mode will print copyright information and `n' will
+print the full copyright notice.
+@subsubheading help option (-h).
+@anchor{p11tool help}
+
+This is the ``display extended usage information and exit'' option.
+Display usage information and exit.
+@subsubheading more-help option (-!).
+@anchor{p11tool more-help}
+
+This is the ``extended usage information passed thru pager'' option.
+Pass the extended usage information through a pager.
+@anchor{p11tool exit status}
+@subsubheading p11tool exit status
+
+One of the following exit values will be returned:
+@table @samp
+@item 0 (EXIT_SUCCESS)
+Successful program execution.
+@item 1 (EXIT_FAILURE)
+The operation failed or the command syntax was not valid.
+@end table
+@anchor{p11tool See Also}
+@subsubheading p11tool See Also
+ certtool (1)
+@anchor{p11tool Examples}
+@subsubheading p11tool Examples
+To view all tokens in your system use:
+@example
+$ p11tool --list-tokens
+@end example
+
+To view all objects in a token use:
+@example
+$ p11tool --login --list-all "pkcs11:TOKEN-URL"
+@end example
+
+To store a private key and a certificate in a token run:
+@example
+$ p11tool --login --write "pkcs11:URL" --load-privkey key.pem \
+ --label "Mykey"
+$ p11tool --login --write "pkcs11:URL" --load-certificate cert.pem \
+ --label "Mykey"
+@end example
+Note that some tokens require the same label to be used for the certificate
+and its corresponding private key.
+
+To generate an RSA private key inside the token use:
+@example
+$ p11tool --login --generate-privkey rsa --bits 1024 --label "MyNewKey" \
+ --outfile MyNewKey.pub "pkcs11:TOKEN-URL"
+@end example
+The bits parameter in the above example is explicitly set because some
+tokens only support limited choices in the bit length. The output file is the
+corresponding public key. This key can be used to general a certificate
+request with certtool.
+@example
+certtool --generate-request --load-privkey "pkcs11:KEY-URL" \
+ --load-pubkey MyNewKey.pub --outfile request.pem
+@end example
+