Catalyst 6500 Series WebVPN Services Module Configuration Guide, 1.2
Configuring the WebVPN Services Module

Table Of Contents

Configuring the WebVPN Services Module

Configuring Address Resolution

Assigning Hostnames to IP Addresses

Specifying the Domain Name

Specifying a Name Server

Enabling the DNS

Configuring the Virtual Gateway

Configuring End User Authentication

Configuring the Virtual Context

Configuring CSD

Configuring Clientless Mode

Configuring Thin-Client Mode

Configuring Tunnel Mode

Configuring Policies

Configuring Group Policy

Configuring SSL Policy (Optional)

Configuring TCP Policy (Optional)

Configuring Public Key Infrastructure

Configuring Keys and Certificates

Verifying Certificates and Trustpoints

Saving Your Configuration

Backing Up Keys and Certificates

Monitoring and Maintaining Keys and Certificates

Assigning a Certificate to a WebVPN Gateway and Context

Renewing a Certificate

Automatic Certificate Renewal and Enrollment


Configuring the WebVPN Services Module


This chapter describes how to configure the WebVPN Services Module from the command-line interface (CLI) of the module:

Configuring Address Resolution

Configuring the Virtual Gateway

Configuring End User Authentication

Configuring the Virtual Context

Configuring Policies

Configuring Public Key Infrastructure

Configuring Address Resolution

Each unique IP address can have an associated hostname. The Cisco IOS software maintains a cache of hostname-to-address mappings for use by the connect, telnet, and ping EXEC commands, and related Telnet support operations. This cache speeds the process of converting names to addresses.

IP defines a naming scheme that allows a device to be identified by its location in the IP. This is a hierarchical naming scheme that provides for domains. Domain names are pieced together with periods (.) as the delimiting characters. For example, Cisco is a commercial organization that the IP identifies by a com domain name, so its domain name is cisco.com. A specific device in this domain, the File Transfer Protocol (FTP) system, for example, is identified as ftp.cisco.com.

To keep track of domain names, IP has defined the concept of a name server, whose job is to hold a cache (or database) of names mapped to IP addresses. To map domain names to IP addresses, you must first identify the hostnames, then specify a name server, and enable the Domain Naming System (DNS), which is the global naming scheme of the Internet that uniquely identifies network devices.

These tasks are described in the following sections:

Assigning Hostnames to IP Addresses

Specifying the Domain Name

Specifying a Name Server

Enabling the DNS

A VPN routing and forwarding (VRF) instance consists of an IP routing table, a derived forwarding table, a set of interfaces that use the forwarding table, and a set of rules and routing protocols that determine the information that goes into the forwarding table. In general, a VRF includes the routing information that defines a customer VPN site that is attached to a Provider Edge router.

To enable the VRF-aware DNS feature, configure the following in global configuration mode:

A VRF routing table with the ip vrf name command

At least one name server in the VRF with the ip name-server vrf name command

Domain lookup enabled with the ip domain lookup command

Optionally, you can also configure a VRF specific default domain name or domain list with the ip domain name vrf name command or ip domain list vrf name command.

Assigning Hostnames to IP Addresses

The Cisco IOS software maintains a table of hostnames and their corresponding addresses, also called a hostname-to-address mapping. Higher-layer protocols such as Telnet use hostnames to identify network devices (hosts). The router and other network devices must be able to associate hostnames with IP addresses to communicate with other IP devices. Hostnames and IP addresses can be associated with one another through static or dynamic means.

Manually assigning hostnames to addresses is useful when dynamic mapping is not available.

To assign hostnames to addresses, perform this task in global configuration mode:

Command
Purpose
Router(config)# ip host [vrf name] hostname 
[tcp-port-number] address1 
[address2...address8]

Statically associates hostnames with IP addresses. If a VRF name is specified, the name entry is created in the VRF specific cache. If the VRF specific name cache does not exist yet, it is dynamically created. Without a VRF name specified, the name entry is created in the global cache.


Specifying the Domain Name

You can specify a default domain name that the Cisco IOS software will use to complete domain name requests. You can specify either a single domain name or a list of domain names. Any IP hostname that does not contain a domain name will have the domain name that you specify appended to it before being added to the host table.

To specify a domain name or names, perform one of the following tasks in global configuration mode:

Command
Purpose
Router(config)# ip domain name [vrf name] 
name

Defines a default domain name that the Cisco IOS software uses to complete unqualified hostnames. If a VRF name is specified, the domain name is only used for name queries in the specified VRF.

Router(config)# ip domain list [vrf name] 
name 

Defines a list of default domain names to complete unqualified hostnames. If a VRF name is specified, the domain names are only used for name queries in the specified VRF.


The following example establishes a domain list with several alternate domain names:

Router(config)# ip domain list csi.com
Router(config)# ip domain list telecomprog.edu
Router(config)# ip domain list merit.edu

Specifying a Name Server

To specify one or more hosts (up to six) that can function as a name server to supply name information for the DNS, perform the following task in global configuration mode:

Command
Purpose
Router(config)# ip name-server [vrf name] 
server-address1 [server-address2... 
server-address6]

Specifies one or more hosts that supply name information.


Enabling the DNS

If your network devices require connectivity with devices in networks for which you do not control name assignment, you can assign device names that uniquely identify your devices within the entire internetwork. The global naming scheme of the Internet, the DNS, accomplishes this task. This service is enabled by default.

To reenable DNS if it has been disabled, perform the following task in global configuration mode:

Command
Purpose
Router(config)# ip domain lookup

Enables DNS-based hostname-to-address translation.


A cache of hostname-to-address mappings is used by connect, telnet, ping, trace, write net, and configure net EXEC commands to speed the process of converting names to addresses. The commands used in this example specify the form of dynamic name lookup to be used. Static name lookup also can be configured.

The following example configures the hostname-to-address mapping process. IP DNS-based translation is specified, the addresses of the name servers are specified, and the default domain name is given.

Router(config)# ip domain lookup
Router(config)# ip name-server 131.108.1.111 131.108.1.2
Router(config)# ip domain name cisco.com

Configuring the Virtual Gateway

You define the virtual gateway using the webvpn gateway gateway_name command. The gateway is referenced in the WebVPN context.

To configure virtual gateway services, perform this task:

 
Command
Purpose

Step 1 

webvpn(config)# webvpn gateway 
gateway_name 

Defines the name of the virtual gateway service.

Note The gateway_name value is case sensitive.

Step 2 

webvpn(config-webvpn-gateway)# ip 
address ip_addr [mask_addr]1  port 
port [secondary2 ,3 ,4 ]

Defines the virtual IP address and port number for which the WebVPN Services Module is the proxy. The default for port is 443.

Note The secondary keyword is required if the virtual IP address is not on a network with a direct connection.

Step 3 

webvpn(config-webvpn-gateway)# 
http-redirect [port port]

Specifies that the HTTP port (the default port is 80) is open and that any HTTP connections to the virtual gateway is directed to use secure HTTP (HTTPS).

Step 4 

webvpn(config-webvpn-gateway)# 
policy tcp tcp_policy_name5 

(Optional) Applies a TCP policy. See the "Configuring TCP Policy (Optional)" section for TCP policy parameters. The TCP policy affects only client-side connections.

Step 5 

webvpn(config-webvpn-gateway)# 
policy ssl ssl_policy_name 5

(Optional) Applies an SSL policy. See the "Configuring SSL Policy (Optional)" section for SSL policy parameters. The SSL policy affects only client-side connections.

Step 6 

webvpn(config-webvpn-gateway)# ssl 
trustpoint trustpoint_label

Applies a trustpoint configuration to the WebVPN gateway6 . You can import the test certificate embedded on the module; see "Importing the Embedded Test Certificate."

Note The trustpoint defines the certificate authority server, the key parameters and key-generation methods, and the certificate enrollment methods for the WebVPN gateway. See the "Declaring the Trustpoint" section for information on configuring the trustpoint.

Step 7 

webvpn(config-webvpn-gateway)# 
hostname name 

(Optional) Specifies the hostname that is used in the URL and cookie mangling process. In the load-balancing configuration, the hostname specified is the virtual gateway IP address configured on the load-balancing device.

Step 8 

webvpn(config-webvpn-gateway)# 
inservice

Puts the gateway in service.

1 Configure the mask address to specify a wildcard proxy service. You must enter the secondary keyword to configure a wildcard proxy service.

2 When you enter the secondary keyword, the WebVPN Services Module does not respond to ARP requests of the virtual IP address.

3 You can enter the secondary keyword when the WebVPN Services Module is used in a standalone configuration or when the WebVPN Services Module is used as a real server on a load balancer (like the CSM) configured in dispatch mode (MAC address rewrite).

4 You can enter the secondary keyword if you configure multiple devices using the same virtual IP address. The virtual IP address can be any legal IP address and does not have to be in the VLAN (subnet) connected to the WebVPN Services Module.

5 If you create a policy without specifying any parameters, the policy is created using the default values.

6 If the key (modulus) size is other than 512, 768, 1024, 1536, or 2048, you will receive an error and the trustpoint configuration is not applied. Replace the key by generating a key (using the same key_label) and specifying a supported modulus size, and then repeat Step 6.

Configuring End User Authentication

For more detailed information on configuring RADIUS, refer to the "Configuring RADIUS" chapter in the Cisco IOS Security Configuration Guide, Release 12.2 at this URL:

http://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122cgcr/fsecur_c/fsecsp/scfrad.htm

Table 3-1 shows information on the WebVPN RADIUS attribute-value pairs.


Note All WebVPN attributes (except for the standard IETF RADIUS attributes) start with webvpn: as follows:

webvpn:urllist-name=cisco
webvpn:nbnslist-name=cifs
webvpn:default-domain=cisco.com


Table 3-1 WebVPN RADIUS Attribute-Value Pairs 

Attribute
Type of Value
Values
Default

addr (Framed-IP-Address1 )

ipaddr

IP_address

 

addr-pool

string

name

 

banner

string

   

citrix-enabled

integer

0 (disable)
1 (enable)2

0

default-domain

string

   

dns-servers

ipaddr

IP_address

 

dpd-client-timeout

integer (seconds)

0 (disabled)-3600

300

dpd-gateway-timeout

integer (seconds)

0 (disabled)-3600

300

file-access

integer

0 (disable)
1 (enable) 2

0

file-browse

integer

0 (disable)
1 (enable) 2

0

file-entry

integer

0 (disable)
1 (enable) 2

0

hide-urlbar

integer

0 (disable)
1 (enable) 2

0

home-page

string

   

idletime (Idle-Timeout 1)

integer (seconds)

0-3600

2100

ie-proxy-exception

string

DNS_name

 

ipaddr

IP_address

 

ie-proxy-server

ipaddr

IP_address

 

inacl

integer

1-199,
1300-2699

 

string

name

 

keep-svc-installed

integer

0 (disable)
1 (enable) 2

1

nbnslist-name

string

name

 

netmask (Framed-IP-Netmask 1)

ipaddr

IP_address_mask

 

port-forward-name

string

name

 

primary-dns

ipaddr

IP_address

 

rekey-interval

integer (seconds)

0-43200

21600

secondary-dns

ipaddr

IP_address

 

split-dns

string

   

split-exclude3

ipaddr ipaddr

IP_address IP_address_mask

 

word

local-lans

 

split-include 3

ipaddr ipaddr

IP_address IP_address_mask

 

svc-enabled4

integer

0 (disable)
1 (enable) 2

0

svc-ie-proxy-policy

word

none, auto, bypass-local

 

svc-required 4

integer

0 (disable)
1 (enable) 2

0

timeout (Session-Timeout 1)

integer (seconds)

1-1209600

43200

urllist-name

string

name

 

user-vpn-group

string

name

 

wins-server-primary

ipaddr

IP_address

 

wins-servers

ipaddr

IP_address

 

wins-server-secondary

ipaddr

IP_address

 

1 Standard IETF RADIUS attributes.

2 Any integer other than 0 enables this feature.

3 You can specify either split-include or split-exclude, but you cannot specify both options.

4 You can specify either svc-enable or svc-required, but you cannot specify both options.


Configuring the Virtual Context

You define the virtual context using the webvpn context command. The virtual context links the previously configured address resolution, gateway, and authentication configurations.

To configure clientless mode, configure the URL lists and the group policy. To access e-mail using Outlook Web Access (OWA), configure the URL list to point to the Microsoft Exchange server (for example, http://ipaddr/exchange).

To configure thin-client mode, configure the list of ports to forward and the group policy.

To configure file sharing using the Common Internet File System (CIFS), configure the NetBIOS name service (NBNS) list, the server address, and the group policy.

To configure virtual context, perform this task:

 
Command
Purpose

Step 1 

webvpn(config)# webvpn context 
[context-name]

Enters the WebVPN context subcommand mode. The optional VPN service name name is used to specify a WebVPN instance.

Step 2 

webvpn(config-webvpn-context)# gateway 
gateway-name {virtual-host 
virtual-host-name|domain-name 
domain-name}

Specifies the corresponding virtual gateway instance configured on the secure gateway and the mapping methods (for example, IP address, URL, and domain name). The gateway-name parameter should match one of the virtual gateways configured on the system. The domain-name parameter is an ASCII string, which is used to specify a corporate-specific domain name (for example, cisco.com) for the virtual WebVPN instance.

Step 3 

webvpn(config-webvpn-context)# csd enable

Enables the Cisco Secure Desktop (CSD) and allows you to configure the setting for the secure desktop using the CSD Manager.

Note Follow the instructions in the "Configuring CSD" section to install and configure CSD settings for the WebVPN module.

Step 4 

webvpn(config-webvpn-context)# 
nat-address start-address end-address 
netmask netmask 

Specifies the NAT addresses to be used in opening a server connection. The addresses specified in the nat-address command must match one of the subnets configured on the WebVPN subinterfaces.

Note This command is required for clientless mode and thin-client mode.

Step 5 

webvpn(config-webvpn-context)# url-list 
listname

Enters url submode and allows you to configure the list of URLs that display on the portal web page. See the "Configuring Clientless Mode" section for information on configuring the URL entries.

Step 6 

webvpn(config-webvpn-context)# 
port-forward listname

Enters port-fwd submode and allows you to configure the list of ports to which the end user has access. See the "Configuring Thin-Client Mode" section for information on configuring port forwarding.

Step 7 

webvpn(config-webvpn-context)# policy 
group default-policy-name

Enters the group submode and allows you to configure group policy settings. See the "Configuring Group Policy" section for detailed information on configuring group policy settings, and see the "Configuring Tunnel Mode" section for detailed information on configuring tunnel mode using group policy settings.

Step 8 

webvpn(config-webvpn-context)# policy ssl 
policy-name

(Optional) Specifies the SSL policy that the SSL protocol uses. The SSL policy affects only server-side connections.

Step 9 

webvpn(config-webvpn-context)# policy tcp 
policy-name

(Optional) Specifies the TCP policy that the TCP protocol uses. The TCP policy affects only server-side connections.

Step 10 

webvpn(config-webvpn-context)# title 
string

Specifies the HTML title string in the browser title and on the title bar. The string is limited to 255 characters. The default string is "WebVPN Service."

Step 11 

webvpn(config-webvpn-context)# 
login-message string

Specifies the text that prompts the end user to log in. The string is limited to 255 characters. The default string is "Please enter your username and password."

Step 12 

webvpn(config-webvpn-context)# logo [file 
filename|none]

Specifies the custom logo image that is displayed on the login and portal pages. The filename is a file that is uploaded by the administrator to the security gateway.

Step 13 

webvpn(config-webvpn-context)# 
title-color color

Specifies the color of the title bars on the login, home, and file-access portal pages. The default color is purple. For information on valid color values, see "Color Names and RGB Color Values."

Step 14 

webvpn(config-webvpn-context)# 
secondary-color color

Specifies the color of the secondary title bars on the login, home, and file-access portal pages. The default color is purple. For information on valid color values, see "Color Names and RGB Color Values."

Step 15 

webvpn(config-webvpn-context)# text-color 
[black|white]

Specifies the color of the text of the title bars on the portal page. The default value is white.

Step 16 

webvpn(config-webvpn-context)# 
secondary-text-color [black|white]

Specifies the color of the text of the secondary bars on the portal page. The default value is black.

Step 17 

webvpn(config-webvpn-context)# aaa 
authentication [domain domain-name]|[list 
list-name]

Configures the authentication parameters. Specify either the domain to be used for authentication or an authentication list.

Step 18 

webvpn(config-webvpn-context)# 
default-group-policy policy

Specifies the default group policy that the virtual WebVPN context instance uses. See the "Configuring Group Policy" section for information on group policies.

Step 19 

webvpn(config-webvpn-context)# vrf-name 
vrf-name

Specifies the VRF domain configured for the virtual WebVPN context.

Step 20 

webvpn(config-webvpn-context)# max-users 
number

Specifies the maximum number of client connections that are allowed to be open for the given virtual WebVPN context (per VRF domain).

Step 21 

webvpn(config-webvpn-context)# nbns-list 
name

Creates the NBNS list name and enters nbmslist submode. See the "Configuring File Sharing Using CIFS" section for information on configuring file sharing.

Step 22 

webvpn(config-webvpn-context)# ssl 
authenticate verify {all|none}

Configures the peer certificate verification behavior. This behavior applies to the SSL server certificate when the WebVPN Services Module tries to connect to an HTTPS server.

all—Verifies signature authenticity and revocation status based on the associated trustpoint configuration. This is the default setting.

none—Accepts any certificate that is in its validity period.

Step 23 

webvpn(config-webvpn-context)# 
charset-encoding {shift-jis|iso-8859-1}

(Optional) Enables support for Japanese Shift-JIS encoding in the WebVPN gateway. The default value is iso-8859-1.

Step 24 

webvpn(config-webvpn-context)# inservice

Puts the context in service.

Configuring CSD

