JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
System Administration Guide: Security Services     Oracle Solaris 11 Express 11/10
search filter icon
search icon

Document Information

Preface

Part I Security Overview

1.  Security Services (Overview)

Part II System, File, and Device Security

2.  Managing Machine Security (Overview)

3.  Controlling Access to Systems (Tasks)

4.  Virus Scanning Service (Tasks)

5.  Controlling Access to Devices (Tasks)

6.  Using the Basic Audit Reporting Tool (Tasks)

7.  Controlling Access to Files (Tasks)

Part III Roles, Rights Profiles, and Privileges

8.  Using Roles and Privileges (Overview)

9.  Using Role-Based Access Control (Tasks)

10.  Role-Based Access Control (Reference)

11.  Privileges (Tasks)

12.  Privileges (Reference)

Part IV Oracle Solaris Cryptographic Services

13.  Oracle Solaris Cryptographic Framework (Overview)

14.  Oracle Solaris Cryptographic Framework (Tasks)

15.  Oracle Solaris Key Management Framework

Managing Public Key Technologies

Key Management Framework Utilities

KMF Policy Management

KMF Plugin Management

KMF Keystore Management

Using the Key Management Framework (Task Map)

Using the Key Management Framework (Tasks)

How to Create a Certificate by Using the pktool gencert Command

How to Import a Certificate Into Your Keystore

How to Export a Certificate and Private Key in PKCS #12 Format

How to Generate a Passphrase by Using the pktool setpin Command

How to Generate a Key Pair by Using the pktool genkeypair Command

How to Sign a Certificate Request by Using the pktool signcsr Command

How to Manage Third-Party Plugins in KMF

Part V Authentication Services and Secure Communication

16.  Using Authentication Services (Tasks)

17.  Using PAM

18.  Using SASL

19.  Using Solaris Secure Shell (Tasks)

20.  Solaris Secure Shell (Reference)

Part VI Kerberos Service

21.  Introduction to the Kerberos Service

22.  Planning for the Kerberos Service

23.  Configuring the Kerberos Service (Tasks)

24.  Kerberos Error Messages and Troubleshooting

25.  Administering Kerberos Principals and Policies (Tasks)

26.  Using Kerberos Applications (Tasks)

27.  The Kerberos Service (Reference)

Part VII Oracle Solaris Auditing

28.  Oracle Solaris Auditing (Overview)

29.  Planning for Oracle Solaris Auditing

30.  Managing Oracle Solaris Auditing (Tasks)

31.  Oracle Solaris Auditing (Reference)

Glossary

Index

Using the Key Management Framework (Tasks)

This section describes how to use the pktool command to manage your public key objects, such as passwords, passphrases, files, keystores, certificates, and CRLs.

How to Create a Certificate by Using the pktool gencert Command

This procedure creates a self-signed certificate and stores the certificate in the PKCS #11 keystore. As a part of this operation, an RSA public/private key pair is also created. The private key is stored in the keystore with the certificate.

  1. Generate a self-signed certificate.
    % pktool gencert [keystore=keystore] label=label-name \
    subject=subject-DN serial=hex-serial-number
    keystore=keystore

    Specifies the keystore by type of public key object. The value can be nss, pkcs11, or ssl. This keyword is optional.

    label=label-name

    Specifies a unique name that the issuer gives to the certificate.

    subject=subject-DN

    Specifies the distinguished name for the certificate.

    serial=hex-serial-number

    Specifies the serial number in hexadecimal format. The issuer of the certificate chooses the number, such as 0x0102030405.

  2. Verify the contents of the keystore.
    % pktool list
    Found number certificates.
    1. (X.509 certificate)
          Label:  label-name
          ID: Fingerprint that binds certificate to private key
          Subject: subject-DN
          Issuer:  distinguished-name
          Serial:  hex-serial-number
    n. ...

    This command lists all certificates in the keystore. In the following example, the keystore contains one certificate only.

Example 15-1 Creating a Self-Signed Certificate by Using pktool

In the following example, a user at My Company creates a self-signed certificate and stores the certificate in a keystore for PKCS #11 objects. The keystore is initially empty. If the keystore has not been initialized, the PIN for the softtoken is changeme.