Cisco Secure Desktop (CSD) provides a consistent and reliable means of eliminating all traces of sensitive data by providing a single, secure location for session activity and removal on the client system. CSD ensures that cookies, browser history, temporary files, and downloaded content do not remain on a system after a remote user has logged out or after an SSL VPN session has timed out. CSD increases protection against data theft and client system malware (malicious software) by encrypting all data and files associated with or downloaded during the SSL VPN session.

The CSD Manager lets you build and manage the following security components for deployment to your end users:

Locations—The type of site from which Microsoft Windows users connect to the corporate network. Location settings are applicable to Microsoft Windows users only. The settings and options for CSD differ depending on the location type from which the user is connecting. For example, you can configure a location type to use the secure desktop and VPN feature policy components.

Typical location types include work, home, and insecure (such as a Web cafe). You can use Secure Desktop Manager to define as many locations as needed, and each location can have different settings and options that make up its security profile. Windows locations allow deployment of the secure desktop functions on a location-specific basis.

Secure Desktop—Provides an encrypted space to Windows 2000 and Windows XP users, within which the user has an online session using a browser. Secure desktop is transparent and fully secure, requiring only a browser for access. Privileges depend upon the location from which each user accesses your network.

VPN Feature Policy—Provides system detection checking before allowing web browsing, file access, port forwarding, or the SSL VPN client (full tunneling). A feature policy can require and verify the presence of certain safeguards such as antivirus software, firewall software, operating system version, or the other CSD components.

Cache Cleaner—Disables or erases all data that a user downloaded, inserted, or created in the browser, including cached files, configuration changes, cached browser information, passwords entered, and auto-completed information.

This section provides a overview of the steps required to install CSD and configure secure desktop settings. For detailed CSD configuration information, refer to the CSD documentation at this URL:

http://www.cisco.com/univercd/cc/td/doc/product/vpn/ciscosec/csd/csd31/index.htm

Follow these steps to install CSD and configure secure desktop settings:


Step 1 Install the CSD package. See the "Cisco Secure Desktop Package" section on page C-7 for installation procedures.

Step 2 Configure the gateway. See the "Configuring the Virtual Gateway" section for configuration procedures.

Step 3 Configure the context. See the "Configuring the Virtual Context" section for configuration procedures.

Step 4 In context submode, enter the csd enable command to enable CSD.

webvpn(config-webvpn-context)# csd enable

Step 5 From a web browser, launch the CSD Manager to configure secure desktop settings for that context.

For detailed CSD configuration information, refer to the CSD documentation at this URL:

http://www.cisco.com/univercd/cc/td/doc/product/vpn/ciscosec/csd/csd31/index.htm

Step 6 In context submode, enter the inservice command to put the context in service.

webvpn(config-webvpn-context)# inservice

After you have put the context in service, end users can download and install the CSD to their PC.


Configuring Clientless Mode

In clientless mode, you configure an end user portal page that displays all URLs displayed as hotlinks. The HTML interface visible to these WebVPN end users varies depending on the values that you set here. End users see a customized home page (portal page) that includes only those features that you enable.

The types of servers you configure here include web servers that provide the following resources:

Internal websites

e-mail servers for Outlook Web Access (OWA)

Links to a Citrix server


Note If you have enabled Citrix in the group policy, you can add a link in the URL list to the Citrix server. Optionally, you can supply end users with the URL to the Citrix server. End users can enter this URL in the URL field on the floating toolbar. See the "Configuring Group Policy" section for information on enabling the Citrix service.


The portal page for end users who are not members of a group displays all servers that you configure here. If you do not configure any servers or URLs, no servers or URLs are displayed on the portal page, although end users can still access the servers by entering the URL from the toolbar.

To configure the URL lists, perform this task:

 
Command
Purpose

Step 1 

webvpn(config-webvpn-context)# url-list 
listname

Specifies a name for the URL list and enters url submode.

Step 2 

webvpn(config-webvpn-url)# heading text 

Specifies the heading text for the group of URLs. Enclose the text within quotation marks if the heading includes any spaces.

You can specify only one heading per listname.

Step 3 

webvpn(config-webvpn-url)# url-text text 
url-value url

Specifies the text that the end user sees for the link on his or her home page; the text must be unique within a given list name. Enclose the text within quotation marks if the text includes any spaces.

The url parameter specifies the URL of the link. To use OWA for web-based e-mail, append the URL with /exchange (this keyword requires authentication to an Exchange server).

You can specify multiple URLs for a given list name.

Step 4 

webvpn(config-webvpn-url)# exit

Exits url submode and returns to WebVPN context submode.

Specifying no removes the matching line from the configuration; the URL does not need to be included. Specifying no url-list listname removes the given list from the configuration.

This example shows how to configure URL lists:

webvpn(config-webvpn-context)# url-list cisco
webvpn(config-webvpn-url)# url-text cisco url-value http://cisco.com
webvpn(config-webvpn-url)# url-text CNN url-value http://cnn.com
webvpn(config-webvpn-url)# url-text yahoo url-value http://yahoo.com
webvpn(config-webvpn-url)# url-text payroll url-value http://10.1.2.215/payroll
webvpn(config-webvpn-url)# url-text finance url-value https://finance.cisco.com
webvpn(config-webvpn-url)# url-text "OWA server" url-value http://mail.cisco.com/exchange
webvpn(config-webvpn-url)# url-text "CitrixFarm" url-value 
http://10.1.2.10/Citrix/MetaFrame/default/default.aspx
webvpn(config-webvpn-url)# exit
webvpn(config-webvpn-context)#

Configuring File Sharing Using CIFS

This section describe how to configure NetBIOS Name Service (NBNS) servers that the WebVPN Services Module queries to map a NetBIOS name to an IP address.

WebVPN requires NetBIOS to access or share files on remote systems. When you attempt a file-sharing connection to a Windows computer by using its computer name, the file server that you specify corresponds to a specific NetBIOS name that identifies a resource on the network.

To make NBNS operational, you must configure at least one NetBIOS server (host). You can configure up to three NBNS servers for redundancy. The first available server on the list acts as the backup if the active server fails.


Note CIFS name resolution on the WebVPN Services Module does not support broadcast mode, where the NBNS server is attached directly to, and on the same subnet as, the WebVPN gateway. Configure the NBNS server on a different subnet from the WebVPN gateway. The NBNS server should be reachable through a routed network. This requirement also applies to the file servers (you cannot browse file servers that are attached directly to the WebVPN gateway using subnet broadcast).


To configure the NBNS server for file sharing, perform this task:

 
Command
Purpose

Step 1 

webvpn(config-webvpn-context)# nbns-list 
name

Creates an NBNS list name and enters nbmslist submode.

Step 2 

webvpn(config-webvpn-nbnslist)# 
nbns-server ip_addr [master] [timeout 
timeout][retry retries]

Specifies a NetBIOS name service (NBNS) list and server address for Common Internet File System (CIFS) name resolution. You can configure up to three servers.

Note This feature is supported only on Windows 2000 and Samba servers running on Linux.

The ip_addrs specifies the primary domain controller (PDC) on a Windows network.

The master keyword indicates that this is a master browser. Do not enter the master keyword if this a Windows Internet Naming Service (WINS) server.

The timeout value specifies the initial time in seconds to wait for a response to an NBNS query before sending the query to the next server. The default timeout value is 2 seconds; the range is from 1 to 30 seconds.

The retries value specifies the number of times to retry sending a NBNS query to the configured servers, in order. This value represents the number of times to cycle through the list of servers before returning an error. The default retries value is 2; the range is 0 to 10 retries.

Step 3 

webvpn(config-webvpn-nbnslist)# exit

Returns to context submode.

Step 4 

webvpn(config-webvpn-context)# policy 
group policy-name

Specifies the group policy name and enters the group subcommand mode. See the "Configuring Group Policy" section for additional information on configuring group policy settings.

Step 5 

webvpn(config-webvpn-group)# nbns-list 
name

Specifies the previously defined NBNS list.

Note Supported on Windows 2000 servers and Linux/UNIX.

Step 6 

webvpn(config-webvpn-group)# functions 
{file-access | file-browse | file-entry}

Specifies the following functions:

file-access—Enables the end user to access the file servers that are listed on the home page. This keyword is disabled by default. Disabling file-access removes the file-browse and file-entry configuration.

file-browse—Enables the end user to browse file servers. This keyword is disabled by default.

Note You must enable file access before you can enable file browse.

file-entry—Enables the end user to enter file servers or shares directly. This keyword is disabled by default.

Note You must enable file access before you can enable file entry.

Step 7 

webvpn(config-webvpn-group)# exit

Returns to context submode.

Step 8 

webvpn(config-webvpn-context)# 
default-group-policy name

Specifies the default group policy.

Step 9 

webvpn(config-webvpn-context)# gateway 
gateway-name domain-name domain-name}

Specifies the corresponding virtual gateway instance configured on the secure gateway and the mapping methods. The gateway-name parameter should match one of the virtual gateways configured on the system. The domain-name parameter is an ASCII string, which is used to specify a corporate-specific domain name (for example, cisco.com) for the virtual WebVPN instance.

Step 10 

webvpn(config-webvpn-context)# inservice

Puts the context in service.

This example shows how to configure the context for file sharing:

webvpn(config)# webvpn context c1
webvpn(config-webvpn-context)# nbns-list list2
webvpn(config-webvpn-nbnslist)# nbns-server 10.1.1.2
webvpn(config-webvpn-nbnslist)# exit
webvpn(config-webvpn-context)# policy group p1
webvpn(config-webvpn-group)# nbns-list "list2"
webvpn(config-webvpn-group)# functions file-acsess
webvpn(config-webvpn-group)# functions file-browse 
webvpn(config-webvpn-group)# functions file-entry 
webvpn(config-webvpn-group)# exit
webvpn(config-webvpn-context)# default-group-policy p1
webvpn(config-webvpn-context)# gateway g1 domain example.com
webvpn(config-webvpn-context)# inservice

Configuring Thin-Client Mode

Thin-client mode, also called TCP port forwarding, provides access for remote end users to client and server applications that communicate over known, fixed TCP ports. Remote end users can use client applications that are installed on their local PC and securely access remote servers that support those applications.

Cisco has tested the following applications:

E-mail—SMTP, POP3, IMAP4

Virtual Network Computing (VNC)

Windows Terminal Services

Telnet

SSH

Perforce

XDDTS

Sametime Instant Messaging

Other TCP-based applications may also work, but Cisco has not tested them.

Thin-client mode requires installing Sun Microsystems Java Runtime Environment and configuring applications on the end user's PC. Both require administrator permissions. It is unlikely that end users will be able to use applications when they connect from public remote systems, such as Internet kiosks or web cafes.


Note When end users authenticate using digital certificates, the Java applet does not work. Java cannot access the web browser's keystore; therefore, Java cannot use the certificates that the browser used for end user authentication, and the application cannot start. Do not use digital certificates to authenticate WebVPN end users if you want the end users to be able to access applications.


You provide mapping information that the WebVPN Services Module adds to the Hosts file on an end user's PC as the application opens. This mapping information allows the PC to connect to the server at the central site that supports the desired application.

Port forwarding can work only if the applications on remote servers are uniquely identified and reachable either by hostname or by IP address and port. We recommend that you use hostnames. See the "Using Hostnames Versus IP Addresses" section for usage guidelines.

Port forwarding entries are configured in port-fwd submode. Multiple entries may be specified for a given listname. The listname is provided to group the port forwarding entries into a list that can be applied to a username or group policy.

To configure thin-client mode by specifying port forwarding settings, perform this task:

 
Command
Purpose

Step 1 

webvpn(config-webvpn-context)# 
port-forward listname

Specifies a name for a list of forwarded ports and enters WebVPN port-fwd submode. The maximum length of the listname is 63 characters.

Step 2 

webvpn(config-webvpn-port-fwd)# local 
localport remote-server remoteserver 
remote-port remoteport description 
description

Specifies global access to TCP-based applications for WebVPN end users.

For the end user's PC, configure the local TCP port for the application as follows:

Specify the localport parameter for the local port that is listened upon; a localport value may be used only once within a given list name.

Set the port in the range from 1024 to 65535 to avoid conflicts with existing services that may be on the end user's workstation. See the "Guidelines for Local Ports" section for usage guidelines.

For the server that the end user needs to access, configure the remote server and remote TCP port as follows:

Specify the remoteserver parameter as the hostname or IP address to connect to on the remote server. See the "Using Hostnames Versus IP Addresses" section for usage guidelines.

Specify the remoteport parameter as the port to connect to on the remote server.

The description parameter allows for an application name or short description to display on the end user applet window.

Step 3 

webvpn(config-webvpn-port-fwd)# exit

Exits WebVPN port-fwd submode and returns to WebVPN context submode.

This example shows how to configure port forwarding:

webvpn(config-webvpn-context)# port-forward abc
webvpn(config-webvpn-port-fwd)# local-port 25 remote-server "mailman" remote-port 25 
description "SMTP server"
webvpn(config-webvpn-port-fwd)# local-port 110 remote-server "pop3-ny" remote-port 110 
description "POP3-server"
webvpn(config-webvpn-port-fwd)# local-port 143 remote-server "imap-ny" remote-port 143 
description "IMAP server"
webvpn(config-webvpn-port-fwd)# exit
webvpn(config-webvpn-context)# 

Guidelines for Local Ports

When the Java applet is downloaded to start port forwarding mode on end user systems that run on Windows 2000 or XP, the hosts file (located at C:\WINNT\system32\drivers\etc\hosts) is backed up as hosts.webvpn. The Java applet then adds a mapping in the hosts file for each port forwarding entry that you configured in the port forwarding list assigned to the end user.

For example, for the following configuration:

port-forward "cisco"
  local-port 25 remote-server "mailman" remote-port 25 description "smtp"
  local-port 23 remote-server "pc46" remote-port 23 description "telnet"
  local-port 110 remote-server "sjcd-2" remote-port 110 description "pop3"

the Java applet maps "mailman" to 127.0.0.2, "pc46" to 127.0.0.3, and "sjcd-2" to 127.0.0.4 in the client's host file. The Java applet then listens on the remote port for 127.0.0.2:25, 127.0.0.3:23, and 127.0.0.4:110 on the end user's PC.

Because the mapping is done and the Java applet listens on the required ports, you do not need to change the client applications. For example, the client can still create a Telnet connection to host pc46 (telnet pc46), but the Telnet connection actually goes through the Java applet and is secure.

The above configuration assumes that there are no local servers running on ports 23, 25, and 110. But if the end user's PC is running an application on any of the ports before the applet is downloaded (for example, a Telnet server running on the client PC listening on port 23), the applet then tries to run on 127.0.0.1:local-port. This situation creates two possible scenarios:

When local-port is the same as remote-port, the Java applet listens on the local-port 127.0.0.1:23, as in the following example:

local-port 23 remote-server "pc46" remote-port 23 description "telnet"

Port forwarding fails since the port forwarding entry is unusable by the user.

When local-port is different from remote-port, the Java applet listens on 127.0.0.1:1230. as in the following example:

local-port 1230 remote-server "pc46" remote-port 23 description "telnet"

Port forwarding succeeds because no applications are running in port 1230 in the client PC. In this scenario, if the end user wants to open a Telnet connection to host pc46, the end user has to enter telnet 127.0.0.1 1230. Whenever the Java applet listens on the local port, you need to modify the client application to communicate with 127.0.0.1:local-port.

The Java applet also listens on 127.0.0.1:local-port when you configure the remote-server's IP address in the port forwarding entry instead of the hostname, as follows:

local-port 1230 remote-server 19.0.0.1 remote-port 23 description "telnet" 

The above configuration results in the Java applet listening to 127.0.0.1:1230. If the end user wants to open a Telnet connection to 19.0.0.1, the user needs to enter telnet 127.0.0.1:1230.

See the "Using Hostnames Versus IP Addresses" section for usage guidelines.


Note On end user systems that run on Linux, the Java applet always listens on 127.0.0.1:local-port. Therefore, you need to modify all client applications to connect to 127.0.0.1:local-port. No mapping occurs in the hosts file.


Using Hostnames Versus IP Addresses

When you use a hostname to identify a remote server, the Java applet modifies the hosts file (assuming that the operating system is Windows and you have administrative privileges on the PC) to create an entry for each application server. For example, when you configure your first port forwarding remote server with hostname johndoew2ksrv, the Java applet creates a backup copy of the original hosts file, and then modifies the hosts file to include a WebVPN entry that maps johndoew2ksrv to a loopback IP address of 127.0.0.2. If your second port forwarding entry is NotesServer, the Java applet adds an entry that maps NotesServer to 127.0.0.3 to the hosts file. These entries are then associated with the real remote application ports. Each entry is unique because the loopback address that the Java applet assigns is unique.

When you use an IP address to identify the remote server, the Java applet does not back up or modify the hosts file. It assigns each server with the loopback IP address of 127.0.0.1 and the TCP port that is configured as the local TCP port. Because the assigned IP address is always 127.0.0.1, each entry must have a unique local TCP port to differentiate applications.

You configure client applications to communicate to a server address. When you use the hostname and remote TCP port, addressing information for application servers is the same regardless of the end user's location. When you use an IP address and local TCP port, addressing information changes as the end user changes locations. You have to reconfigure client applications on end users' PCs.

Configuring Tunnel Mode


Note Before end users can download and install the SSL VPN client (SVC) to their PCs, you must first install the SVC package to the internal Flash device on the WebVPN Services Module. See the "Installing Client Packages" section on page C-6 for information on installing the SVC package.



Note You configure tunnel mode using group policy commands. Additional group policy commands are described in the "Configuring Group Policy" section.


This section shows how to configure tunnel mode by specifying an IP local address pool, a WebVPN context, and a WebVPN group policy.

In tunnel mode, the gateway supplies an SSL VPN client (SVC) IP address to each of the end users that are logged into the gateway. Enter the ip local pool command to configure the local IP address pool to supply the SVC IP addresses.

To configure tunnel mode, perform this task:

 
Command
Purpose

Step 1 

webvpn(config)# ip local pool 
pool-name start-range end-range

Specfies the IP address pool to be used by the WebVPN Services Module for supplying an IP address for each SVC.

Note The IP address of the WebVPN subinterface should be in the same subnet as this IP address pool. See the "Configuring Interfaces on the WebVPN Services Module" section on page 2-4 to configure the WebVPN subinterface.

Step 2 

webvpn(config)# webvpn context 
context-name

Specifies the WebVPN context to be used in the configuration.

Step 3 

webvpn(config-webvpn-context)# 
policy group policy-name

Specifies the group policy name and enters the group subcommand mode.

Step 4 

webvpn(config-webvpn-group)# 
functions {svc-enabled | 
svc-required}

Enables tunnel mode for this group policy. Tunnel mode is disabled by default.

svc-enabled—Enables the user of the group to use tunnel mode. If the SVC fails to install on the end user's PC, the end user can continue to use clientless mode or thin-client mode.

svc-required—Tunnel mode is required. If the SVC fails to install on the end user's PC, the end user cannot use other modes.

Step 5 

webvpn(config-webvpn-group)# svc 
dpd interval {client | gateway} 
timeout

Specifies the dead peer detection (DPD) interval values for the gateway or the client, if tunnel-mode WebVPN is enabled for the user or group.

The timeout parameter specifies the timeout value in seconds. The DPD timer is used to determine if a DPD packet needs to be sent to the peer. The DPD timer is reset every time a Cisco SSL Tunnel Protocol (CSTP) frame is received from the peer. When either the gateway or the client does not receive a DPD response, the default is disabled for gateway and client.

Valid values for the DPD interval for client and gateway are 0 (disabled) to 3600 seconds.

Step 6 

webvpn(config-webvpn-group)# svc 
address-pool name

Configures the local IP address pool to supply the SVC IP addresses.

Step 7 

webvpn(config-webvpn-group)# svc 
dns-server {primary ip_addr | 
secondary ip_addr}

Specifies the primary and secondary DNS servers for web browsing. After the SVC is installed, the active web browser is deactivated and a new browser is launched. The DNS server information specified here is for the newly launched browser. Once the connection is closed, the previous DNS settings are reapplied.

Step 8 

webvpn(config-webvpn-group)# svc 
homepage url

Specifies the URL of the web page that is displayed when the end user logs in. The url specifies the path of the URL. The maximum length for the URL is 255 characters. This setting is disabled by default.

Step 9 

webvpn(config-webvpn-group)# svc 
wins-server {primary ip_addr | 
secondary ip_addr}

Specifies the primary and secondary WINS servers.

Step 10 

webvpn(config-webvpn-group)# svc 
default-domain default-domain-name

Specifies the default domain used for the group.

Step 11 

webvpn(config-webvpn-group)# svc 
keep-installed 

Specifies that the SVC remains installed on the end user client PC after the connection is closed. By keeping the SVC installed on the end user PC, the end user does not have to download the SVC again when a new connection is established.

The no version of this command uninstalls the VPN client and removes the downloaded setup file after the tunnel is terminated.

Step 12 

webvpn(config-webvpn-group)# svc 
rekey [time interval] [method 
{new-tunnel | ssl}]

Specifies when the VPN client rekeys the SSL tunnel and the rekey method used by the WebVPN client. Rekeying is disabled by default. If rekeying is enabled, the default method is ssl.

Valid values for time interval are 0 to 43200 seconds; the default is 3600 (1 hour).

The method new-tunnel keyword terminates the existing tunnel and requests a new tunnel.

The method ssl keyword triggers the SVC to renegotioate SSL security parameters without terminating the existing tunnel.

Step 13 

webvpn(config-webvpn-group)# svc 
split [dns string]{[include 
ip-address netmask]|[exclude 
ip-address netmask|local-lans]}

Specifies whether all traffic is tunneled to the private network (include) or if traffic destined for an external (nonprivate) network is sent directly to the external website (exclude).

Note You can specify either the include or the exclude keyword; you cannot specify both keywords. You can specify up to 200 addresses for either the include or exclude keyword by entering the command multiple times.

The include keyword allows you to specify the traffic that is tunneled; all other traffic is not tunneled through the internal network.

The exclude keyword allows you to specify the traffic that is sent directly to an external website without being tunneled through the internal network; all other traffic is tunneled.

The exclude local-lans keyword specifies that the end user's local LAN is excluded from being tunneled.

Step 14 

webvpn(config-webvpn-group)# svc 
msie-proxy [exception 
exception-string]|[server 
{ip-address|dns_name}: 
port]|[option {none | auto | 
bypass-local}]

Specifies the Microsoft Internet Explorer (MSIE) browser proxy settings.

Note This command is supported only with the MSIE browser.

The exception keyword specifies a single DNS name or IP address for traffic that is not sent through a proxy. This keyword is disabled by default.

The server keyword specifies an IP address or DNS name, optionally followed by a colon and port number, that is used by all the proxy setting in the browser (HTTP, Secure, FTP, Gopher) except Socks. This keyword is disabled by default.

The option none keyword specifies that the browser does not use a proxy. This setting is the default.

The option auto keyword specifies that the browser proxy settings are automatically detected.

The option bypass-local keyword specifies that the local addresses bypass the proxy.

Step 15 

webvpn(config-webvpn-group)# filter 
tunnel {name | acl_list}

Defines the name of the network-level access lists used for the group policy.

Configuring Policies

See the "Configuring the Virtual Gateway" section for procedures for applying policies to a WebVPN gateway.

This section describes how to configure the following policies:

Configuring Group Policy

Configuring SSL Policy (Optional)

Configuring TCP Policy (Optional)

Configuring Group Policy


Note Group policy commands that are specific to configuring tunnel mode are described in the "Configuring Tunnel Mode" section.



Note Some group policy commands apply to specific modes of remote access. See the notes below each command for specific mode information.


To configure various group policy parameters, perform this task:

 
Command
Purpose

Step 1 

webvpn(config-webvpn-context)# 
policy group policy-name

Specifies the group policy name and enters the group subcommand mode.

Step 2 

webvpn(config-webvpn-group)# citrix 
enabled

Enables Citrix features.

Step 3 

webvpn(config-webvpn-group)# banner 
string

Specifies the banner string for the portal page. The string value may contain 7-bit ASCII values, HTML tags, and escape sequences. This string is presented to the end user after login.

Step 4 

webvpn(config-webvpn-group) 
hide-url-bar 

Disables the URL bar on the portal page.

Note This command applies only to clientless mode.

Step 5 

webvpn(config-webvpn-group) timeout 
{idle time | session time}

Specifies the end-user idle timeout value and maximum session timeout value for the user or group.

The idle timeout specifies the end user inactivity. Valid values for idle timeout are from 0 (disabled) to 3600 seconds; the default value is 2100 seconds (35 minutes).

The session timeout specifies the total session time, regardless of activity. Valid values for session timeout are from 1 to 1209600 seconds; the default value is 43200 seconds (12 hours).

Step 6 

webvpn(config-webvpn-group)# 
nbns-list name

Specifies the NBNS list for CIFS as defined in the context configuration.

Supported only with Windows 2000 servers and Linux/UNIX.

Note This command applies only to clientless mode.

Step 7 

webvpn(config-webvpn-group)# 
url-list name

Specifies the URL list as defined in the context configuration. Entering the command again overrides the previous setting. The default is to have no list specified.

Note This command applies only to clientless mode.

Step 8 

webvpn(config-webvpn-group)# 
port-forward name

Specifies the port-forward list as defined in the context configuration. Entering the command again overrides the previous setting. The default is to have no list specified,

Note This command applies only to thin-client mode.

Configuring SSL Policy (Optional)

The SSL policy template allows you to define parameters associated with the SSL stack.

One of the parameters you can configure is the SSL close-protocol behavior, which specifies that each of the SSL peers should send a close-notify alert and receive a close-notify alert before closing the connection properly. If the SSL connection is not closed properly, the session is removed so that the peers cannot use same SSL session ID in future SSL connections.

However, many SSL implementations do not follow the SSL close-protocol strictly (for example, an SSL peer sends a close-notify alert but does not wait for the close-notify alert from the remote SSL peer before closing the connection).

When an SSL peer initiates the close-connection sequence, the WebVPN Services Module strictly expects a close-notify alert message. If an SSL peer does not send a close-notify alert, the WebVPN Services Module removes the session from the session cache so that the same session ID cannot be used for future SSL connections.

When the WebVPN Services Module initiates the close connection sequence, you can configure the following close-protocol options:

strict—The WebVPN Services Module sends a close-notify alert message to the SSL peer, and the WebVPN Services Module expects a close-notify alert message from the SSL peer. If the WebVPN Services Module does not receive a close-notify alert, SSL resumption is not allowed for that session.

none—The WebVPN Services Module does not send a close-notify alert message to the SSL peer, nor does the WebVPN Services Module expect a close-notify alert message from the SSL peer. The WebVPN Services Module preserves the session information so that SSL resumption can be used for future SSL connections.

disabled (default)—The WebVPN Services Module sends a close-notify alert message to the SSL peer; however, the SSL peer does not expect a close-notify alert before removing the session. Whether the SSL peer sends a close-notify alert or not, the session information is preserved allowing session resumption for future SSL connections.

If you do not associate an SSL policy with a particular proxy server, the proxy server enables all the supported cipher suites and protocol versions by default.

To define an SSL policy, perform this task:

 
Command
Purpose

Step 1 

webvpn(config)# webvpn policy 
ssl ssl_policy_name

Defines SSL policy templates.

Step 2 

webvpn(config-ssl-policy)# cipher {rsa-with-rc4-128-md5 | rsa-with-rc4-128-sha | rsa-with-des-cbc-sha | rsa-with-3des-ede-cbc-sha | others...}

Configures a list of cipher-suite names acceptable to the proxy server. The cipher-suite names follow the same convention as that of existing SSL stacks.

Step 3 

webvpn(config-ssl-policy)# 
tls-rollback [current | any]

Specifies the version of the SLL protocol (SSL2.0, SSL3.0, TLS1.0) in the ClientHello message. TLS rollback is disabled by default.

When you configure the current keyword, the SSL protocol version can be either the maximum supported version or the negotiated version.

When you configure the any keyword, the SSL protocol version is not checked at all.

Note By default, the WebVPN Services Module uses the maximum supported version. Enter this command if the client uses the negotiated version instead of the maximum supported version (as specified in the ClientHello message).

Step 4 

webvpn(config-ssl-policy)# 
version {ssl3 | tls1 | all}

Defines the various protocol versions supported by the proxy server.

Step 5 

webvpn(config-ssl-policy)# 
timeout handshake time

Configures how long the module keeps the connection in handshake phase. The valid range is from 0 to 65535 seconds.

Step 6 

webvpn(config-ssl-policy)# 
close-protocol {strict | none}

Configures the SSL close-protocol behavior. Close-protocol is disabled by default.

Step 7 

webvpn(config-ssl-policy)# 
session-cache 

Enables the session-caching feature. Session caching is enabled by default.

Step 8 

webvpn(config-ssl-policy)# 
timeout session timeout 
[absolute1 ]

Configures the amount of time that an entry is kept in the session cache. The valid range is from 1 to 72000 seconds.

Note The absolute keyword is required in order to configure session-cache size.

Note The absolute keyword specifies that the session entry is kept in the session cache for the specified timeout. When the absolute keyword is specified, new incoming connections are rejected if there are no free entries available in the session cache.

Step 9 

webvpn(config-ssl-policy)# 
session-cache size size

(Optional) Specifies the size of the session cache 1. The valid range is from 1 to 262143 entries.

Note Specify the session cache size when you enter the absolute keyword with the timeout session command. If this command is not entered or if no size is specified, the session cache size is the maximum size (262,144).

1 When the absolute keyword is configured, the session entry is not reused until the configured session timeout expires. When absolute is configured, the number of session entries required is equal to (new_connection_rate * absolute_timeout). Depending on the timeout configuration and the new connection rate, the number of session entries might be very large. In this case, you can limit the number of session entries used by configuring the session-cache size.

Configuring TCP Policy (Optional)

The TCP policy template allows you to define parameters associated with the TCP stack.

To define a TCP policy template, perform this task:

 
Command
Purpose

Step 1 

webvpn(config)# webvpn policy 
tcp tcp_policy_name

Defines TCP policy templates. All defaults are assumed unless otherwise specified.

Step 2 

webvpn(config-tcp-policy)# mss 
max_segment_size

Configures the maximum segment size (MSS), in bytes, that the connection will identify in the SYN packet that it generates.

Note This command allows you to configure a different MSS for the client side and server side of the proxy server. The default is 1460 bytes. The valid range is from 256 to 2460 bytes1 .

Step 3 

webvpn(config-tcp-policy)# 
timeout syn time

Configures the connection establishment timeout. The default is 75 seconds. The valid range is from 5 to 75 seconds.

Step 4 

webvpn(config-tcp-policy)# 
timeout reassembly time

Configures the amount of time, in seconds, before the reassembly queue is cleared. If the transaction is not complete within the specified time, the reassembly queue is cleared and the connection is dropped. The default is 60 seconds. The valid range is from 0 to 960 seconds (0 = disabled).

Step 5 

webvpn(config-tcp-policy)# 
timeout inactivity time

Configures the amount of time, in seconds, that an established connection can be inactive. The default is 600 seconds. The valid range is from 0 to 960 seconds (0 = disabled).

Step 6 

webvpn(config-tcp-policy)# 
timeout fin-wait time

Configures the FIN wait timeout in seconds. The default value is 600 seconds. The valid range is from 75 to 600 seconds.

Step 7 

webvpn(config-tcp-policy)# 
buffer-share rx buffer_limit

Configures the maximum receive buffer share per connection in bytes. The default value is 32768 bytes. The valid range is from 8192 to 262144 bytes.

Step 8 

webvpn(config-tcp-policy)# 
buffer-share tx buffer_limit

Configures the maximum transmit buffer share per connection in bytes. The default value is 32768 bytes. The valid range is from 8192 to 262144 bytes.

Step 9 

webvpn(config-tcp-policy)# tos 
carryover

Forwards the type of service (ToS) value to all packets within a flow.

Note If the policy is configured as a server TCP policy, the ToS value is sent from the server to the client. If the policy is configured as a virtual policy, the ToS value is sent from the client to the server.

Note The ToS value needs to be learned before it can be propagated. For example, when a ToS value is configured to be propagated from the server to the client connection, the server connection must be established before the value is learned and propagated. Therefore, some of the initial packets will not carry the ToS value.

Step 10 

webvpn(config-tcp-policy)# [no] 
nagle

Enables the Nagle algorithm.

When you enable the nagle keyword, small amounts of data that are written by the application is queued into the connection-send queue but is not sent until one of the following situations occurs:

There is data pending and an ACK arrives that acknowledges the data that was previously sent.

The application writes more data so that a full-sized segment is created and sent.

When you disable the nagle keyword, queueing of data does not occur. All data that is written by the application is sent immediately.

Nagle is enabled by default.

Step 11 

webvpn(config-tcp-policy)# 
delayed-ack-threshold packets

Specifies the number of full-sized segments that must be received before a window-update ACK is sent. Valid values for packets are 1 to 10; the default value is 2.

Step 12 

webvpn(config-tcp-policy)# 
delay-ack-timeout timer

Specifies the amount of time before a window-update ACK is sent.

If the number of full-sized segments (as specified in the delayed-ack-threshold command) is not received before this timer expires, then an ACK is sent acknowledging all data received up to this point, but the window is not updated. Valid values for timer are 50 to 500 milliseconds; the default value is 200.

1 If fragmentation occurs, decrease the MSS value until there is no fragmentation.

Configuring Public Key Infrastructure

The WebVPN Services Module uses the SSL protocol to enable secure transactions of data through privacy, authentication, and data integrity; the protocol relies upon certificates, public keys, and private keys.

The certificates, which are similar to digital ID cards, verify the identity of the server to the clients and the clients to the server. The certificates, which are issued by certificate authorities, include the name of the entity to which the certificate was issued, the entity's public key, and the time stamps that indicate the certificate's expiration date.

Public and private keys are the ciphers that are used to encrypt and decrypt information. The public key is shared without any restrictions, but the private key is never shared. Each public-private key pair works together; data that is encrypted with the public key can only be decrypted with the corresponding private key.

Each WebVPN module supports up to 64 gateways. Each gateway acts as an HTTPS server. You must configure a pair of keys for each gateway in order to apply for a certificate for authentication.

We recommend that the certificates be stored in NVRAM so the module does not need to query the certificate authority at startup to obtain the certificates or to automatically enroll. See the "Saving Your Configuration" section for more information.

When users try to access an HTTPS site through the gateway portal page, the WebVPN Services Module acts as an SSL client and needs to authenticate the certificate that it received from that site. The start time, end time, and the signature on the certificate are validated.


Note If you configure the ssl authenticate verify none command in the WebVPN context, the certificate is not verified.


A valid certificate may have been revoked if the key pair has been compromised. If revocation check is necessary, the WebVPN Services Module downloads the certificate revocation list (CRL) from the certificate authority and looks up the serial number of the certificate received.

The certificate can also be filtered by matching certain certificate attribute values with access control list (ACL) maps. Only authenticated certificates that are issued by trusted certificate authorities are accepted.


Note Only the certificate is authenticated, not the sender of the certificate. As part of the SSL handshake, the certificate sender is challenged for ownership of the private key that corresponds to the public key published in the certificate. If the challenge fails, the SSL handshake is aborted by the WebVPN Services Module.


These sections describe how to configure the public key infrastructure (PKI):

Configuring Keys and Certificates

Verifying Certificates and Trustpoints

Saving Your Configuration

Backing Up Keys and Certificates

Monitoring and Maintaining Keys and Certificates

Assigning a Certificate to a WebVPN Gateway and Context

Renewing a Certificate

Automatic Certificate Renewal and Enrollment

Configuring Keys and Certificates

You can configure keys and certificates using one of the following methods:

If you are using Simple Certificate Enrollment Protocol (SCEP), configure the keys and certificates by doing the following:

Generate a key pair.

Declare the trustpoint.

Get the certificate authority certificate.

Send an enrollment request to a certificate authority on behalf of the SSL server.

See the "Configuring the Trustpoint Using SCEP" section for details.

If you are not using SCEP, configure the keys and certificates using the manual certificate enrollment (TFTP and cut-and-paste) feature by doing the following:

Generate or import a key pair.

Declare the trustpoint.

Get the certificate authority certificate and enroll the trustpoint using TFTP or cut-and-paste to create a PKCS10 file.

Request the SSL server certificate offline using the PKCS10 package.

Import the SSL server certificate using TFTP or cut-and-paste.

See the "Manual Certificate Enrollment" section for details.

If you are using an external PKI system, do the following:

Generate PKCS12 or PEM files.

Import this file to the module.

See the "Importing and Exporting Key Pairs and Certificates" section for details.

An external PKI system is a server or a PKI administration system that generates key pairs and enrolls for certificates from a certificate authority or a key and certificate archival system. The Public-Key Cryptography Standards (PKCS) specifies the transfer syntax for personal identity information, including the private keys and certificates. This information is packaged into an encrypted file. To open the encrypted file, you must know a pass phrase. The encryption key is derived from the pass phrase.


Note You do not need to configure a trustpoint before importing the PKCS12 or PEM files. If you import keys and certificates from PKCS12 or PEM files, the trustpoint is created automatically, if it does not already exist.


Configuring the Trustpoint Using SCEP

To configure a trustpoint using SCEP, complete the following tasks:

Generating RSA Key Pairs

Declaring the Trustpoint

Obtaining the Certificate Authority Certificate

Requesting a Certificate

Generating RSA Key Pairs


Note The first key pair generated enables SSH on the module. If you are using SSH, configure a key pair for SSH. See the "Configuring Authentication for Administrators" section on page 2-5.


RSA is the public key cryptographic system developed by Ron Rivest, Adi Shamir, and Leonard Aldeman. The RSA algorithm is widely used by certificate authorities and SSL servers to generate key pairs. Each certificate authority and each SSL server has its own RSA key pair. The SSL server sends its public key to the certificate authority when enrolling for a certificate. The SSL server uses the certificate to prove its identity to clients when setting up the SSL session.

The SSL server keeps the private key in a secure storage and sends only the public key to the certificate authority, which uses its private key to sign the certificate that contains the server's public key and other identifying information about the server.

Each certificate authority keeps the private key secret and uses the private key to sign certificates for its subordinate certificate authorities and SSL servers. The certificate authority has a certificate that contains its public key.

The certificate authorities form a hierarchy of one or more levels. The top-level certificate authority is called the root certificate authority. The lower level certificate authorities are called intermediate or subordinate certificate authorities. The root certificate authority has a self-signed certificate, and it signs the certificate for the next level subordinate certificate authority, which in turn signs the certificate for the next lower level certificate authority, and so on. The lowest level certificate authority signs the certificate for the SSL server.


Note The WebVPN Services Module supports up to eight levels of certificate authority (one root certificate authority and up to seven subordinate certificate authorities). For an example of a three-level (3-tier) enrollment, see the "Example of Three-Tier Certificate Authority Enrollment" section.


These certificates form a chain with the server certificate at the bottom and the root certificate authority's self-signed certificate at the top. Each signature is formed by using the private key of the issuing certificate authority to encrypt a hash digest of the certificate body. The signature is attached to the end of the certificate body to form the complete certificate.

When setting up an SSL session, the SSL server sends its certificate chain to the client. The client verifies the signature of each certificate up the chain by retrieving the public key from the next higher-level certificate to decrypt the signature attached to the certificate body. The decryption result is compared with the hash digest of the certificate body. Verification terminates when one of the certificate authority certificates in the chain matches one of the trusted certificate authority certificates stored in the client's own database.

If the top-level certificate authority certificate is reached in the chain, and there is no match of trusted self-signed certificates, the client may terminate the session or prompt the user to view the certificates and determine if they can be trusted.

After the SSL authenticates the server, it uses the public key from the server certificate to encrypt a secret and send it over to the server. The SSL server uses its private key to decrypt the secret. Both sides use the secret and two random numbers they exchanged to generate the key material required for the rest of the SSL session for data encryption, decryption, and integrity checking.


Note The WebVPN Services Module supports only general-purpose keys.


When you generate general-purpose keys, only one pair of RSA keys is generated. Named key pairs allow you to have multiple RSA key pairs, enabling the Cisco IOS software to maintain a different key pair for each identity certificate. We recommend that you specify a name for the key pairs.


Note The generated key pair resides in the system memory (RAM). Key pairs will be lost on power failure or module reset. You must enter the copy system:running-config nvram:startup-config command to save the running configuration, as well as save the key pairs to the private configuration file in the module NVRAM.


To generate RSA key pairs, perform this task:

Command
Purpose
webvpn(config)# crypto key generate rsa 
general-keys label key-label [exportable1 ] 
[modulus size]

Generates RSA key pairs.

1 The exportable keyword specifies that the key is allowed to be exported. You can specify that a key is exportable during key generation. Once the key is generated as either exportable or not exportable, it cannot be modified for the life of the key.



Note When you generate RSA keys, you are prompted to enter a modulus length in bits. The WebVPN Services Module supports modulus lengths of 512, 768, 1024, 1536, and 2048 bits. Although you can specify 512 or 768, we recommend a minimum modulus length of 1024. A longer modulus takes longer to generate and takes longer to use, but it offers stronger security.


This example shows how to generate general-purpose RSA keys:

webvpn(config)# crypto key generate rsa general-keys label kp1 exportable 

The name for the keys will be: kp1
Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]: 1024

Generating RSA keys.... [OK]. 


Note After you generate a key pair, you can test the SSL service by generating a self-signed certificate.


Declaring the Trustpoint

You should declare one trustpoint to be used by the WebVPN Services Module for each certificate.

To declare the trustpoint that your module uses and specify characteristics for the trustpoint, perform this task beginning in global configuration mode:

 
Command
Purpose

Step 1 

webvpn(config)# crypto pki trustpoint 
trustpoint-label1 

Declares the trustpoint that your module should use. Enabling this command puts you in ca-trustpoint configuration mode.

Step 2 

webvpn(ca-trustpoint)# rsakeypair key-label

Specifies which key pair to associate with the certificate.

Step 3 

webvpn(ca-trustpoint)# enrollment [mode ra] 
[retry [period minutes] [count count]] url url 

Specifies the enrollment parameters for your certificate authority.

Step 4 

webvpn(ca-trustpoint)# ip-address 
server_ip_addr 

(Optional) Specifies the IP address of the WebVPN gateway that will use this certificate2 .

Step 5 

webvpn(ca-trustpoint)# password password

(Optional) Configures a challenge password.

Step 6 

webvpn(ca-trustpoint)# revocation-check 
method1 [method2[method3]]

(Optional) Specifies how to check the revocation status of a certificate.

The available methods are as follows:

crl—Certificate checking is performed by a certificate revocation list (CRL). This behavior is the default.

none—Certificate checking is not required.

ocsp—Certificate checking is performed by an Online Certificate Status Protocol (OCSP) server.

If a second and third method are specified, each method will be used only if the previous method returns an error, such as a server being down.

Step 7 

webvpn(ca-trustpoint)# subject-name line3 , 4 

(Optional) Configures the hostname of the WebVPN gateway5 .

Step 8 

webvpn(ca-trustpoint)# exit

Exits ca-trustpoint configuration mode.

1 The trustpoint-label should match the key-label of the keys; however, this is not a requirement.

2 Some web browsers compare the IP address in the SSL server certificate with the IP address that might appear in the URL. If the IP addresses do not match, the browser may display a dialog box and ask the client to accept or reject this certificate.

3 For example, subject-name CN=server1.domain2.com, where server1 is the name of the SSL server that appears in the URL. The subject-name command uses the Lightweight Directory Access Protocol (LDAP) format.

4 Arguments specified in the subject name must be enclosed in quotation marks if they contain a comma. For example, O="Cisco, Inc."

5 Some browsers compare the CN field of the subject name in the SSL server certificate with the hostname that might appear in the URL. If the names do not match, the browser may display a dialog box and ask the client to accept or reject the certificate. Also, some browsers will reject the SSL session setup and silently close the session if the CN field is not defined in the certificate.

This example shows how to declare the trustpoint PROXY1 and verify connectivity:

webvpn(config)# crypto pki trustpoint PROXY1
webvpn(ca-trustpoint)# rsakeypair PROXY1
webvpn(ca-trustpoint)# enrollment url http://exampleCA.cisco.com
webvpn(ca-trustpoint)# revocation-check none
webvpn(ca-trustpoint)# subject-name C=US, ST=California, L=San Jose, O=Cisco, OU=Lab,
CN=host1.cisco.com
webvpn(ca-trustpoint)# end
webvpn# ping example.cisco.com
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 20.0.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
webvpn#

Obtaining the Certificate Authority Certificate

For each trustpoint, you must obtain a certificate that contains the public key of the certificate authority; multiple trustpoints can use the same certificate authority.


Note Contact the certificate authority to obtain the correct fingerprint of the certificate and verify the fingerprint displayed on the console.


To obtain the certificate that contains the public key of the certificate authority, perform this task in global configuration mode:

Command
Purpose
webvpn(config)# crypto pki authenticate 
trustpoint-label

Obtains the certificate that contains the public key of the certificate authority. Enter the same trustpoint_label that you entered when declaring the trustpoint.


This example shows how to obtain the certificate of the certificate authority:

webvpn(config)# crypto pki authenticate PROXY1
Certificate has the following attributes:
Fingerprint: A8D09689 74FB6587 02BFE0DC 2200B38A 
% Do you accept this certificate? [yes/no]: y
Trustpoint CA certificate accepted.
webvpn(config)# end
webvpn#

Requesting a Certificate

You must obtain a signed certificate from the certificate authority for each trustpoint.

To request signed certificates from the certificate authority, perform this task in global configuration mode:

Command
Purpose
webvpn(config)# crypto pki enroll 
trustpoint-label1 

Requests a certificate for the trustpoint.

1 You have the option to create a challenge password that is not saved with the configuration. This password is required in the event that your certificate needs to be revoked, so you must remember this password.



Note If your module or switch reboots after you have entered the pki enroll command but before you have received the certificates, you must reenter the command and notify the certificate authority administrator.


This example shows how to request a certificate:

webvpn(config)# crypto pki enroll PROXY1
%
% Start certificate enrollment.. 

% The subject name in the certificate will be: C=US; ST=California; L=San Jose; O=Cisco; 
OU=Lab; CN=host1.cisco.com
% The subject name in the certificate will be: host.cisco.com
% The serial number in the certificate will be: 00000000
% The IP address in the certificate is 10.0.0.1

% Certificate request sent to Certificate Authority
% The certificate request fingerprint will be displayed.
% The 'show crypto pki certificate' command will also show the fingerprint.
Fingerprint:  470DE382 65D8156B 0F84C2AF 4538B913 
webvpn(config)# end

After you configure the trustpoint, see the "Verifying Certificates and Trustpoints" section to verify the certificate and trustpoint information.

Example of Three-Tier Certificate Authority Enrollment

The WebVPN Services Module supports up to eight levels of certificate authority (one root certificate authority and up to seven subordinate certificate authorities).

The following example shows how to configure three levels of certificate authority:

Generating the Keys

webvpn(onfig)# crypto key generate rsa general-keys label key1 exportable
The name for the keys will be:key1
Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]:1024
% Generating 1024 bit RSA keys ...[OK]

Defining the Trustpoints

webvpn(config)# crypto pki trustpoint 3tier-root
webvpn(ca-trustpoint)# enrollment url tftp://10.1.1.1
webvpn(ca-trustpoint)#
webvpn(ca-trustpoint)# exit 
webvpn(config)# crypto pki trustpoint 3tier-sub1 
webvpn(ca-trustpoint)# enrollment url tftp://10.1.1.2
webvpn(ca-trustpoint)#
webvpn(ca-trustpoint)# exit
webvpn(config)# crypto pki trustpoint tp-proxy1 
webvpn(ca-trustpoint)# enrollment url tftp://10.1.1.3
webvpn(ca-trustpoint)# serial-number 
webvpn(ca-trustpoint)# password cisco
webvpn(ca-trustpoint)# subject CN=ste.cisco.com
webvpn(ca-trustpoint)# rsakeypair key1 
webvpn(ca-trustpoint)# show
 enrollment url tftp://10.1.1.3
 serial-number
 password 7 02050D480809
 subject-name CN=ste.cisco.com
 rsakeypair key1
end
webvpn(ca-trustpoint)# exit

Authenticating the Three Certificate Authorities (One Root And Two Subordinate Certificate Authorities)

webvpn(config)# crypto pki authenticate 3tier-root
Certificate has the following attributes:
Fingerprint:84E470A2 38176CB1 AA0476B9 C0B4F478 
% Do you accept this certificate? [yes/no]:yes
Trustpoint CA certificate accepted.
webvpn(config)#
webvpn(config)# crypto pki authenticate 3tier-sub1
Certificate has the following attributes:
Fingerprint:FE89FB0D BF8450D7 9934C926 6C66708D 
Certificate validated - Signed by existing trustpoint CA certificate.
Trustpoint CA certificate accepted.
webvpn(config)#
webvpn(config)# crypto pki authenticate tp-proxy1
Certificate has the following attributes:
Fingerprint:6E53911B E29AE44C ACE773E7 26A098C3 
Certificate validated - Signed by existing trustpoint CA certificate.
Trustpoint CA certificate accepted.

Enrolling with the Third Level Certificate Authority

webvpn(config)# crypto pki enroll tp-proxy1
%
% Start certificate enrollment .. 

% The fully-qualified domain name in the certificate will be:ste.
% The subject name in the certificate will be:ste.
% The serial number in the certificate will be:B0FFF0C2
% Include an IP address in the subject name? [no]:
Request certificate from CA? [yes/no]:yes
% Certificate request sent to Certificate Authority
% The certificate request fingerprint will be displayed.
% The 'show crypto pki certificate' command will also show the fingerprint.

webvpn(config)#    Fingerprint: 74390E57 26F89436 6FC52ABE 24E23CD9 

webvpn(config)#
*Apr 18 05:10:20.963:%CRYPTO-6-CERTRET:Certificate received from Certificate Authority

Manual Certificate Enrollment

The Manual Certificate Enrollment (TFTP and cut-and-paste) feature allows you to generate a certificate request and accept certificate authority certificates as well as router certificates. These tasks are accomplished with a TFTP server or manual cut-and-paste operations. You may want to use TFTP or manual cut-and-paste enrollment in the following situations:

Your certificate authority does not support Simple Certificate Enrollment Protocol (SCEP) (which is the most commonly used method for sending and receiving requests and certificates).

A network connection between the router and certificate authority is not possible (which is how a router running Cisco IOS software obtains its certificate).

Configure the Manual Certificate Enrollment (TFTP and cut-and-paste) feature as described at this URL:

http://www.cisco.com/univercd/cc/td/doc/product/software/ios122/122newft/122t/122t13/ftmancrt.htm


Note If the certificate revocation list (CRL) fails to download because the CRL server is unreachable or the CRL download path does not exist, the certificate might fail to import. You should make sure all trustpoints that are linked to the import process are able to download the CRL. If the CRL path does not exist, or if the CRL server is unreachable, then you should enter the revocation-check none command for all trustpoints that are linked to the import process. Enter the show crypto pki certificates command to display information for all certificates, and obtain a list of associated trustpoints from the display of the certificate authority certificate. Enter the revocation-check none command for all these trustpoints.

For example, in a three-tier certificate authority hierarchy (root CA, subordinate CA1, and subordinate CA2), when you import the subordinate CA1 certificate, enter the revocation-check none command for all the trustpoints associated with root CA. Similarly, when you import the subordinate CA2 certificate, enter the revocation-check none command for all the trustpoints associated with root CA and subordinate CA1.

After you successfully import the certificate, you can restore the original CRL options on the trustpoints.


Example 1: Configuring Certificate Enrollment Using TFTP (One-Tier Certificate Authority)

1. Configure the trustpoint:

webvpn# configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
webvpn(config)# crypto pki trustpoint tftp_example
webvpn(ca-trustpoint)# enrollment url tftp://10.1.1.2/win2k
webvpn(ca-trustpoint)# rsakeypair pair3
webvpn(ca-trustpoint)# exit

2. Request a certificate for the trustpoint:

webvpn(config)# crypto pki enroll tftp_example 
% Start certificate enrollment .. 

% The fully-qualified domain name in the certificate will be: ssl-proxy.cisco.com
% The subject name in the certificate will be: ssl-proxy.cisco.com
% Include the router serial number in the subject name? [yes/no]: yes
% The serial number in the certificate will be: 00000000
% Include an IP address in the subject name? [no]: 
Send Certificate Request to tftp server? [yes/no]: yes
% Certificate request sent to TFTP Server
% The certificate request fingerprint will be displayed.
% The 'show crypto pki certificate' command will also show the fingerprint.
webvpn(config)#    Fingerprint:  D012D925 96F4B5C9 661FEC1E 207786B7 
!!

3. Obtain the certificate that contains the public key of the certificate authority:

webvpn(config)# crypto pki auth tftp_example
Loading win2k.ca from 10.1.1.2 (via Ethernet0/0.168): !
[OK - 1436 bytes]

Certificate has the following attributes:
Fingerprint: 2732ED87 965F8FEB F89788D4 914B877D 
% Do you accept this certificate? [yes/no]: yes
Trustpoint CA certificate accepted.
webvpn(config)#

4. Import the server certificate:

webvpn(config)# crypto pki import tftp_example cert
% The fully-qualified domain name in the certificate will be: ssl-proxy.cisco.com
Retrieve Certificate from tftp server? [yes/no]: yes
% Request to retrieve Certificate queued

webvpn(config)#
Loading win2k.crt from 10.1.1.2 (via Ethernet0/0.168): !
[OK - 2112 bytes]