% pktool gencert keystore=pkcs11 label="My Cert" \
subject="C=US, O=My Company, OU=Security Engineering Group, CN=MyCA" \
serial=0x000000001
Enter pin for Sun Software PKCS#11 softtoken:Type PIN for token
% pktool list
Found 1 certificates.
1. (X.509 certificate)
      Label: My Cert
      ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb
      Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Serial: 0x01

How to Import a Certificate Into Your Keystore

This procedure describes how to import a file with PKI information that is encoded with PEM or with raw DER into your keystore. For an export procedure, see Example 15-4.

  1. Import the certificate.
    % pktool import keystore=keystore infile=infile-name label=label-name
  2. If you are importing private PKI objects, provide passwords when prompted.
    1. At the prompt, provide the password for the file.

      If you are importing PKI information that is private, such as an export file in PKCS #12 format, the file requires a password. The creator of the file that you are importing provides you with the PKCS #12 password.

      Enter password to use for accessing the PKCS12 file:Type PKCS #12 password
    2. At the prompt, type the password for your keystore.
      Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
  3. Verify the contents of the keystore.
    % pktool list
    Found number certificates.
    1. (X.509 certificate)
          Label:  label-name
          ID: Fingerprint that binds certificate to private key
          Subject: subject-DN
          Issuer:  distinguished-name
          Serial:  hex-serial-number
    2. ...

Example 15-2 Importing a PKCS #12 File Into Your Keystore

In the following example, the user imports a PKCS #12 file from a third party. The pktool import command extracts the private key and the certificate from the gracedata.p12 file, and stores them in the user's preferred keystore.

% pktool import keystore=pkcs11 infile=gracedata.p12 label=GraceCert
Enter password to use for accessing the PKCS12 file:Type PKCS #12 password
Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
Found 1 certificate(s) and 1 key(s) in gracedata.p12
% pktool list
Found 1 certificates.
1. (X.509 certificate)
        Label: GraceCert
        ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb
        Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
        Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
        Serial: 0x01

Example 15-3 Importing an X.509 Certificate Into Your Keystore

In the following example, the user imports an X.509 certificate in PEM format into the user's preferred keystore. This public certificate is not protected with a password. The user's public keystore is also not protected by a password.

% pktool import keystore=pkcs11 infile=somecert.pem label="TheirCompany Root Cert"
% pktool list
Found 1 certificates.
1. (X.509 certificate)
        Label: TheirCompany Root Cert
        ID: 21:ae:83:98:24:d1:1f:cb:65:5b:48:75:7d:02:47:cf:98:1f:ec:a0
        Subject: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA
        Issuer: C=US, O=TheirCompany, OU=Security, CN=TheirCompany Root CA
        Serial: 0x01

How to Export a Certificate and Private Key in PKCS #12 Format

You can create a file in PKCS #12 format to export private keys and their associated X.509 certificate to other systems. Access to the file is protected by a password.

  1. Find the certificate to export.
    % pktool list
    Found number certificates.
    1. (X.509 certificate)
          Label:  label-name
          ID: Fingerprint that binds certificate to private key
          Subject: subject-DN
          Issuer:  distinguished-name
          Serial:  hex-serial-number
    2. ...
  2. Export the keys and certificate.

    Use the keystore and label from the pktool list command. Provide a file name for the export file. When the name contains a space, surround the name with double quotes.

    % pktool export keystore=keystore outfile=outfile-name label=label-name
  3. Protect the export file with a password.

    At the prompt, type the current password for the keystore. At this point, you create a password for the export file. The receiver must provide this password when importing the file.

    Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
    Enter password to use for accessing the PKCS12 file:Create PKCS #12 password

    Tip - Send the password separately from the export file. Best practice suggests that you provide the password out of band, such as during a telephone call.


Example 15-4 Exporting a Certificate and Private Key in PKCS #12 Format

In the following example, a user exports the private keys with their associated X.509 certificate into a standard PKCS #12 file. This file can be imported into other keystores. The PKCS #11 password protects the source keystore. The PKCS #12 password is used to protect private data in the PKCS #12 file. This password is required to import the file.