webvpn(config)#
*Apr 15 12:02:33.535: %CRYPTO-6-CERTRET: Certificate received from Certificate 
Authority
webvpn(config)#

Example 2: Configuring Certificate Enrollment Using Cut-and-Paste (One-Tier Certificate Authority)

1. Generate the RSA key pair:

webvpn(config)# crypto key generate rsa general-keys label CSR-key exportable 
The name for the keys will be:CSR-key
Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]:1024
% Generating 1024 bit RSA keys ...[OK]

2. Configure the trustpoints:

webvpn(config)# crypto pki trustpoint CSR-TP
webvpn(ca-trustpoint)# rsakeypair CSR-key
webvpn(ca-trustpoint)# serial
webvpn(ca-trustpoint)# subject-name CN=abc, OU=hss, O=cisco
webvpn(ca-trustpoint)# enrollment terminal
webvpn(ca-trustpoint)# exit

3. Request a certificate for the trustpoint:

webvpn(config)# crypto pki enroll CSR-TP
% Start certificate enrollment .. 

% The subject name in the certificate will be:CN=abc, OU=hss, O=cisco
% The fully-qualified domain name in the certificate will be:ssl-proxy.cisco.com
% The subject name in the certificate will be:ssl-proxy.cisco.com
% The serial number in the certificate will be:B0FFF22E
% Include an IP address in the subject name? [no]:no
Display Certificate Request to terminal? [yes/no]:yes
Certificate Request follows:

MIIBwjCCASsCAQAwYTEOMAwGA1UEChMFY2lzY28xDDAKBgNVBAsTA2hzczEMMAoG
A1UEAxMDYWJjMTMwDwYDVQQFEwhCMEZGRjIyRTAgBgkqhkiG9w0BCQIWE3NzbC1w
cm94eS5jaXNjby5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALt7O6tt
30lBVVK1qAE/agsuzIaa15YZft3bDb9t3pPncKh0ivBTgVKpJiLPWGZPjdbtejxQ
tYSF77R1pmhK0WSKPuu7fJPYr/Cbo80OUzkRAgMBAAGgITAfBgkqhkiG9w0BCQ4x
EjAQMA4GA1UdDwEB/wQEAwIFoDANBgkqhkiG9w0BAQQFAAOBgQC2GIX06/hihXHA
DA5sOpxgLsO1rMP8PF4bZDdlpWLVBSOrp4S1L7hH9P2NY9rgZAJhDTRfGGm179JY
GOtUuCyPYPkpb0S5VGTUrHvvUWekleKq2d91kfgbkRmJmHBaB2Ev5DNBcV11SIMX
RULG7oUafU6sxnDWqbMseToF4WrLPg==

---End - This line not part of the certificate request---

Redisplay enrollment request? [yes/no]:no

4. Import the certificate authority certificate:

webvpn(config)# crypto pki authenticate CSR-TP

Enter the base 64 encoded CA certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIICxzCCAjCgAwIBAgIBADANBgkqhkiG9w0BAQQFADBSMQswCQYDVQQGEwJBVTET
MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ
dHkgTHRkMQswCQYDVQQDEwJjYTAeFw0wMzA2MjYyMjM4MDlaFw0wODEyMTYyMjM4
MDlaMFIxCzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMSEwHwYDVQQK
ExhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQxCzAJBgNVBAMTAmNhMIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQCcG9ObqOLmf0cASkF48jz8X7ZQxT1H68OQKNC3
ks95vkGbOAa/1/R4ACQ3s9iPkcGQVqi4Dv8/iNG/1mQo8HBwtR9VgG0l8IGBbuiZ
dlarYnQHUz6Bm/HzE1RXVOY/VmyPOVevYy8/cYhwx/xOE9BYQOyP15Chi8nhIS5F
+WWoHQIDAQABo4GsMIGpMB0GA1UdDgQWBBS4Y+/lSXKDrw5N5m/tgCzu/W81PDB6
BgNVHSMEczBxgBS4Y+/lSXKDrw5N5m/tgCzu/W81PKFWpFQwUjELMAkGA1UEBhMC
QVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdp
dHMgUHR5IEx0ZDELMAkGA1UEAxMCY2GCAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG
9w0BAQQFAAOBgQB/rPdLFVuycbaJQucdFQG7kl/XBNI7aY3IL3Lkeumt/nXD+eCn
RpYE5WWY8X1Aizqnj4bqFdqPqYdD7Lg8viwqm2tQmU6zCsdaKhL1J7FCWbfs2+Z5
oNV2Vsqx0Ftnf8en/+HtyS2AdXHreThfgkXz3euXD0ISMFVKRy81o4EdzA==
-----END CERTIFICATE-----

Certificate has the following attributes:
Fingerprint:B8B35B00 095573D0 D3B8FA03 B6CA8934 
% Do you accept this certificate? [yes/no]:yes
Trustpoint CA certificate accepted.
% Certificate successfully imported

webvpn(config)#

5. Import the server certificate (the server certificate is issued by the certificate authority whose certificate is imported in Step 4):

webvpn(config)# crypto pki import CSR-TP certificate
% The fully-qualified domain name in the certificate will be:ssl-proxy.cisco.com

Enter the base 64 encoded certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIIB7TCCAVYCAQQwDQYJKoZIhvcNAQEEBQAwUjELMAkGA1UEBhMCQVUxEzARBgNV
BAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0
ZDELMAkGA1UEAxMCY2EwHhcNMDMxMTIwMDAxMzE2WhcNMDQxMTE5MDAxMzE2WjAs
MQ4wDAYDVQQKEwVjaXNjbzEMMAoGA1UECxMDaHNzMQwwCgYDVQQDEwNhYmMwgZ8w
DQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALt7O6tt30lBVVK1qAE/agsuzIaa15YZ
ft3bDb9t3pPncKh0ivBTgVKpJiLPWGZPjdbtejxQksuSY589V+GMDrO9B4Sxn+5N
p2bQmd745NvI4gorNRvXcdjmE+/SzE+bBSBcKAwNtYSF77R1pmhK0WSKPuu7fJPY
r/Cbo80OUzkRAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAjqJ9378P6Gz69Ykplw06
Powp+2rbe2iFBrE1xE09BL6G6vzcBQgb5W4uwqxe7SIHrHsS0/7Be3zeJnlOseWx
/KVj7I02iPgrwUa9DLavwrTyaa0KtTpti/i5nIwTNh5xkp2bBJQikD4TEK7HAvXf
HQ9SyB3YZJk/Bjp6/eFHEfU=
-----END CERTIFICATE-----

% Router Certificate successfully imported

webvpn(config)#^Z

Example 3: Configuring Certificate Enrollment Using TFTP (Three-Tier Certificate Authority)

1. Generate the RSA key pair:

webvpn(config)# crypto key generate rsa general-keys label test-3tier exportable 
The name for the keys will be:test-3tier
Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]:1024
% Generating 1024 bit RSA keys ...[OK]

2. Configure the trustpoint:

webvpn(config)# crypto pki trustpoint test-3tier 
webvpn(ca-trustpoint)# serial-number 
webvpn(ca-trustpoint)# password cisco
webvpn(ca-trustpoint)# subject CN=test-3tier, OU=hss, O=Cisco
webvpn(ca-trustpoint)# rsakeypair test-3tier 
webvpn(ca-trustpoint)# enrollment url tftp://10.1.1.3/test-3tier
webvpn(ca-trustpoint)# exit

3. Generate the certificate signing request (CSR) and send it to the TFTP server:

webvpn(config)# crypto pki enroll test-3tier
%
% Start certificate enrollment .. 

% The subject name in the certificate will be:CN=test-3tier, OU=hss, O=Cisco
% The fully-qualified domain name in the certificate will be:ssl-proxy.cisco.com
% The subject name in the certificate will be:ssl-proxy.cisco.com
% The serial number in the certificate will be:B0FFF22E
% Include an IP address in the subject name? [no]:
Send Certificate Request to tftp server? [yes/no]:yes
% Certificate request sent to TFTP Server
% The certificate request fingerprint will be displayed.
% The 'show crypto pki certificate' command will also show the fingerprint.

webvpn(config)# Fingerprint: 19B07392 319B2ACF F8FABE5C 52798971 

webvpn(config)#
!!

4. Use the CSR to acquire the SSL certificate offline from the third-level certificate authority.

5. Authenticate the three certificate authorities (one root and two subordinate certificate authorities):

webvpn(config)# crypto pki trustpoint test-1tier 
webvpn(ca-trustpoint)# enrollment url tftp://10.1.1.3/test-1tier 
webvpn(ca-trustpoint)# revocation-check none
webvpn(ca-trustpoint)# exit
webvpn(config)# crypto pki authenticate test-1tier 
Loading test-1tier.ca from 10.1.1.3 (via Ethernet0/0.172):!
[OK - 1046 bytes]

Certificate has the following attributes:
Fingerprint:AC6FC55E CC29E891 0DC3FAAA B4747C10 
% Do you accept this certificate? [yes/no]:yes
Trustpoint CA certificate accepted.

webvpn(config)# crypto pki trustpoint test-2tier 
webvpn(ca-trustpoint)# enrollment url tftp://10.1.1.3/test-2tier 
webvpn(ca-trustpoint)# revocation-check none
webvpn(ca-trustpoint)# exit
webvpn(config)# crypto pki authenticate test-2tier 
Loading test-2tier.ca from 10.1.1.3 (via Ethernet0/0.172):!
[OK - 1554 bytes]

Certificate has the following attributes:
Fingerprint:50A986F6 B471B82D E11B71FE 436A9BE6 
Certificate validated - Signed by existing trustpoint CA certificate.
Trustpoint CA certificate accepted.

webvpn(config)# crypto pki authenticate test-3tier 
Loading test-3tier.ca from 10.1.1.3 (via Ethernet0/0.172):!
[OK - 1545 bytes]

Certificate has the following attributes:
Fingerprint:2F2E44AC 609644FA 5B4B6B26 FDBFE569 
Certificate validated - Signed by existing trustpoint CA certificate.
Trustpoint CA certificate accepted.

6. Import the server certificate:

webvpn(config)# crypto pki import test-3tier certificate 
% The fully-qualified domain name in the certificate will be:ssl-proxy.cisco.com
Retrieve Certificate from tftp server? [yes/no]:yes
% Request to retrieve Certificate queued

webvpn(config)#
Loading test-3tier.crt from 10.1.1.3 (via Ethernet0/0.172):!
[OK - 1608 bytes]

webvpn(config)#
*Nov 25 21:52:36.299:%CRYPTO-6-CERTRET:Certificate received from Certificate Authority
webvpn(config)# ^Z

Example 4: Configuring Certificate Enrollment Using Cut-and-Paste (Three-Tier Certificate Authority)

1. Generate the RSA key pair:

webvpn(config)# crypto key generate rsa general-keys label tp-proxy1 exportable
The name for the keys will be:tp-proxy1
Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]:1024
% Generating 1024 bit RSA keys ...[OK]

2. Configure the trustpoint:

webvpn(config)# crypto pki trustpoint tp-proxy1
webvpn(ca-trustpoint)# enrollment ter
webvpn(ca-trustpoint)# rsakeypair tp-proxy1
webvpn(ca-trustpoint)# serial
webvpn(ca-trustpoint)# subject-name CN=test
webvpn(ca-trustpoint)# exit

3. Request a certificate for the trustpoint:

webvpn(config)# crypto pki enroll tp-proxy1
% Start certificate enrollment .. 

% The subject name in the certificate will be:CN=test
% The fully-qualified domain name in the certificate will be:ssl-proxy.
% The subject name in the certificate will be:ssl-proxy.
% The serial number in the certificate will be:B0FFF14D
% Include an IP address in the subject name? [no]:no
Display Certificate Request to terminal? [yes/no]:yes
Certificate Request follows:

MIIBnDCCAQUCAQAwOzENMAsGA1UEAxMEdGVzdDEqMA8GA1UEBRMIQjBGRkYxNEQw
FwYJKoZIhvcNAQkCFgpzc2wtcHJveHkuMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB
iQKBgQDFx1ol9IXoAx4fyUhaXH6s4p5t9soIZ1gvLtVX6Fp6zfuX47os5TGJH/IX
zV9B4e5Kv+wlMD0AvTh+/tvyAP3TMpCdpHYosd2VaTIgExpHf4M5Ruh8IebVKV25
rraIpNiS0PvPLFcrw4UfJVNpsc2XBxBhpT+FS9y67LqlhfSN4wIDAQABoCEwHwYJ
KoZIhvcNAQkOMRIwEDAOBgNVHQ8BAf8EBAMCBaAwDQYJKoZIhvcNAQEEBQADgYEA
kOIjd1KNJdKLMf33YELRd3MW/ujJIuiT1J8RYVbw1eE8JQf68TTdKiYqzQcoMgsp
ez3vSPxXFZ/c6naXdVyrTikTX3GZ1mu+UOvV6/Jaf5QcXa9tAi3fgyguV7jQMPjk
Qj2GrwhXjcqZGOMBh6Kq6s5UPsIDgrL036I42B6B3EQ=

---End - This line not part of the certificate request---

Redisplay enrollment request? [yes/no]:no

4. Get the certificate request from Step 3 signed by a third-level certificate authority.

5. Define and import all certificate authorities (one root and two subordinate certificate authorities).

a. Define two trustpoints for root certificate authority and subordinate 1 certificate authority.


Note The display in this procedure uses tp-proxy1 to import the subordinate 2 certificate authority certificate.


webvpn(config)# crypto pki trustpoint 3tier-root
webvpn(ca-trustpoint)# enrollment terminal
webvpn(ca-trustpoint)# crl op
webvpn(ca-trustpoint)# exit
webvpn(config)# crypto pki trustpoint 3tier-sub1
webvpn(ca-trustpoint)# enrollment terminal
webvpn(ca-trustpoint)# crl op
webvpn(ca-trustpoint)# exit

b. Import the root certificate authority certificate:

webvpn(config)# crypto pki authenticate 3tier-root

Enter the base 64 encoded CA certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIIC1zCCAoGgAwIBAgIQadUxzU/i97hDmZRYJ1bBcDANBgkqhkiG9w0BAQUFADB1
MQswCQYDVQQGEwJVUzETMBEGA1UECBMKY2FsaWZvcm5pYTERMA8GA1UEBxMIc2Fu
IGpvc2UxDjAMBgNVBAoTBWNpc2NvMQwwCgYDVQQLEwNoc3MxIDAeBgNVBAMTF3Np
bXBzb24tZGV2dGVzdC1yb290LUNBMB4XDTAzMTExMTIxNDgwMloXDTEzMTExMTIx
NTczOVowdTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCmNhbGlmb3JuaWExETAPBgNV
BAcTCHNhbiBqb3NlMQ4wDAYDVQQKEwVjaXNjbzEMMAoGA1UECxMDaHNzMSAwHgYD
VQQDExdzaW1wc29uLWRldnRlc3Qtcm9vdC1DQTBcMA0GCSqGSIb3DQEBAQUAA0sA
MEgCQQCWEibAnUlVqQNUn0Wb94qnHi8FKjmVhibLHGRl6J+V7gHgzmF2MTz5WP5l
VQ2/1NVu0HjUORRdeCm1/raKJ/7ZAgMBAAGjgewwgekwCwYDVR0PBAQDAgHGMA8G
A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCYGLUBTKNd9EgUonHnoSvbHg0axMIGX
BgNVHR8EgY8wgYwwQ6BBoD+GPWh0dHA6Ly9jaXNjby1sOGo2b2hwbnIvQ2VydEVu
cm9sbC9zaW1wc29uLWRldnRlc3Qtcm9vdC1DQS5jcmwwRaBDoEGGP2ZpbGU6Ly9c
XGNpc2NvLWw4ajZvaHBuclxDZXJ0RW5yb2xsXHNpbXBzb24tZGV2dGVzdC1yb290
LUNBLmNybDAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQUFAANBACBqe1wy
YjalelGZqLVu4bDVMFo6ELCV2AMBgi41K3ix+Z/03PJd7ct2BIAF4lktv9pCe6IO
EoBcmZteA+TQcKg=
-----END CERTIFICATE-----

Certificate has the following attributes:
Fingerprint:AC6FC55E CC29E891 0DC3FAAA B4747C10 
% Do you accept this certificate? [yes/no]:yes
Trustpoint CA certificate accepted.
% Certificate successfully imported

c. Import the subordinate 1 certificate authority certificate:

webvpn(config)# crypto pki authenticate 3tier-sub1

Enter the base 64 encoded CA certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIIETzCCA/mgAwIBAgIKGj0cBwAAAAAADjANBgkqhkiG9w0BAQUFADB1MQswCQYD
VQQGEwJVUzETMBEGA1UECBMKY2FsaWZvcm5pYTERMA8GA1UEBxMIc2FuIGpvc2Ux
DjAMBgNVBAoTBWNpc2NvMQwwCgYDVQQLEwNoc3MxIDAeBgNVBAMTF3NpbXBzb24t
ZGV2dGVzdC1yb290LUNBMB4XDTAzMTExMzIyMDQyMVoXDTA0MTExMzIyMTQyMVow
dTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCmNhbGlmb3JuaWExETAPBgNVBAcTCHNh
biBqb3NlMQ4wDAYDVQQKEwVjaXNjbzEMMAoGA1UECxMDaHNzMSAwHgYDVQQDExdz
aW1wc29uLWRldnRlc3Qtc3ViMS1jYTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDc
vV48nC2uukoSyGJ/GymCIEXZzMSzpbkYS7eWPaZYyiJDhCIKuUsMgFDRNfMQmUSA
rcWmPizFZc9PFumDa03vAgMBAAGjggJpMIICZTAQBgkrBgEEAYI3FQEEAwIBADAd
BgNVHQ4EFgQUWaaNN2U14BaBoU9mY+ncuHpP920wCwYDVR0PBAQDAgHGMA8GA1Ud
EwEB/wQFMAMBAf8wga4GA1UdIwSBpjCBo4AUJgYtQFMo130SBSiceehK9seDRrGh
eaR3MHUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpjYWxpZm9ybmlhMREwDwYDVQQH
EwhzYW4gam9zZTEOMAwGA1UEChMFY2lzY28xDDAKBgNVBAsTA2hzczEgMB4GA1UE
AxMXc2ltcHNvbi1kZXZ0ZXN0LXJvb3QtQ0GCEGnVMc1P4ve4Q5mUWCdWwXAwgZcG
A1UdHwSBjzCBjDBDoEGgP4Y9aHR0cDovL2Npc2NvLWw4ajZvaHBuci9DZXJ0RW5y
b2xsL3NpbXBzb24tZGV2dGVzdC1yb290LUNBLmNybDBFoEOgQYY/ZmlsZTovL1xc
Y2lzY28tbDhqNm9ocG5yXENlcnRFbnJvbGxcc2ltcHNvbi1kZXZ0ZXN0LXJvb3Qt
Q0EuY3JsMIHIBggrBgEFBQcBAQSBuzCBuDBZBggrBgEFBQcwAoZNaHR0cDovL2Np
c2NvLWw4ajZvaHBuci9DZXJ0RW5yb2xsL2Npc2NvLWw4ajZvaHBucl9zaW1wc29u
LWRldnRlc3Qtcm9vdC1DQS5jcnQwWwYIKwYBBQUHMAKGT2ZpbGU6Ly9cXGNpc2Nv
LWw4ajZvaHBuclxDZXJ0RW5yb2xsXGNpc2NvLWw4ajZvaHBucl9zaW1wc29uLWRl
dnRlc3Qtcm9vdC1DQS5jcnQwDQYJKoZIhvcNAQEFBQADQQA6kAV3Jx/BOr2hlSp9
ER36ZkDJNIW93gNt2MkpcA07RmcrHln6q5RJ9WbvTxFnONdgpsag1EcOwn97XErH
Z2ow
-----END CERTIFICATE-----

Certificate has the following attributes:
Fingerprint:50A986F6 B471B82D E11B71FE 436A9BE6 
Certificate validated - Signed by existing trustpoint CA certificate.
Trustpoint CA certificate accepted.
% Certificate successfully imported

d. Import the subordinate 2 certificate authority certificate:

webvpn(config)# crypto pki authenticate tp-proxy1

Enter the base 64 encoded CA certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIIESTCCA/OgAwIBAgIKHyiFxAAAAAAABjANBgkqhkiG9w0BAQUFADB1MQswCQYD
VQQGEwJVUzETMBEGA1UECBMKY2FsaWZvcm5pYTERMA8GA1UEBxMIc2FuIGpvc2Ux
DjAMBgNVBAoTBWNpc2NvMQwwCgYDVQQLEwNoc3MxIDAeBgNVBAMTF3NpbXBzb24t
ZGV2dGVzdC1zdWIxLWNhMB4XDTAzMTExMzIyMjI1MloXDTA0MTExMzIyMTQyMVow
dTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCmNhbGlmb3JuaWExETAPBgNVBAcTCHNh
biBqb3NlMQ4wDAYDVQQKEwVjaXNjbzEMMAoGA1UECxMDaHNzMSAwHgYDVQQDExdz
aW1wc29uLWRldnRlc3Qtc3ViMi1jYTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC7
ChZc0NYLBHf1sr/3Z4y6w5WoeioIpCOCSydhnbd5wnwuethoyStVt9lr6i61jWKl
d68Z8EoTg71daiV/WR/HAgMBAAGjggJjMIICXzAQBgkrBgEEAYI3FQEEAwIBADAd
BgNVHQ4EFgQU6FmJopqqzpbFMj6TaB2/wjlWlqEwCwYDVR0PBAQDAgHGMA8GA1Ud
EwEB/wQFMAMBAf8wgagGA1UdIwSBoDCBnYAUWaaNN2U14BaBoU9mY+ncuHpP922h
eaR3MHUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpjYWxpZm9ybmlhMREwDwYDVQQH
EwhzYW4gam9zZTEOMAwGA1UEChMFY2lzY28xDDAKBgNVBAsTA2hzczEgMB4GA1UE
AxMXc2ltcHNvbi1kZXZ0ZXN0LXJvb3QtQ0GCCho9HAcAAAAAAA4wgZcGA1UdHwSB
jzCBjDBDoEGgP4Y9aHR0cDovL2Npc2NvLWcyNXVhNm80ZS9DZXJ0RW5yb2xsL3Np
bXBzb24tZGV2dGVzdC1zdWIxLWNhLmNybDBFoEOgQYY/ZmlsZTovL1xcY2lzY28t
ZzI1dWE2bzRlXENlcnRFbnJvbGxcc2ltcHNvbi1kZXZ0ZXN0LXN1YjEtY2EuY3Js
MIHIBggrBgEFBQcBAQSBuzCBuDBZBggrBgEFBQcwAoZNaHR0cDovL2Npc2NvLWcy
NXVhNm80ZS9DZXJ0RW5yb2xsL2Npc2NvLWcyNXVhNm80ZV9zaW1wc29uLWRldnRl
c3Qtc3ViMS1jYS5jcnQwWwYIKwYBBQUHMAKGT2ZpbGU6Ly9cXGNpc2NvLWcyNXVh
Nm80ZVxDZXJ0RW5yb2xsXGNpc2NvLWcyNXVhNm80ZV9zaW1wc29uLWRldnRlc3Qt
c3ViMS1jYS5jcnQwDQYJKoZIhvcNAQEFBQADQQCieB8rvVCqVF2cFw9/v51jGn7L
Q6pUGT3bMRbOrgQKytTz/Yx09156nYZHrvVuLzmzz5CriI2saVx+q1Tarwil
-----END CERTIFICATE-----

Certificate has the following attributes:
Fingerprint:2F2E44AC 609644FA 5B4B6B26 FDBFE569 
Certificate validated - Signed by existing trustpoint CA certificate.
Trustpoint CA certificate accepted.
% Certificate successfully imported

e. Import the server certificate:

webvpn(config)# crypto pki import tp-proxy1 certificate 
% The fully-qualified domain name in the certificate will be:ssl-proxy.

Enter the base 64 encoded certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIIENTCCA9+gAwIBAgIKLmibDwAAAAAACDANBgkqhkiG9w0BAQUFADB1MQswCQYD
VQQGEwJVUzETMBEGA1UECBMKY2FsaWZvcm5pYTERMA8GA1UEBxMIc2FuIGpvc2Ux
DjAMBgNVBAoTBWNpc2NvMQwwCgYDVQQLEwNoc3MxIDAeBgNVBAMTF3NpbXBzb24t
ZGV2dGVzdC1zdWIyLWNhMB4XDTAzMTExOTIzNDUzNVoXDTA0MTExMzIyMTQyMVow
PTERMA8GA1UEBRMIQjBGRkYxNEQxGTAXBgkqhkiG9w0BCQITCnNzbC1wcm94eS4x
DTALBgNVBAMTBHRlc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMXHWiX0
hegDHh/JSFpcfqzinm32yghnWC8u1VfoWnrN+5fjuizlMYkf8hfNX0Hh7kq/7CUw
Af8EBAMCBaAwHQYDVR0OBBYEFCXlzcYHyo1PNbfubnivi8d2VO22MIGoBgNVHSME
gaAwgZ2AFOhZiaKaqs6WxTI+k2gdv8I5VpahoXmkdzB1MQswCQYDVQQGEwJVUzET
MBEGA1UECBMKY2FsaWZvcm5pYTERMA8GA1UEBxMIc2FuIGpvc2UxDjAMBgNVBAoT
BWNpc2NvMQwwCgYDVQQLEwNoc3MxIDAeBgNVBAMTF3NpbXBzb24tZGV2dGVzdC1z
dWIxLWNhggofKIXEAAAAAAAGMIGXBgNVHR8EgY8wgYwwQ6BBoD+GPWh0dHA6Ly9j
aXNjby1vam14Y25jenYvQ2VydEVucm9sbC9zaW1wc29uLWRldnRlc3Qtc3ViMi1j
YS5jcmwwRaBDoEGGP2ZpbGU6Ly9cXGNpc2NvLW9qbXhjbmN6dlxDZXJ0RW5yb2xs
XHNpbXBzb24tZGV2dGVzdC1zdWIyLWNhLmNybDCByAYIKwYBBQUHAQEEgbswgbgw
WQYIKwYBBQUHMAKGTWh0dHA6Ly9jaXNjby1vam14Y25jenYvQ2VydEVucm9sbC9j
aXNjby1vam14Y25jenZfc2ltcHNvbi1kZXZ0ZXN0LXN1YjItY2EuY3J0MFsGCCsG
AQUFBzAChk9maWxlOi8vXFxjaXNjby1vam14Y25jenZcQ2VydEVucm9sbFxjaXNj
by1vam14Y25jenZfc2ltcHNvbi1kZXZ0ZXN0LXN1YjItY2EuY3J0MA0GCSqGSIb3
DQEBBQUAA0EAtbxmUBOxZ/hcrCc3hY7pa6q/LmLonXSL8cjAbV2I7A5QGYaNi5k9
8FlEz1WOxW0J2C3/YsvIf4dYpsQWdKRJbQ==
-----END CERTIFICATE-----

% Router Certificate successfully imported

webvpn(config)#^Z

Importing and Exporting Key Pairs and Certificates

You can import and export key pairs and certificates using either the PKCS12 file format or privacy-enhanced mail (PEM) file format.

This section descrbies how to import or export key pairs and certificates:

Importing and Exporting a PKCS12 File

Importing and Exporting PEM Files


Note A test PKCS12 file (testssl.p12) is embedded in the WebVPN software on the WebVPN Services Module. You can install the file into Flash for testing purposes and for proof of concept. After the PKCS12 file is installed, you can import it to a trustpoint and then assign it to a WebVPN gateway configured for testing.



Note If the certificate revocation list (CRL) fails to download because the CRL server is unreachable or the CRL download path does not exist, the certificate might fail to import. You should make sure all trustpoints that are linked to the import process are able to download the CRL. If the CRL path does not exist, or if the CRL server is unreachable, then you should enter the revocation-check none command for all trustpoints that are linked to the import process. Enter the show crypto pki certificates command to display information for all certificates, and obtain a list of associated trustpoints from the display of the certificate authority certificate. Enter the revocation-check none command for all these trustpoints.

For example, in a three-tier certificate authority hierarchy (root CA, subordinate CA1, and subordinate CA2), when you import the subordinate CA1 certificate, enter the revocation-check none command for all the trustpoints associated with root CA. Similarly, when you import the subordinate CA2 certificate, enter the revocation-check none command for all the trustpoints associated with root CA and subordinate CA1.

After you successfully import the certificate, you can restore the original CRL options on the trustpoints.


Importing and Exporting a PKCS12 File

You can use an external PKI system to generate a PKCS12 file and then import this file to the WebVPN Services Module.


Note When creating a PKCS12 file, include the entire certificate chain, from the server certificate to the root certificate, and public and private keys. You can also generate a PKCS12 file from the WebVPN Services Module and export it.



Note If you are using SSH, we recommend using secure file transfer (SCP) when importing or exporting a PKCS12 file. SCP authenticates the host and encrypts the transfer session.


To import or export a PKCS12 file, perform this task:

Command
Purpose

webvpn(config)# crypto pki {import | export} trustpoint_label pkcs12 {scp:| ftp:| nvram:| rcp:| tftp:} [pkcs12_filename1 ] pass_phrase2

Imports or exports a PKCS12 file.

Note You do not need to configure a trustpoint before importing the PKCS12 file. Importing keys and certificates from a PKCS12 file creates the trustpoint automatically, if it does not already exist.

1 If you do not specify the pkcs12_filename value, you will be prompted to accept the default filename (the default filename is the trustpoint_label value) or enter the filename. For ftp: or tftp:, include the full path in the pkcs12_filename value.

2 You will receive an error if you enter the pass phrase incorrectly.


This example shows how to import a PKCS12 file using SCP:

webvpn(config)# crypto pki import TP2 pkcs12 scp: sky is blue
Address or name of remote host []? 10.1.1.1
Source username [ssl-proxy]? admin-1
Source filename [TP2]? /users/admin-1/pkcs12/TP2.p12

Password:password
Sending file modes:C0644 4379 TP2.p12
!
webvpn(config)#
*Aug 22 12:30:00.531:%CRYPTO-6-PKCS12IMPORT_SUCCESS:PKCS #12 Successfully Imported.
webvpn(config)#

This example shows how to export a PKCS12 file using SCP:

webvpn(config)# crypto pki export TP1 pkcs12 scp: sky is blue
Address or name of remote host []? 10.1.1.1
Destination username [ssl-proxy]? admin-1
Destination filename [TP1]? TP1.p12

Password:

Writing TP1.p12 Writing pkcs12 file to scp://admin-1@10.1.1.1/TP1.p12

Password:
!
CRYPTO_PKI:Exported PKCS12 file successfully.
webvpn(config)#

This example shows how to import a PKCS12 file using FTP:

webvpn(config)# crypto pki import TP2 pkcs12 ftp: sky is blue
Address or name of remote host []? 10.1.1.1
Source filename [TP2]? /admin-1/pkcs12/PK-1024
Loading /admin-1/pkcs12/PK-1024 !
[OK - 4339/4096 bytes]
webvpn(config)#

This example shows how to export a PKCS12 file using FTP:

webvpn(config)# crypto pki export TP1 pkcs12 ftp: sky is blue
Address or name of remote host []? 10.1.1.1
Destination filename [TP1]? /admin-1/pkcs12/PK-1024
Writing pkcs12 file to ftp://10.1.1.1//admin-1/pkcs12/PK-1024

Writing /admin-1/pkcs12/PK-1024 !!
CRYPTO_PKI:Exported PKCS12 file successfully.
webvpn(config)#

After you import the PKCS12 file, see the "Verifying Certificates and Trustpoints" section to verify the certificate and trustpoint information.

Importing and Exporting PEM Files


Note The crypto pki import pem command imports only the private key (.prv), the server certificate (.crt), and the issuer certificate authority certificate (.ca). If you have more than one level of certificate authority in the certificate chain, you need to import the root and subordinate certificate authority certificates before this command is issued for authentication. Use cut-and-paste or TFTP to import the root and subordinate certificate authority certificates.



Note Imported key pairs cannot be exported.



Note If you are using SSH, we recommend using SCP when importing or exporting PEM files. SCP authenticates the host and encrypts the transfer session.


To import or export PEM files, perform one of these tasks:

Command
Purpose

webvpn(config)# crypto pki import trustpoint_label pem [exportable] {terminal | url {scp:| ftp:| nvram:| rcp:| tftp:} | usage-keys} pass_phrase1 ,2

Imports PEM files.

Note You do not need to configure a trustpoint before importing the PEM files. Importing keys and certificates from PEM files creates the trustpoint automatically, if it does not already exist.

webvpn(config)# crypto pki export trustpoint_label pem {terminal | url {scp:| ftp:| nvram:| rcp:| tftp:} [des | 3des] pass_phrase 1, 2

Exports PEM files.

Note Only the key, the server certificate, and the issuer certificate authority of the server certificate are exported. All higher level certificate authorities need to be exported using cut-and-paste of TFTP.

1 You will receive an error if you enter the pass phrase incorrectly.

2 A pass phrase protects a PEM file that contains a private key. The PEM file is encrypted by DES or 3DES. The encryption key is derived from the pass phrase. A PEM file containing a certificate is not encrypted and is not protected by a pass phrase.


This example shows how to import PEM files using TFTP:


Note The TP5.ca, TP5.prv, and TP5.crt files should be present on the server.


webvpn(config)# crypto pki import TP5 pem url tftp://10.1.1.1/TP5 password
% Importing CA certificate...
Address or name of remote host [10.1.1.1]? 
Destination filename [TP5.ca]? 
Reading file from tftp://10.1.1.1/TP5.ca
Loading TP5.ca from 10.1.1.1 (via Ethernet0/0.168): !
[OK - 1976 bytes]

% Importing private key PEM file...
Address or name of remote host [10.1.1.1]? 
Destination filename [TP5.prv]? 
Reading file from tftp://10.1.1.1/TP5.prv
Loading TP5.prv from 10.1.1.1 (via Ethernet0/0.168): !
[OK - 963 bytes]

% Importing certificate PEM file...
Address or name of remote host [10.1.1.1]? 
Destination filename [TP5.crt]? 
Reading file from tftp://10.1.1.1/TP5.crt
Loading TP5.crt from 10.1.1.1 (via Ethernet0/0.168): !
[OK - 1692 bytes]
% PEM files import succeeded.
webvpn(config)#end
webvpn#
*Apr 11 15:11:29.901: %SYS-5-CONFIG_I: Configured from console by console

This example shows how to export PEM files using TFTP:

webvpn(config)# crypto pki export TP5 pem url tftp://10.1.1.1/tp99 3des password
% Exporting CA certificate...
Address or name of remote host [10.1.1.1]? 
Destination filename [tp99.ca]? 
% File 'tp99.ca' already exists.
% Do you really want to overwrite it? [yes/no]: yes
!Writing file to tftp://10.1.1.1/tp99.ca!
% Key name: key1
    Usage: General Purpose Key
% Exporting private key...
Address or name of remote host [10.1.1.1]? 
Destination filename [tp99.prv]? 
% File 'tp99.prv' already exists.
% Do you really want to overwrite it? [yes/no]: yes
!Writing file to tftp://10.1.1.1/tp99.prv!
% Exporting router certificate...
Address or name of remote host [10.1.1.1]? 
Destination filename [tp99.crt]? 
% File 'tp99.crt' already exists.
% Do you really want to overwrite it? [yes/no]: yes
!Writing file to tftp://10.1.1.1/tp99.crt!
webvpn(config)#

After you import the PEM files, see the "Verifying Certificates and Trustpoints" section to verify the certificate and trustpoint information.