% pktool list
Found 1 certificates.
1. (X.509 certificate)
      Label: My Cert
      ID: 12:82:17:5f:80:78:eb:44:8b:98:e3:3c:11:c0:32:5e:b6:4c:ea:eb
      Subject: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Issuer: C=US, O=My Company, OU=Security Engineering Group, CN=MyCA
      Serial: 0x01
% pktool export keystore=pkcs11 outfile=mydata.p12 label="My Cert"
Enter pin for Sun Software PKCS#11 softtoken: Type PIN for token
Enter password to use for accessing the PKCS12 file:Create PKCS #12 password

The user then telephones the recipient and provides the PKCS #12 password.

How to Generate a Passphrase by Using the pktool setpin Command

You can generate a passphrase for an object in a keystore, and for the keystore itself. The passphrase is required to access the object or keystore. For an example of generating a passphrase for an object in a keystore, see Example 15-4.

  1. Generate a passphrase for access to a keystore.
    % pktool setpin keystore=nss|pkcs11 dir=directory
  2. Answer the prompts.

    If the keystore does not have a password already set, press the Return key to create the password.

    Enter current token passphrase:Press the Return key
    Create new passphrase:Type the passphrase that you want to use
    Re-enter new passphrase:Retype the passphrase
    Passphrase changed.

    The keystore is now protected by passphrase. If you lose the passphrase, you lose access to the objects in the keystore.

Example 15-5 Protecting a Keystore With a Passphrase

The following example shows how to set the passphrase for an NSS database. Because no passphrase has been created, the user presses the Return key at the first prompt.

% pktool setpin keystore=nss dir=/var/nss
Enter current token passphrase:Press the Return key
Create new passphrase:    has8n0NdaH
Re-enter new passphrase:  has8n0NdaH
Passphrase changed.

How to Generate a Key Pair by Using the pktool genkeypair Command