Example of Importing PEM Files for Three Levels of Certificate Authority

In this section, the root certificate authority certificate (Tier 1) and intermediate certificate authority certificate (Tier 2) are obtained using the cut-and-paste option of the offline enrollment. The intermediate certificate authority certificate (Tier 3), private keys, and router certificate are obtained by importing PEM files.

1. Use cut-and-paste to obtain the root certificate authority-tier 1 certificate:

webvpn(config)# crypto pki trustpoint 3tier-root
webvpn(ca-trustpoint)# enrollment terminal
webvpn(ca-trustpoint)# revocation-check none
webvpn(ca-trustpoint)# exit
webvpn(config)# crypto pki authenticate 3tier-root

Enter the base 64 encoded CA certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIIC1zCCAoGgAwIBAgIQadUxzU/i97hDmZRYJ1bBcDANBgkqhkiG9w0BAQUFADB1
MQswCQYDVQQGEwJVUzETMBEGA1UECBMKY2FsaWZvcm5pYTERMA8GA1UEBxMIc2Fu
IGpvc2UxDjAMBgNVBAoTBWNpc2NvMQwwCgYDVQQLEwNoc3MxIDAeBgNVBAMTF3Np
bXBzb24tZGV2dGVzdC1yb290LUNBMB4XDTAzMTExMTIxNDgwMloXDTEzMTExMTIx
NTczOVowdTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCmNhbGlmb3JuaWExETAPBgNV
BAcTCHNhbiBqb3NlMQ4wDAYDVQQKEwVjaXNjbzEMMAoGA1UECxMDaHNzMSAwHgYD
VQQDExdzaW1wc29uLWRldnRlc3Qtcm9vdC1DQTBcMA0GCSqGSIb3DQEBAQUAA0sA
MEgCQQCWEibAnUlVqQNUn0Wb94qnHi8FKjmVhibLHGRl6J+V7gHgzmF2MTz5WP5l
VQ2/1NVu0HjUORRdeCm1/raKJ/7ZAgMBAAGjgewwgekwCwYDVR0PBAQDAgHGMA8G
A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCYGLUBTKNd9EgUonHnoSvbHg0axMIGX
BgNVHR8EgY8wgYwwQ6BBoD+GPWh0dHA6Ly9jaXNjby1sOGo2b2hwbnIvQ2VydEVu
cm9sbC9zaW1wc29uLWRldnRlc3Qtcm9vdC1DQS5jcmwwRaBDoEGGP2ZpbGU6Ly9c
XGNpc2NvLWw4ajZvaHBuclxDZXJ0RW5yb2xsXHNpbXBzb24tZGV2dGVzdC1yb290
LUNBLmNybDAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQUFAANBACBqe1wy
YjalelGZqLVu4bDVMFo6ELCV2AMBgi41K3ix+Z/03PJd7ct2BIAF4lktv9pCe6IO
EoBcmZteA+TQcKg=
-----END CERTIFICATE-----

Certificate has the following attributes:
Fingerprint:AC6FC55E CC29E891 0DC3FAAA B4747C10 
% Do you accept this certificate? [yes/no]:yes
Trustpoint CA certificate accepted.
% Certificate successfully imported

2. Use cut-and-paste to obtain the subordinate certificate authority 1 certificate:

webvpn(config)# crypto pki trustpoint 3tier-subca1
webvpn(ca-trustpoint)# enroll terminal
webvpn(ca-trustpoint)# revocation-check none
webvpn(ca-trustpoint)# exit
webvpn(config)# crypto pki authenticate 3tier-subca1

Enter the base 64 encoded CA certificate.
End with a blank line or the word "quit" on a line by itself

-----BEGIN CERTIFICATE-----
MIIETzCCA/mgAwIBAgIKGj0cBwAAAAAADjANBgkqhkiG9w0BAQUFADB1MQswCQYD
VQQGEwJVUzETMBEGA1UECBMKY2FsaWZvcm5pYTERMA8GA1UEBxMIc2FuIGpvc2Ux
DjAMBgNVBAoTBWNpc2NvMQwwCgYDVQQLEwNoc3MxIDAeBgNVBAMTF3NpbXBzb24t
ZGV2dGVzdC1yb290LUNBMB4XDTAzMTExMzIyMDQyMVoXDTA0MTExMzIyMTQyMVow
dTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCmNhbGlmb3JuaWExETAPBgNVBAcTCHNh
biBqb3NlMQ4wDAYDVQQKEwVjaXNjbzEMMAoGA1UECxMDaHNzMSAwHgYDVQQDExdz
aW1wc29uLWRldnRlc3Qtc3ViMS1jYTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQDc
vV48nC2uukoSyGJ/GymCIEXZzMSzpbkYS7eWPaZYyiJDhCIKuUsMgFDRNfMQmUSA
rcWmPizFZc9PFumDa03vAgMBAAGjggJpMIICZTAQBgkrBgEEAYI3FQEEAwIBADAd
BgNVHQ4EFgQUWaaNN2U14BaBoU9mY+ncuHpP920wCwYDVR0PBAQDAgHGMA8GA1Ud
EwEB/wQFMAMBAf8wga4GA1UdIwSBpjCBo4AUJgYtQFMo130SBSiceehK9seDRrGh
eaR3MHUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpjYWxpZm9ybmlhMREwDwYDVQQH
EwhzYW4gam9zZTEOMAwGA1UEChMFY2lzY28xDDAKBgNVBAsTA2hzczEgMB4GA1UE
AxMXc2ltcHNvbi1kZXZ0ZXN0LXJvb3QtQ0GCEGnVMc1P4ve4Q5mUWCdWwXAwgZcG
A1UdHwSBjzCBjDBDoEGgP4Y9aHR0cDovL2Npc2NvLWw4ajZvaHBuci9DZXJ0RW5y
b2xsL3NpbXBzb24tZGV2dGVzdC1yb290LUNBLmNybDBFoEOgQYY/ZmlsZTovL1xc
Y2lzY28tbDhqNm9ocG5yXENlcnRFbnJvbGxcc2ltcHNvbi1kZXZ0ZXN0LXJvb3Qt
Q0EuY3JsMIHIBggrBgEFBQcBAQSBuzCBuDBZBggrBgEFBQcwAoZNaHR0cDovL2Np
c2NvLWw4ajZvaHBuci9DZXJ0RW5yb2xsL2Npc2NvLWw4ajZvaHBucl9zaW1wc29u
LWRldnRlc3Qtcm9vdC1DQS5jcnQwWwYIKwYBBQUHMAKGT2ZpbGU6Ly9cXGNpc2Nv
LWw4ajZvaHBuclxDZXJ0RW5yb2xsXGNpc2NvLWw4ajZvaHBucl9zaW1wc29uLWRl
dnRlc3Qtcm9vdC1DQS5jcnQwDQYJKoZIhvcNAQEFBQADQQA6kAV3Jx/BOr2hlSp9
ER36ZkDJNIW93gNt2MkpcA07RmcrHln6q5RJ9WbvTxFnONdgpsag1EcOwn97XErH
Z2ow
-----END CERTIFICATE-----

Certificate has the following attributes:
Fingerprint:50A986F6 B471B82D E11B71FE 436A9BE6 
Certificate validated - Signed by existing trustpoint CA certificate.
Trustpoint CA certificate accepted.
% Certificate successfully imported

3. Import the subordinate certificate authority 2 certificate, the RSA key pair, and router certificate. The router certificate should be signed by the subordinate certificate authority 2.

webvpn(config)# crypto pki import tp-proxy1 pem terminal cisco
% Enter PEM-formatted CA certificate.
% End with a blank line or "quit" on a line by itself.
-----BEGIN CERTIFICATE-----
MIIESTCCA/OgAwIBAgIKHyiFxAAAAAAABjANBgkqhkiG9w0BAQUFADB1MQswCQYD
VQQGEwJVUzETMBEGA1UECBMKY2FsaWZvcm5pYTERMA8GA1UEBxMIc2FuIGpvc2Ux
DjAMBgNVBAoTBWNpc2NvMQwwCgYDVQQLEwNoc3MxIDAeBgNVBAMTF3NpbXBzb24t
ZGV2dGVzdC1zdWIxLWNhMB4XDTAzMTExMzIyMjI1MloXDTA0MTExMzIyMTQyMVow
dTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCmNhbGlmb3JuaWExETAPBgNVBAcTCHNh
biBqb3NlMQ4wDAYDVQQKEwVjaXNjbzEMMAoGA1UECxMDaHNzMSAwHgYDVQQDExdz
aW1wc29uLWRldnRlc3Qtc3ViMi1jYTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC7
ChZc0NYLBHf1sr/3Z4y6w5WoeioIpCOCSydhnbd5wnwuethoyStVt9lr6i61jWKl
d68Z8EoTg71daiV/WR/HAgMBAAGjggJjMIICXzAQBgkrBgEEAYI3FQEEAwIBADAd
BgNVHQ4EFgQU6FmJopqqzpbFMj6TaB2/wjlWlqEwCwYDVR0PBAQDAgHGMA8GA1Ud
EwEB/wQFMAMBAf8wgagGA1UdIwSBoDCBnYAUWaaNN2U14BaBoU9mY+ncuHpP922h
eaR3MHUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpjYWxpZm9ybmlhMREwDwYDVQQH
EwhzYW4gam9zZTEOMAwGA1UEChMFY2lzY28xDDAKBgNVBAsTA2hzczEgMB4GA1UE
AxMXc2ltcHNvbi1kZXZ0ZXN0LXJvb3QtQ0GCCho9HAcAAAAAAA4wgZcGA1UdHwSB
jzCBjDBDoEGgP4Y9aHR0cDovL2Npc2NvLWcyNXVhNm80ZS9DZXJ0RW5yb2xsL3Np
bXBzb24tZGV2dGVzdC1zdWIxLWNhLmNybDBFoEOgQYY/ZmlsZTovL1xcY2lzY28t
ZzI1dWE2bzRlXENlcnRFbnJvbGxcc2ltcHNvbi1kZXZ0ZXN0LXN1YjEtY2EuY3Js
MIHIBggrBgEFBQcBAQSBuzCBuDBZBggrBgEFBQcwAoZNaHR0cDovL2Npc2NvLWcy
NXVhNm80ZS9DZXJ0RW5yb2xsL2Npc2NvLWcyNXVhNm80ZV9zaW1wc29uLWRldnRl
c3Qtc3ViMS1jYS5jcnQwWwYIKwYBBQUHMAKGT2ZpbGU6Ly9cXGNpc2NvLWcyNXVh
Nm80ZVxDZXJ0RW5yb2xsXGNpc2NvLWcyNXVhNm80ZV9zaW1wc29uLWRldnRlc3Qt
c3ViMS1jYS5jcnQwDQYJKoZIhvcNAQEFBQADQQCieB8rvVCqVF2cFw9/v51jGn7L
Q6pUGT3bMRbOrgQKytTz/Yx09156nYZHrvVuLzmzz5CriI2saVx+q1Tarwil
-----END CERTIFICATE-----

% Enter PEM-formatted encrypted private key.
% End with "quit" on a line by itself.
-----BEGIN RSA PRIVATE KEY-----
Proc-Type:4,ENCRYPTED
DEK-Info:DES-EDE3-CBC,F0D3269840071CF8

gQb9JMplIE5AEdhumLuBFWT53k+L/EGLhFfQn/roPlEOiIGEB6y3DeYNN/xZSiy3
JOHN0kh8Wjw3pshrdNVcoQj2X7BPI+YOipok40WOk5J/+dnRLwMjv+rl0tr+LcCk
nBdR8zIOkOJObULLUOXFBM7oB3Dsk4Y3FBv8EAR3AdQiZjevau4FIyQn+JfVZy+J
wctmvZnX0c0fevPsgID4dCPkeY6+I0DkxMyRiuyn+wIrJw1xVA2VIOrRJojBNlRu
6/APef8JwpfnNcgpcLYt/4Q+3Yjl9EfRLjgiL6eSRki/6K5lrV3eKbwOTyjvXq5h
G0Q6dtNEoIvOg1Vad0CXeL+TxJ4ySq4E63OxIHkclDBsusGoUGLoZ+OtaxApAZ+5
WbKqR+ND1LlPmS8/ZL9LMPhUh9eOqZJjJTe6NbxY7jeNHjAmpP7/WpB2f2kV/LZg
n2AV4GALBZtqXtreGiayZzXpEA5J00lbzRZWf9JHA1diz/unW00/GH9LvCqA9O15
YJGCrRMI9US7MWm8kIkiJqNgLtbPad5cOaieQe+Kncgcm18Hc7pfhDwXGG4RS40x
TSV/kIR4Gi7h8Lu71wZKTaWYHBPTUyTIpNsFUEdvItHXOSBw2LWNWzdYgpGoMT/t
ryuu0lAC9YdBalAxY0DaqqpuXKzxfiw5QDbqZWVq3qAxXfLAtTgu/gFCuFQvbBGl
87H1C+nOQUq2nkpMpHZLsl3V0w/2yqg+q6rUydANFF+a5vRaLgX/PGms92ZkZUdP
Z5qeKJmoURSlMYxDuhQDl93RYxXJxOYIYrCrI/QaBpIH6QvUH60wWA==
-----END RSA PRIVATE KEY-----
quit
% Enter PEM-formatted certificate.
% End with a blank line or "quit" on a line by itself.
-----BEGIN CERTIFICATE-----
MIIEXTCCBAegAwIBAgIKTJOcWgAAAAAACTANBgkqhkiG9w0BAQUFADB1MQswCQYD
VQQGEwJVUzETMBEGA1UECBMKY2FsaWZvcm5pYTERMA8GA1UEBxMIc2FuIGpvc2Ux
DjAMBgNVBAoTBWNpc2NvMQwwCgYDVQQLEwNoc3MxIDAeBgNVBAMTF3NpbXBzb24t
ZGV2dGVzdC1zdWIyLWNhMB4XDTAzMTEyNTIwMjExMFoXDTA0MTExMzIyMTQyMVow
PjERMA8GA1UEBRMIQjBGRkYyMkUxKTAnBgkqhkiG9w0BCQITGnNpbXBzb24tNjUw
OS1zdGUuY2lzY28uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCkhRKm
38hSF7l0WXlYm8ixs2Hz/yjNw7tchtRPIp0qCTJKW00gzZpp8dqaNi3s2GVVWb+t
Cgsol0MZLIkyoj/9vT9MC7Zo3LOxYy9kD+6M9peUWMT4JLSD4Exzxsd87JpP1bo0
o8WhYjvMor/bL30sW8ly2RH2vppEMn9eLEN0vwIDAQABo4ICajCCAmYwCwYDVR0P
BAQDAgWgMB0GA1UdDgQWBBSx6uQ2sARlcjzhBSiMu7xeu1n6AjCBqAYDVR0jBIGg
MIGdgBToWYmimqrOlsUyPpNoHb/COVaWoaF5pHcwdTELMAkGA1UEBhMCVVMxEzAR
BgNVBAgTCmNhbGlmb3JuaWExETAPBgNVBAcTCHNhbiBqb3NlMQ4wDAYDVQQKEwVj
aXNjbzEMMAoGA1UECxMDaHNzMSAwHgYDVQQDExdzaW1wc29uLWRldnRlc3Qtc3Vi
MS1jYYIKHyiFxAAAAAAABjAoBgNVHREBAf8EHjAcghpzaW1wc29uLTY1MDktc3Rl
LmNpc2NvLmNvbTCBlwYDVR0fBIGPMIGMMEOgQaA/hj1odHRwOi8vY2lzY28tb2pt
eGNuY3p2L0NlcnRFbnJvbGwvc2ltcHNvbi1kZXZ0ZXN0LXN1YjItY2EuY3JsMEWg
Q6BBhj9maWxlOi8vXFxjaXNjby1vam14Y25jenZcQ2VydEVucm9sbFxzaW1wc29u
LWRldnRlc3Qtc3ViMi1jYS5jcmwwgcgGCCsGAQUFBwEBBIG7MIG4MFkGCCsGAQUF
BzAChk1odHRwOi8vY2lzY28tb2pteGNuY3p2L0NlcnRFbnJvbGwvY2lzY28tb2pt
eGNuY3p2X3NpbXBzb24tZGV2dGVzdC1zdWIyLWNhLmNydDBbBggrBgEFBQcwAoZP
ZmlsZTovL1xcY2lzY28tb2pteGNuY3p2XENlcnRFbnJvbGxcY2lzY28tb2pteGNu
Y3p2X3NpbXBzb24tZGV2dGVzdC1zdWIyLWNhLmNydDANBgkqhkiG9w0BAQUFAANB
ABFh7XeLwvfBtjAR+e5OaUH5KTGJDbeJppOmMFXnFakpgWop9Qg4cHRCQq7V0pAW
iA6VtJOmpYgEIVNTAzAAHR4=
-----END CERTIFICATE-----

% PEM files import succeeded.
webvpn(config)# ^Z
webvpn#
*Dec  4 18:11:49.850:%SYS-5-CONFIG_I:Configured from console by console
webvpn# 

4. Display the certificate information (optional):

webvpn# show crypto pki certificates tp-proxy1
Certificate
  Status:Available
  Certificate Serial Number:04A0147B00000000010E
  Certificate Usage:General Purpose
  Issuer:
    CN = sub3ca
     C = US
Subject:
    Name:ssl-proxy.
    Serial Number:B0FFF0C2
    OID.1.2.840.113549.1.9.2 = ssl-proxy.
     OID.2.5.4.5 = B0FFF0C2
  CRL Distribution Point:
    http://sample.cisco.com/sub3ca.crl
  Validity Date:
    start date:18:04:09 UTC Jan 23 2003
    end   date:21:05:17 UTC Dec 12 2003
    renew date:00:00:00 UTC Apr 1 2003
  Associated Trustpoints:tp-proxy1 

CA Certificate
  Status:Available
  Certificate Serial Number:6D1E6B0F000000000007
  Certificate Usage:Signature
  Issuer:
    CN = subtest
     C = US
Subject:
    CN = sub3ca
     C = US
CRL Distribution Point:
    http://sample.cisco.com/subtest.crl
  Validity Date:
    start date:22:22:52 UTC Mar 28 2003
    end   date:21:05:17 UTC Dec 12 2003
  Associated Trustpoints:tp-proxy1 

webvpn# show crypto pki certificates 3tier-subca1
CA Certificate
  Status:Available
  Certificate Serial Number:29A47DEF0000000004E9
  Certificate Usage:Signature
  Issuer:
    CN = 6ebf9b3e-9a6d-4400-893c-dd85dcfe911b
     C = US
Subject:
    CN = subtest
     C = US
CRL Distribution Point:
    http://sample.cisco.com/6ebf9b3e-9a6d-4400-893c-dd85dcfe911b.crl
  Validity Date:
    start date:20:55:17 UTC Dec 12 2002
    end   date:21:05:17 UTC Dec 12 2003
  Associated Trustpoints:3tier-sub1 

webvpn# show crypto pki certificates 3tier-root
CA Certificate
  Status:Available
  Certificate Serial Number:7FD5B209B5C2448C47F77F140625D265
  Certificate Usage:Signature
  Issuer:
    CN = 6ebf9b3e-9a6d-4400-893c-dd85dcfe911b
     C = US
Subject:
    CN = 6ebf9b3e-9a6d-4400-893c-dd85dcfe911b
     C = US
CRL Distribution Point:
    http://sample.cisco.com/6ebf9b3e-9a6d-4400-893c-dd85dcfe911b.crl
  Validity Date:
    start date:00:05:32 UTC Jun 13 2002
    end   date:00:11:58 UTC Jun 13 2004
  Associated Trustpoints:3tier-root 

Verifying Certificates and Trustpoints

To verify information about your certificates and trustpoints, perform this task in EXEC mode:

 
Command
Purpose

Step 1 

webvpn(ca-trustpoint)# show crypto pki 
certificates [trustpoint_label]

Displays information about the certificates associated with the specified trustpoint, or all of your certificates, the certificates of the certificate authority, and registration authority certificates.

Step 2 

webvpn(ca-trustpoint)# show crypto pki 
trustpoints [trustpoint_label]

Displays information about all trustpoints or the specified trustpoint.

Sharing Keys and Certificates

The WebVPN Services Module supports the sharing of the same key pair by multiple certificates. However, this is not a good practice because if one key pair is compromised, all the certificates must be revoked and replaced.

Because WebVPN gateways are added and removed at different times, the certificates also expire at different times. Some certificate authorities require you to refresh the key pair at the time of renewal. If certificates share one key pair, you need to renew the certificates at the same time. In general, it is easier to manage certificates if each certificate has its own key pair.

The WebVPN Services Module does not impose any restrictions on sharing certificates among multiple WebVPN gateways and multiple WebVPN Services Modules. The same trustpoint can be assigned to multiple WebVPN gateways.

From a business point of view, the certificate authority may impose restrictions (for example, on the number of servers in a server farm that can use the same certificate). There may be contractual or licensing agreements regarding certificate sharing. Consult with the certificate authority or the legal staff regarding business contractual aspects.

In practice, some web browsers compare the subject name of the server certificate with the hostname or the IP address that appears on the URL. If the subject name does not match the hostname or IP address, a dialog box appears, prompting the user to verify and accept the certificate. To avoid this step, limit the sharing of certificates based on the hostname or IP address.

Saving Your Configuration


Caution RSA key pairs are saved only to NVRAM. RSA keys are not saved with your configuration when you specify any other file system with the copy system:running-config file_system: command.

Always remember to save your work when you make configuration changes.

To save your configuration to NVRAM, perform this task:

Command
Purpose
webvpn# copy [/erase] 
system:running-config 
nvram:startup-config

Saves the configuration, key pairs, and certificate to NVRAM. The key pairs are stored in the private configuration file, and each certificate is stored as a binary file in NVRAM. On bootup, the module will not need to query the certificate authority to obtain the certificates or to auto-enroll.

Note For security reasons, we recommend that you enter the /erase option to erase the public and the private configuration files before updating the NVRAM. If you do not enter the /erase option, the key pairs from the old private configuration file may remain in the NVRAM.


Caution When you enter the /erase option, both the current and the backup buffers in NVRAM are erased before the running configuration is saved into NVRAM. If a power failure or reboot occurs after the buffers are erased, but before the running configuration is saved, both configurations might be lost.


Note If you have a large number of files in NVRAM, this task may take up to 2 minutes to finish.


The automatic backup of the configuration to NVRAM feature automatically backs up the last saved configuration. If the current write process fails, the configuration is restored to the previous configuration automatically.

Verifying the Saved Configuration

To verify the saved configuration, perform this task:

 
Command
Purpose

Step 1 

webvpn# show startup-config

Displays the startup configuration.

Step 2 

webvpn# directory nvram:

Displays the names and sizes of the files in NVRAM.

Erasing the Saved Configuration

To erase a saved configuration, perform one of these tasks:

Command
Purpose
webvpn# erase nvram:

Erases the startup configuration and the key pairs.

webvpn# erase /all nvram:

Erases the startup configuration, the key pairs, the certificates, and all other files from the NVRAM.



Note If you have a large number of files in NVRAM, this task may take up to 2 minutes to finish.



Caution If you erase the saved configuration, the automatic backup configuration in NVRAM is also erased.

Backing Up Keys and Certificates

If an event occurs that interrupts the process of saving the keys and certificates to NVRAM (for example, a power failure), you could lose the keys and certificates that are being saved. You can obtain public keys and certificates from the certificate authority. However, you cannot recover private keys.

If a secure server is available, back up key pairs and the associated certificate chain by exporting each trustpoint to a PKCS12 file. You can then import the PKCS12 files to recover the keys and certificates.

Security Guidelines

When backing up keys and certificates, observe the following guidelines:

For each PKCS12, you must select a pass phrase that cannot be easily guessed and keep the pass phrase well protected. Do not store the PKCS12 file in clear form.

The backup server must be secure. Allow only authorized personnel to access the backup server.

When importing or exporting the PKCS12 file (in which you are required to enter a pass phrase), connect directly to the module console or use an SSH session.

Use SCP for file transfer.

Monitoring and Maintaining Keys and Certificates

This section describes the following optional tasks:

Deleting RSA Keys from the WebVPN Services Module

Viewing Keys and Certificates

Deleting Certificates from the Configuration

Deleting RSA Keys from the WebVPN Services Module


Caution Deleting the SSH key will disable SSH on the WebVPN Services Module. If you delete the SSH key, generate a new key. See the "Configuring Authentication for Administrators" section on page 2-5.

Under certain circumstances you might want to delete the RSA keys from a module. For example, if you believe the RSA keys were compromised in some way and should no longer be used, you should delete the keys.

To delete all RSA keys from the module, perform this task in global configuration mode:

Command
Purpose
webvpn(config)# crypto key zeroize rsa 
[key-label]

Deletes all RSA key pairs or the specified key pair.


Caution If a key is deleted, all certificates that are associated with the key are deleted.

After you delete the RSA keys from a module, complete these two additional tasks:

Ask the certificate authority administrator to revoke the certificates for your module at the certificate authority; you must supply the challenge password that you created for that module with the crypto pki enroll command when you originally obtained the certificates.

Manually remove the trustpoint from the configuration as described in the "Deleting Certificates from the Configuration" section.

Viewing Keys and Certificates

To view keys and certificates, perform one of these tasks:

Command
Purpose
webvpn# show crypto key mypubkey rsa

Displays RSA public keys for the module.

webvpn# show crypto pki certificates 
[trustpoint_label]

Displays information about the certificate, the certificate authority certificate, and any registration authority certificates.

webvpn# show running-config [brief]

Displays the public keys and the certificate chains. If the brief option is specified, the hex dump of each certificate is not displayed.


Deleting Certificates from the Configuration

The WebVPN Services Module saves its own certificates and the certificate of the certificate authority. You can delete certificates that are saved on the module.

To delete the certificate from the module configuration, perform this task in global configuration mode:

Command
Purpose
webvpn(config)# no crypto pki 
trustpoint trustpoint-label

Deletes the certificate.


Assigning a Certificate to a WebVPN Gateway and Context

When you enter the ssl trustpoint trustpoint_label subcommand (under the webvpn gateway gateway_name command), you assign a certificate to the specified WebVPN gateway. You can enter the ssl trustpoint subcommand multiple times for the gateway.

If the trustpoint label is modified, the gateway is momentarily taken out of service during the transition. Existing connections continue to use the old certificate until the connections are closed or cleared. New connections use the certificate from the new trustpoint, and the service is available again.

However, if the new trustpoint does not have a certificate yet, the operational status of the service remains down. New connections are not established until the new certificate is available. If the certificate is deleted by entering the no ssl trustpoint subcommand, the existing connections continue to use the certificate until the connections are closed or cleared. Although the certificate is obsolete, it is not removed from the WebVPN gateway until all connections are closed or cleared.


Note You can assign a generated self-signed certificate to a WebVPN gateway, but you cannot assign an imported self-signed certificate to a WebVPN gateway, because you cannot import the key pair of the certificate authority that signed the imported certificate.


This example shows how to assign a trustpoint to a gateway:

webvpn# configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
webvpn(config)# webvpn gateway gw1
webvpn(config-webvpn-gateway)# ip address 10.1.1.2 
webvpn(config-webvpn-gateway)# ssl trustpoint tp-1
webvpn(config-webvpn-gateway)# end
webvpn#
webvpn# show webvpn gateway gw1
Admin Status: up
Operation Status: up
IP: 10.1.1.2, port: 443
TCP Policy not configured
SSL Policy not configured
SSL Trustpoint: tp-1
  Certificate chain for new connections:
    Certificate:
       Key Label: tp-1, 1024-bit, not exportable
       Key Timestamp: 12:09:27 UTC Dec 25 2004
       Serial Number: 0FE5
    Root CA Certificate:
       Serial Number: 01
  rsa-general-purpose certificate
  Certificate chain complete

webvpn#

This example shows how to change a trustpoint for a WebVPN gateway:


Note The existing connections continue to use the old certificate until the connections are closed. The operational status of the service changes from up to down, and then up again. New connections use the new certificate.


webvpn# configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
webvpn(config)# webvpn gateway gw1
webvpn(config-webvpn-gateway)# ssl trustpoint tp-2
webvpn(config-webvpn-gateway)# end
webvpn#
webvpn# show webvpn gateway gw1
Admin Status: up
Operation Status: up
IP: 10.1.1.2, port: 443
TCP Policy not configured
SSL Policy not configured
SSL Trustpoint: tp-2
  Certificate chain for new connections:
    Certificate:
       Key Label: tp-2, 1024-bit, not exportable
       Key Timestamp: 12:09:27 UTC Dec 25 2004
       Serial Number: 0FE5
    Root CA Certificate:
       Serial Number: 01
  rsa-general-purpose certificate
  Certificate chain complete
webvpn#

Renewing a Certificate

Some certificate authorities require you to generate a new key pair to renew a certificate, while other certificate authorities allow you to use the key pair of the expiring certificate to renew a certificate. Both cases are supported on the WebVPN Services Module.

The SSL server certificates usually expire in one or two years. Graceful rollover of certificates avoids sudden loss of services.

This example shows that gateway gw2 is assigned trustpoint t2:

webvpn# configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
webvpn(config)# webvpn gateway gw2
webvpn(config-gateway)# ssl trustpoint t2
webvpn(config-gateway)# end
webvpn#

webvpn# show webvpn gateway gw2
Admin Status: up
Operation Status: up
IP: 2.100.100.202, port: 443
TCP Policy not configured
SSL Policy not configured
SSL Trustpoint: t2
  Certificate chain for new connections:
    Certificate:
       Key Label: k2, 1024-bit, not exportable
       Key Timestamp: 18:38:53 UTC Jan 24 2005
       Serial Number: 67A6
    Root CA Certificate:
       Serial Number: 01
  rsa-general-purpose certificate
  Certificate chain complete

This example shows that the key pair for trustpoint t2 is refreshed, and the old certificate is deleted from the Cisco IOS database. Graceful rollover starts automatically for gateway gw2.

webvpn# configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
webvpn(config)# crypto key generate rsa general-keys label k2 exportable
% You already have RSA keys defined named k2.
% Do you really want to replace them? [yes/no]:yes
Choose the size of the key modulus in the range of 360 to 2048 for your
  General Purpose Keys. Choosing a key modulus greater than 512 may take
  a few minutes.

How many bits in the modulus [512]:1024
% Generating 1024 bit RSA keys ...[OK]
*May  7 17:47:10.718: %WEBVPN-6-PKI_CERT_ROLLOVER_BEGIN: The process of rolling over the 
certificate without the sudden loss of services has begun for the proxy service: gw2, 
trustpoint: t2
webvpn(config)#end
webvpn# show show webvpn gateway gw2
Admin Status:up
Operation Status:up
IP: 2.100.100.202, port: 443
TCP Policy not configured
SSL Policy not configured
SSL Trustpoint: t2 
  Certificate chain in graceful rollover, being renewed:
    Certificate:
       Key Label:k2 1024-bit, exportable
       Key Timestamp: 17:47:10 UTC May 7 2005
       Serial Number:47AF
    Root CA Certificate:
      Serial Number:01
  rsa-general-purpose certificate
  Server certificate in graceful rollover

This example shows that existing and new connections use the old certificate until trustpoint t2 reenrolls. After trustpoint t2 reenrolls, new connections use the new certificate; existing connections continue to use the old certificate until the connections are closed.

webvpn# configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
webvpn(config)# crypto pki enroll t2
%
% Start certificate enrollment ..
% Create a challenge password. You will need to verbally provide this
   password to the CA Administrator in order to revoke your certificate.
   For security reasons your password will not be saved in the configuration.
   Please make a note of it.

Password:
Re-enter password:

% The subject name in the certificate will be: CN=2.100.100.202 
% The fully-qualified domain name will not be included in the certificate Request 
certificate from CA? [yes/no]: y 
% Certificate request sent to Certificate Authority 
% The certificate request fingerprint will be displayed.
% The 'show crypto pki certificate' command will also show the fingerprint.

CRYPTO_PKI:    Fingerprint:  36DC4511 CE0353DB A7194317 E2D10481

May  7 18:34:22.967: %PKI-6-CERTRET: Certificate received from Certificate Authority 
May  7 18:34:24.195: %WEBVPN-6-PKI_SERVICE_CERT_INSTALL: Proxy: gw2, Trustpoint: t2, Key: 
k2, Serial#: 47AF, Index: 4 
May  7 18:34:24.203: %WEBVPN-6-PKI_CERT_ROLLOVER_END: The process of rolling over the 
certificate without the sudden loss of services has ended for the proxy service: gw2, 
trustpoint: t2 
webvpn(config)# end

webvpn# show show webvpn gateway gw2
Admin Status: up
Operation Status: up
IP: 2.100.100.202, port: 443
TCP Policy not configured
SSL Policy not configured
SSL Trustpoint: t2
  Obsolete certificate chain for old connections:
    Certificate:
       Key Label: k2, 1024-bit, not exportable
       Key Timestamp: 18:38:53 UTC Jan 24 2005
       Serial Number: 67A6
    Root CA Certificate:
       Serial Number: 01
  Certificate chain for new connections:
    Certificate:
       Key Label: k2, 1024-bit, exportable
       Key Timestamp: 17:47:10 UTC May 7 2005
       Serial Number: 47AF
    Root CA Certificate:
       Serial Number: 01
  rsa-general-purpose certificate
  Certificate chain complete

May 7 18:34:44.191: %WEBVPN-6-PKI_SERVICE_CERT_DELETE: Proxy: gw2, Trustpoint: t2, Key: 
k2, Serial#: 67A6, Index: 0 

This example shows that the obsolete certificate is removed after all of the existing connections are closed.

webvpn# show show webvpn gateway gw2
IP: 2.100.100.202, port: 443
TCP Policy not configured
SSL Policy not configured
SSL Trustpoint: t2
  Certificate chain for new connections:
    Certificate:
       Key Label: k2, 1024-bit, exportable
       Key Timestamp: 17:47:10 UTC May 7 2005
       Serial Number: 47AF
    Root CA Certificate:
       Serial Number: 01
  rsa-general-purpose certificate
  Certificate chain complete

Automatic Certificate Renewal and Enrollment

When you configure automatic enrollment, the WebVPN Services Module automatically requests a certificate from the certificate authority that is using the parameters in the configuration.

You can configure the certificate to automatically renew after a specified percentage of the validity time has passed. For example, if the certificate is valid for 300 days, and you specify renewal_percent as 80, the certificate automatically renews after 240 days have passed since the start validity time of the certificate.


Note The certificate authority certificate needs to be in the database prior to auto enrollment or renewal. Authenticate the trustpoint prior to configuring automatic enrollment. Also, configure a SCEP enrollment URL for the trustpoint.


To enable automatic enrollment and renewal and to display timer information, perform this task:

 
Command
Purpose

Step 1 

webvpn(config)# crypto pki trustpoint 
trustpoint-label

Declares the trustpoint.

Step 2 

webvpn(ca-trustpoint)# auto-enroll 
{renewal_percent|regenerate}

Enables automatic renewal and enrollment for the specified trustpoint.

Note Valid values for renewal_percent are 0 (enroll within 1 minute) through 100.

Note The regenerate keyword generates a new key for the certificate even if a named key already exists.

Step 3 

webvpn# show crypto pki timers 

Displays the time remaining before each timer expires.

This example shows how to enable auto enrollment and auto renewal:

webvpn# configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
webvpn(config)# crypto pki trustpoint tk21
webvpn(ca-trustpoint)# auto-enroll 90
webvpn(ca-trustpoint)# end
webvpn# show crypto pki timers
PKI Timers
|          44.306  
 |          44.306  RENEW tp-new
 |255d 5:28:32.348  RENEW tk21
webvpn#