Some applications require a public/private key pair. In this procedure, you create these key pairs and store them.

  1. (Optional) If you plan to use a keystore, create the keystore.
  2. Create the key pair.

    Use one of the following methods.

    • Create the key pair, and store the key pair in a file.

      File-based keys are created for applications that read keys directly from files on the disk. Typically, applications that directly use OpenSSL cryptographic libraries require that your store the keys and certificates for the application in files.


      Note - The file keystore does not support elliptic curve (ec) keys and certificates.


      % pktool genkeypair keystore=file outkey=key-filename \ 
      [format=der|pem] [keytype=rsa|dsa] [keylen=key-size]
      keystore=file

      The value file specifies the file type of storage location for the key.

      outkey=key-filename

      Specifies the name of the file where the key pair is stored.

      format=der|pem

      Specifies the encoding format of the key pair. der output is binary, and pem output is ASCII.

      keytype=rsa|dsa

      Specifies the type of key pair that can be stored in a file keystore. For definitions, see DSA and RSA.

      keylen=key-size

      Specifies the length of the key in bits. The number must be divisible by 8. To determine possible key sizes, use the cryptoadm list -vm command.

    • Create the key pair, and store it in a PKCS #11 keystore.

      You must complete Step 1 before using this method.

      The PKCS #11 keystore is used to store objects on a hardware device. The device could be a Sun Crypto Accelerator 6000 card, a trusted platform module (TPM) device, or a smart card that is plugged into the Oracle Solaris Cryptographic Framework. PKCS #11 can also be used to store objects in the softtoken, or software-based token, which stores the objects in a private subdirectory on the disk. For more information, see the pkcs11_softtoken(5) man page.

      You can retrieve the key pair from the keystore by a label that you specify.

      % pktool genkeypair label=key-label \ 
      [token=token[:manuf[:serial]]] \
      [keytype=rsa|dsa|ec]  [curve=ECC-Curve-Name]]\
      [keylen=key-size] [listcurves]
      label=key-label

      Specifies a label for the key pair. The key pair can be retrieved from the keystore by its label.

      token=token[:manuf[:serial]]

      Specifies the token name. By default, the token name is Sun Software PKCS#11 softtoken.

      keytype=rsa|dsa|ec [curve=ECC-Curve-Name]

      Specifies the keypair type. For the elliptic curve (ec) type, optionally specifies a curve name. Curve names are listed as output to the listcurves option.

      keylen=key-size

      Specifies the length of the key in bits. The number must be divisible by 8.

      listcurves

      Lists the elliptic curve names that can be used as values to the curve= option for an ec key type.

    • Generate the key pair, and store it in an NSS keystore.

      The NSS keystore is used by servers that rely on NSS as their primary cryptographic interface. For example, the Sun Java System Web Server and Application Server use the NSS databases for object storage.

      You must complete Step 1 before using this method.

      % pktool keystore=nss genkeypair label=key-nickname \ 
      [token=token[:manuf[:serial]]] \
      [dir=directory-path] [prefix=database-prefix] \
      [keytype=rsa|dsa|ec] [curve=ECC-Curve-Name]] \
      [keylen=key-size] [listcurves]
      keystore=nss

      The value nss specifies the NSS type of storage location for the key.

      label=nickname

      Specifies a label for the key pair. The key pair can be retrieved from the keystore by its label.

      token=token[:manuf[:serial]]

      Specifies the token name. By default, the token is Sun Software PKCS#11 softtoken.

      dir=directory

      Specifies the directory path to the NSS database. By default, directory is the current directory.

      prefix=database-prefix

      Specifies the prefix to the NSS database. The default is no prefix.

      keytype=rsa|dsa|ec [curve=ECC-Curve-Name]

      Specifies the keypair type. For the elliptic curve type, optionally specifies a curve name. Curve names are listed as output to the listcurves option.

      keylen=key-size

      Specifies the length of the key in bits. The number must be divisible by 8.

      listcurves

      Lists the elliptic curve names that can be used as values to the curve= option for an ec key type.

  3. (Optional) Verify that the key exists.

    Use one of the following commands, depending on where you stored the key:

    • Verify the key in the key-filename file.
      % pktool list keystore=file objtype=key infile=key-filename
      Found n keys.
      Key #1 - keytype:location (keylen)
    • Verify the key in the PKCS #11 keystore.
      $ pktool list objtype=key
      Enter PIN for keystore:
      Found n keys.
      Key #1 - keytype:location (keylen)
    • Verify the key in the NSS keystore.
      % pktool list keystore=nss dir=directory objtype=key

Example 15-6 Creating a Key Pair by Using the pktool Command

In the following example, a user creates a PKCS #11 keystore for the first time. After determining the key sizes for RSA key pairs, the user then generates a key pair for an application. Finally, the user verifies that the key pair is in the keystore. The user notes that the second instance of the RSA key pair can be stored on hardware. Because the user does not specify a token argument, the key pair is stored as a Sun Software PKCS#11 softtoken.

# pktool setpin
Create new passphrase:Easily remembered, hard-to-detect password
Re-enter new passphrase:Retype password
Passphrase changed.
% cryptoadm list -vm | grep PAIR
...
CKM_DSA_KEY_PAIR_GEN         512  1024 .  .  .
CKM_RSA_PKCS_KEY_PAIR_GEN    256  4096 .  .  .
...
CKM_RSA_PKCS_KEY_PAIR_GEN    512  2048 X  .  .
ecc: CKM_EC_KEY_PAIR_GEN,CKM_ECDH1_DERIVE,CKM_ECDSA,CKM_ECDSA_SHA1
% pktool genkeypair label=specialappkeypair keytype=rsa keylen=2048
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

% pktool list
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

Found 1 keys.
Key #1 - keypair:  specialappkeypair (2048 bits)

Example 15-7 Creating a Key Pair That Uses the Elliptic Curve Algorithm

In the following example, a user adds an elliptic curve (ec)key pair to the keystore, specifies a curve name, and verifies that the key pair is in the keystore.

% pktool genkeypair listcurves
secp112r1, secp112r2, secp128r1, secp128r2, secp160k1
.
.
.
c2pnb304w1, c2tnb359v1, c2pnb368w1, c2tnb431r1, prime192v2
prime192v3
% pktool genkeypair label=eckeypair keytype=ec curves=c2tnb431r1
% pktool list
Enter PIN for Sun Software PKCS#11 softtoken  :Type password

Found 2 keys.
Key #1 - keypair:  specialappkeypair (2048 bits)
Key #2 - keypair:  eckeypair (c2tnb431r1)

How to Sign a Certificate Request by Using the pktool signcsr Command

This procedure is used to sign a PKCS #10 certificate signing request (CSR). The CSR can be in PEM or DER format. The signing process issues an X.509 v3 certificate. To generate a PKCS #10 CSR, see the pktool(1) man page.

Before You Begin

You are a certificate authority (CA), you have received a CSR, and it is stored in a file.

  1. Collect the following information for the required arguments to the pktool signcsr command:
    signkey

    If you have stored the signer's key in a PKCS #11 keystore, signkey is the label that retrieves this private key.

    If you have stored the signer's key in an NSS keystore or a file keystore, signkey is the file name that holds this private key.

    csr

    Specifies the file name of the CSR.

    serial

    Specifies the serial number of the signed certificate.

    outcer

    Specifies the file name for the signed certificate.

    issuer

    Specifies your CA issuer name in distinguished name (DN) format.

    For information about optional arguments to the signcsr subcommand, see the pktool(1) man page.

  2. Sign the request and issue the certificate.

    For example, the following command signs the certificate with the signer's key from the PKCS #11 repository:

    # pktool signcsr signkey=CASigningKey \
    csr=fromExampleCoCSR \
    serial=0x12345678 \
    outcert=ExampleCoCert2010 \
    issuer="O=Oracle Corporation, \ OU=Oracle Solaris Security Technology, L=Redwood City, ST=CA, C=US, \ CN=rootsign Oracle"

    The following command signs the certificate with the signer's key from a file:

    # pktool signcsr signkey=CASigningKey \
    csr=fromExampleCoCSR \
    serial=0x12345678 \
    outcert=ExampleCoCert2010 \
    issuer="O=Oracle Corporation, \ OU=Oracle Solaris Security Technology, L=Redwood City, ST=CA, C=US, \ CN=rootsign Oracle"
  3. Send the certificate to the requester.

    You can use email, a web site, or other mechanism to deliver the certificate to the requester.

    For example, you could use email to send the ExampleCoCert2010 file to the requester.

How to Manage Third-Party Plugins in KMF

You identify your plugin by giving it a keystore name. When you add the plugin to KMF, the software identifies it by its keystore name. The plugin can be defined to accept an option. This procedure includes how to remove the plugin from KMF.

  1. Install the plugin.
    % /usr/bin/kmfcfg install keystore=keystore-name \
    modulepath=path-to-plugin [option="option-string"]

    where

    keystore-name – Specifies a unique name for the keystore that you provide.

    path-to-plugin – Specifies the full path to the shared library object for the KMF plugin.

    option-string – Specifies an optional argument to the shared library object.

  2. List the plugins.
    % kmfcfg list plugin
    keystore-name:path-to-plugin [(built-in)] | [;option=option-string]
  3. To remove the plugin, uninstall it and verify its removal.
    % kmfcfg uninstall keystore=keystore-name
    % kmfcfg plugin list

Example 15-8 Calling a KMF Plugin With an Option

In the following example, the administrator stores a KMF plugin in a site-specific directory. The plugin is defined to accept a debug option. The administrator adds the plugin and verifies that the plugin is installed.

# /usr/bin/kmfcfg install keystore=mykmfplug \
modulepath=/lib/security/site-modules/mykmfplug.so
# kmfcfg list plugin
KMF plugin information:
-----------------------
pkcs11:kmf_pkcs11.so.1 (built-in)
file:kmf_openssl.so.1 (built-in)
nss:kmf_nss.so.1 (built-in)
mykmfplug:/lib/security/site-modules/mykmfplug.so
# kmfcfg modify plugin keystore=mykmfplug option="debug"
# kmfcfg list plugin
KMF plugin information:
-----------------------
...
mykmfplug:/lib/security/site-modules/mykmfplug.so;option=debug

The plugin now runs in debugging mode.