Best Practices
Best Practices
Abstract
This paper provides information about code signing for the Windows® family of
operating systems. It provides guidelines for:
Chief technology officers (CTOs) or chief security officers (CSOs) who
deploy the code-signing infrastructure.
Test lab managers, IT professionals, and developers who manage the
process of test signing and verifying applications.
Build engineers who sign and verify applications for use with Windows.
This information applies for the following operating systems:
Windows Vista®
Windows Server® 2003
Microsoft Windows XP
Future versions of this preview information will be provided in the Windows Driver
Kit.
The current version of this paper is maintained on the Web at:
http://www.microsoft.com/whdc/winlogo/drvsign/best_practices.mspx
References and resources discussed here are listed at the end of this paper.
Contents
Introduction.............................................................................................................................. 4
What's New in Windows Vista.............................................................................................4
Who Should Read this Paper..............................................................................................4
Code-Signing Basics................................................................................................................5
Uses of Code Signing.........................................................................................................5
Digital Signatures................................................................................................................5
Digital Certificates...............................................................................................................7
Identity and Policy...............................................................................................................8
Roles within the Code-Signing Ecosystem.........................................................................8
Certification Authorities..................................................................................................8
Software Publisher.........................................................................................................9
Software Distributor......................................................................................................10
Software Consumer......................................................................................................10
Test Signing versus Release Signing...............................................................................10
Signing Technologies in Windows.........................................................................................11
Authenticode..................................................................................................................... 11
Embedded Signatures..................................................................................................12
Signed Catalog Files....................................................................................................12
The Windows Catalog Database..................................................................................13
Timestamps.................................................................................................................. 13
Strong Name Signatures...................................................................................................13
Strong Name Best Practices.............................................................................................14
Code-Signing Tools...........................................................................................................15
MakeCat....................................................................................................................... 15
Certification Creation Tool (MakeCert).........................................................................15
Sign Tool (SignTool).....................................................................................................16
Certificate Manager Tool (CertMgr)..............................................................................16
PVK2PFX..................................................................................................................... 16
Code Signing Best Practices - 2
Inf2Cat............................................................................................................................... 16
Signability..................................................................................................................... 17
Strong Name Tool (Sn.exe)..........................................................................................17
Digital Signatures in Windows...............................................................................................17
Existing Uses of Digital Signatures on Windows...............................................................17
Enhanced Use of Digital Signatures in Internet Explorer Windows on Windows Vista.....18
The Internet Explorer Download Experience................................................................18
ActiveX Controls...........................................................................................................19
New Uses of Digital Signatures in Windows Vista............................................................20
User Account Control...................................................................................................20
Kernel-Mode Driver Signature Enforcement................................................................21
Third-Party Signing for Plug and Play Driver Installation.............................................22
Protected Media Path (PMP)........................................................................................24
Windows Defender.......................................................................................................25
Code Signing during Software Development.........................................................................25
What Test Signing Is.........................................................................................................26
Test Signing by Individual Developers..............................................................................26
Self-Signed Test Certificates........................................................................................27
Test Certificates Issued by a Certification Authority.....................................................27
Integrating Test Signing into the Build Environment.........................................................28
Configuring a Test Computer or Environment...................................................................29
Trusted Root Certification Authorities...........................................................................29
Trusted Publisher.........................................................................................................30
Test Computers versus Test Environments.................................................................31
Test-Signing Operations...................................................................................................31
Timestamping...............................................................................................................31
Using SignTool.............................................................................................................32
Code-Signing Service Best Practices....................................................................................32
Cryptographic Key Protection...........................................................................................33
Signing Environment.........................................................................................................34
Code-Signing Submission and Approval Process.............................................................35
Auditing Practices.............................................................................................................36
Virus Scanning.................................................................................................................. 36
Test Signing...................................................................................................................... 37
Release Signing................................................................................................................37
How to Acquire a Certificate from a Commercial CA........................................................37
Revocation........................................................................................................................ 37
Automation........................................................................................................................ 38
Separation of Duties..........................................................................................................38
Staffing Requirements.......................................................................................................38
Timestamping.................................................................................................................... 38
Code-Signing Service Example Topologies...........................................................................39
Offline Manual Signing Topology......................................................................................40
Online Signing with Manual Approval...............................................................................44
Online Signing with Automated Approval..........................................................................47
Code Signing for Managed Networks....................................................................................50
Certificates from Trusted Third-Party Software Publishers................................................51
Certificates from an Internal CA........................................................................................51
Certificates from a Commercial CA...................................................................................52
Software Restriction Policies for Managed Networks.......................................................52
Resources.............................................................................................................................. 53
Introduction....................................................................................................................... 53
Code-Signing Basics.........................................................................................................53
Signing Technologies in Windows....................................................................................53
Digital Signatures in Windows...........................................................................................54
Code Signing during Software Development....................................................................54
Code-Signing Service Best Practices...............................................................................55
Code-Signing Service Example Topologies......................................................................55
Code Signing for Managed Networks...............................................................................55
Others................................................................................................................................ 56
Appendix 1. Generating Test Certificates with MakeCert......................................................57
Appendix 2. Configuring System Certificates Stores.............................................................58
Disclaimer
This is a preliminary document and may be changed substantially prior to final commercial release of the
software described herein.
The information contained in this document represents the current view of Microsoft Corporation on the
issues discussed as of the date of publication. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot
guarantee the accuracy of any information presented after the date of publication.
This White Paper is for informational purposes only. MICROSOFT MAKES NO WARRANTIES,
EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS DOCUMENT.
Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights
under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval
system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or
otherwise), or for any purpose, without the express written permission of Microsoft Corporation.
Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property
rights covering subject matter in this document. Except as expressly provided in any written license
agreement from Microsoft, the furnishing of this document does not give you any license to these
patents, trademarks, copyrights, or other intellectual property.
Unless otherwise noted, the example companies, organizations, products, domain names, e-mail
addresses, logos, people, places and events depicted herein are fictitious, and no association with any
real company, organization, product, domain name, email address, logo, person, place or event is
intended or should be inferred.
Microsoft, ActiveX, Authenticode, MSDN, Windows, Windows Server, and Windows Vista are either
registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.
The names of actual companies and products mentioned herein may be the trademarks of their
respective owners.
Introduction
Protecting personal and corporate data remains a top concern for consumer and
enterprise users of Windows® around the world. Microsoft is committed to
implementing new ways to help restrict the spread of malicious software. Digital
signatures for software are an important way to ensure robustness and integrity on
computer systems. Digital signatures allow the administrator or end user who is
installing Windows-based software to know which publisher has provided the
software package and whether the package has been tampered with since it was
signed.
Earlier versions of Windows used digital signatures to discourage users from
installing anonymous ActiveX® controls, download packages, executable files, and
drivers from untrusted sources. In Windows Vista®, new features are taking
advantage of code-signing technologies.
Code-Signing Basics
Code signing employs PKI technologies such as keys, certificates, and digital
signatures to ensure the identity and integrity of software. This section is an
introduction to the basics of code signing. It does not provide a detailed description
of cryptography or digital signatures. For more information on that topic, see
"Resources" at the end of this paper.
Digital Signatures
A digital signature binds the publisher's identity to the data that they have published
and provides a mechanism to detect tampering. Digital signature algorithms use
cryptographic hash functions and asymmetric—or public/private key pair—
encryption algorithms. Some digital signatures also take advantage of digital
certificates and PKI to bind public keys to the identities of software publishers.
To create a digital signature, one must first acquire a key pair. This consists of a
public key and a private key, with the following characteristics:
The private key is known only to its owner; the public key can be distributed
to anyone.
The private key is used to sign the data; the public key is used to verify the
signature on the data.
The private key cannot practically be calculated from the public key.
In practice, using public-key algorithms to directly sign files is inefficient. Instead,
typical code-signing procedures first create a cryptographic hash of the data in a file
—also known as a digest—and then sign the hash value with a private key. The
signed hash value is then used in the digital signature. The digital signature can be
packaged with the data or transmitted separately. A separately transmitted digital
signature is known as a detached signature.
A cryptographic hash function is a one-way operation that cannot be easily
reversed. If the hash function is sufficiently strong, currently known techniques
cannot alter an arbitrary set of data without changing the associated hash value. To
verify a file's integrity, a user calculates the hash value of the current contents of the
file with the same algorithm that was used to create the digest in the signature. If
the resulting hash value does not match the digitally signed digest, then the
signature, the contents of the file, or some combination thereof have been altered.
This renders the signature invalid and the file should not be installed or run.
Figure 1 shows a simplified procedure for signing a file:
1. A hashing algorithm creates a hash value from the data in the file.
2. The hash value is signed with the publisher's private key.
3. The data and the signed hash are published.
Digital Certificates
Digital certificates bind an entity, such as an individual, organization, or system, to a
specific public and private key pair. Digital certificates can be thought of as
electronic credentials that verify the identity of an individual, system, or
organization.
Various types of digital certificates are used for a variety of purposes. Examples
include:
Secure Multipurpose Internet Mail Extensions (S/MIME) for signing e-mail
messages.
Secure Sockets Layer (SSL) and Internet Protocol security (IPSec) for
authenticating network connections.
Smart cards for logging on to personal computers.
Windows code-signing technologies use X.509 code-signing certificates, a standard
that is owned by the Internet Engineering Task Force (IETF). For more information,
see "Resources" at the end of this paper.
Code-signing certificates allow software publishers or distributors to digitally sign
software. Certificates are often contained in digital signatures to verify the origin of
the signature. The certificate owner's public key is in the certificate and is used to
verify the digital signature. This practice avoids having to set up a central facility for
distributing the certificates. The certificate owner's private key is kept separately
and is known only to the certificate owner.
Software publishers must obtain a certificate from a certification authority (CA),
which vouches for the integrity of the certificate. Typically, a CA requires the
software publisher to provide unique identifying information. The CA uses this
information to authenticate the identity of the requester before issuing the
certificate. Software publishers must also agree to abide by the policies that are set
by the CA. If they fail to do so, the CA can revoke the certificate.
Certification Authorities
CAs act as trust brokers. They issue certificates to software publishers, binding the
publisher's public code-signing key to an identity that software consumers can
verify. The policies and operating procedures of CAs vary greatly. However, in
general, a CA:
Verifies the identity of the software publisher according to the CA's issuer
statement.
Issues certificates to software publishers.
Software Publisher
A software publisher creates and digitally signs software with a code-signing
certificate. The software publisher registers with a CA, requests a code-signing
certificate, and agrees to act in accordance with the CA's policies. Software
publisher is a broad term and includes a large range of software development
activities. Some examples include:
Independent software vendors (ISVs) that produce Windows applications.
Independent hardware vendors (IHVs) that produce Windows drivers.
Web developers who create ActiveX controls for internal or public
applications.
IT administrators who sign third-party drivers and applications for use in a
managed network.
A software publisher must protect its private code-signing key and set up internal
code-signing policies and procedures to ensure that only approved code is signed.
For more information on this process, see "Code-Signing Service Best Practices"
later in this paper.
If a software publisher signs a malicious program, it must revoke the compromised
code-signing certificate. To do so, the software publisher informs the CA that issued
the certificate. The CA revokes the compromised certificate by issuing a CRL or
updating the certificate’s OCSP status. The software publisher must then request a
new code-signing certificate. Software consumers can optionally check the
revocation status of a code-signing certificate when verifying digital signatures;
revoked certificates do not verify.
Software Distributor
A software distributor publishes software to users. Digital signatures normally
ensure the integrity of the software regardless of the distribution method. The
distribution mechanism varies. However, if a file is properly signed, it does not
matter from a security point of view whether the file is distributed via a Web site, ftp
site, file share, optical media (CD or DVD), or e-mail.
In the absence of an Authenticode signature, the security of the distribution
mechanism that is used for strong name–signed .NET assembly is a factor when
deciding whether to trust a strong name–signed package. For example, an
authenticated file server on a private network provides users a higher degree of
certainty about the origin of the strong name–signed software. For further
information on strong name signatures, see "Strong Name Signatures" later in this
paper.
Software Consumer
A software consumer is any user or application that verifies the digital signatures on
software. Without the identity and integrity information in the digital signature, the
software consumer cannot make an informed decision about whether to install or
run the software.
Authenticode policy verifies only signatures that are signed with a code-signing
certificate that was issued by a CA whose root certificate is in the Trusted Root
Certification Authorities certificate store. By default, the Trusted Root Certification
Authorities certificate store contains a set of commercial CAs that have met the
requirements of the Microsoft Root Certificate Program. Administrators can
configure the default set of trusted CAs and install their own private CA for verifying
internal software. Note that a private CA is not likely to be trusted outside the
administrator's network environment.
A valid digital signature assures the software consumer that an application is
strongly identified and has not been tampered with. However, a valid signature does
not necessarily mean that the end user or administrator should implicitly trust the
software publisher. Users or administrators must decide whether to install or run an
application on a case-by-case basis, based on their knowledge of the software
publisher and the application.
Authenticode
Authenticode is a Microsoft code-signing technology that identifies the publisher of
Authenticode-signed software and verifies that the software has not been tampered
with since it was signed. Authenticode uses cryptographic techniques to verify
identity. It combines digital signatures with an infrastructure of trusted entities,
including CAs, to assure users that an application originates from the stated
publisher. Authenticode allows users to verify the identity of the software publisher
by chaining the certificate in the digital signature up to a trusted root certificate.
Authenticode code signing is different from strong name signing in that it uses a
hierarchical system of CAs to verify the identity of the software publisher.
Authenticode code signing does not alter the executable portions of an application:
With embedded signatures, the signing process embeds a digital signature
within a nonexecution portion of the file.
With signed catalog (.cat) files, the signing process requires generating a
file hash value from the contents of a target file. This hash value is then
included in a catalog file. The catalog file is then signed with an embedded
signature. Catalog files are a type of detached signature.
Authenticode allows software vendors to embedded-sign a number of Windows file
formats, including:
Portable executable (PE).
An executable file format that includes .exe, .dll, .sys, and .ocx files.
Cabinet (.cab).
A file that stores multiple compressed files in a file library. The cabinet format is
an efficient way to package files because compression is performed across file
boundaries, significantly improving the compression ratio.
Windows Installer (.msi and .msp).
A file format for software packages or patches that are installed by the Windows
Installer.
Embedded Signatures
Embedded signing protects an individual file by inserting a signature into a
nonexecution portion of the file. The advantage of using an embedded signature is
that the required tool set is simpler and the signature is in the file itself.
With embedded signatures, Windows features such as the File Download –
Security Warning dialog box, the UAC prompt, and the Windows loader can easily
find the signature. However, not all operating system features check for embedded
signatures. For example, Device Management and Installation (DMI) recognizes
only signed catalog files. For more information, see "User Account Control" and
"Third-Party Signing for Plug and Play Driver Installation" later in this paper.
By default, embedded signatures are supported for only the limited set of file
formats that were listed in the previous section. All other formats are supported
through signed catalog files, which are discussed in the following section. However,
the Authenticode infrastructure has a provider model to support embedded signing
and verification for other file formats. An Authenticode provider is called a subject
interface package (SIP) and must be installed separately by the application that
requires the new file format.
how Plug and Play installation displays digital signature information, see "Third-
Party Signing for Plug and Play Driver Installation" later in this paper.
Timestamps
Certificates normally expire after a period of time, such as one year. However,
software is typically designed to operate for many years. If the certificate that was
used to sign the code expires, the signature cannot be validated and the software
might not install or run. To avoid this issue, Microsoft recommends that software
publishers timestamp their digital signatures.
A timestamp is an assertion from a trusted source, called a timestamp authority
(TSA), that the digital signature’s signed hash was in existence when the timestamp
was issued. If the signing certificate was valid at that time, Windows considers the
signature to be valid even if the certificate has since expired. If a signature is not
timestamped, when the certificate used to sign the software expires, the signature
simply becomes invalid.
Timestamps also play a role when checking for revoked certificates. If a digital
signature was timestamped before the certificate was revoked, the signature
remains valid. Timestamping thus allows a company to revoke a certificate and start
signing with a new certificate without any risk of invalidating previously signed
software applications.
Currently, a few CAs offer Authenticode timestamp services. The timestamps are
valid for all Windows platforms that are configured with the issuing CAs root
certificate. However, network or test lab managers might not want to use third-party
timestamps for internal applications or prerelease software. Windows does not
include a timestamping service, but nCipher offers a code-signing timestamp server
that can be deployed as an in-house service. For more information, see the white
paper titled “Deploying Authenticode with Cryptographic Hardware for Secure
Software Publishing.”
An optional culture
An optional processor architecture
The build process creates a strong name assembly by signing it with the private key
that corresponds to the public key in the strong name. The strong name signature
can then be verified by using the RSA key that is part of the strong name.
An assembly must use the strong name to reference another strong name
assembly. When the .NET Framework loads a strong name assembly, it normally
verifies the strong name signature. If verification fails, the .NET Framework does
not load the assembly.
This rule is not applied to assemblies from the global assembly cache (GAC), which
is a computer-wide cache that stores assemblies that are intended to be shared by
several applications on the computer. Assemblies in the GAC are verified when
they are installed. Because the GAC is a locked-down store that can be modified
only by an administrator, GAC assemblies are not verified each time they are
loaded.
After an assembly is strong name signed, all referenced assemblies must also be
strong name signed. This ensures a consistent level of integrity protection within a
strong named–signed assembly, provided that strong key management practices
are maintained for each key.
Code-Signing Tools
Authenticode and strong name tools are available from several sources:
Code-signing tools for Windows Vista are distributed with the Windows
SDK, which is available to members of the Windows Vista Beta Program.
The Platform SDK for Windows Server contains the required information
and tools to develop 32-bit and 64-bit Windows-based applications for earlier
versions of Windows. This SDK is available as a free download.
The WDK contains the information and tools for developing Windows
drivers. It includes the Hardware Compatibility Test (HCT) kits and the tools that
Microsoft uses to build and test the stability and reliability of the Windows
operating system. The WDK is available to members of the Windows Vista Beta
Program.
The .NET Framework SDK contains the required information and tools to
develop managed code applications. Like the Platform SDK, it is available as a
free download.
For further information on these tools, see "Resources" at the end of this paper.
Note: The tools in the Platform SDK and the WDK are not distributable. For more
information, see the tools' end-user license agreements (EULAs).
The following sections provide brief descriptions of the tools that are used for code
signing. For further information, see "Resources" at the end of the paper. For a
detailed walkthrough of the kernel-mode code-signing process, see the white paper
titled “Kernel-Mode Code Signing Walkthrough.”
MakeCat
The MakeCat utility is a code-signing tool that creates an unsigned catalog file that
contains the hashes of a specified set of files and their associated attributes. A
catalog file allows an organization to sign a single file—the catalog—instead of
signing numerous individual files.
After the catalog file is signed, the software consumer can hash the target files,
compare the hashes of the existing files to the original hashes within the catalog
file, and verify the signature on the catalog file. This process verifies that the
hashed files are free of tampering.
Before using MakeCat, the user must use a text editor to create a catalog definition
file (.cdf), which contains the list of files to be cataloged and their attributes. The
MakeCat tool:
Scans the .cdf file and verifies the attributes for each listed file.
Adds the listed attributes to the catalog file.
Hashes each of the listed files and stores the hash values in the catalog
file.
MakeCat does not modify the .cdf file.
For more information on MakeCat, see "Using MakeCat," in the MSDN library.
PVK2PFX
A .pvk file is a deprecated file format for storing keys. The use of .pvk files is
discouraged because .pvk is a less secure file format than the Personal Exchange
Format (.pfx), but is still used by some CAs. PVK2PFX is a Windows SDK tool that
moves certificates and private keys that are stored in .spc and .pvk files to .pfx files.
When possible, the preferred approach is to then store private keys in hardware.
For more information on PVK2PFX see "Appendix 5. Signing with PVK and PFX
Files" in this paper.
Inf2Cat
Inf2Cat is a Winqual submission tool that replaces the functionality provided by
Signability. For driver vendors, Inf2Cat verifies driver packages and uses the
information in a driver's INF file to create an unsigned catalog file.
Note: Inf2Cat is not currently part of the WDK tools; it is installed with the Winqual
Submission Tools. When the Winqual Submission Tools package is installed,
Inf2Cat is placed in the Program Files (x86)\Microsoft Winqual Submission Tool
folder.
Signability
Signability is a WDK tool for Plug and Play drivers that verifies the contents of a
driver package and creates an unsigned catalog file. For driver vendors, this tool is
easier to use than MakeCat because Signability does not require a separate .cdf
file. It instead gets the information it needs from the driver's INF file. Signability is
also available from the Microsoft Winqual Web site.
If the digital signature does not verify or if the software is not signed, Internet
Explorer presents a second Security Warning dialog box that warns the user that
the signature was not valid and the publisher is unknown, as shown in Figure 5.
ActiveX Controls
ActiveX controls are software packages that Internet Explorer can automatically
download and run. Microsoft recommends that all ActiveX controls be digitally
signed so that Internet Explorer can identify the control's publisher. If a user
attempts to download a signed ActiveX control that has not yet been installed,
Internet Explorer displays the information bar shown in Figure 6 to ask the user if he
or she wants to continue. Using the information bar instead of a dialog box for this
purpose reduces the likelihood of a user inadvertently installing a control.
Depending on the security zones settings, Internet Explorer might not download an
unsigned ActiveX control at all. Figure 7 shows the security level settings for a
typical system’s Internet zone. Note that Internet Explorer does not download
unsigned ActiveX controls from this zone.
Figure 8 shows an example of a User Account Control dialog box that asks the
user whether it should elevate an application’s privileges.
Figure 9 shows an example of the User Account Control dialog box asking for
user consent before running an unidentified application.
All kernel modules must be code signed for a PC system to be able to play
back next-generation premium content such as HD DVD and other formats that
are licensed under the Advanced Access Content System (AACS) specification.
For further information on these issues, see the white papers titled “Code Signing
for Protected Media Components in Windows Vista” and “Digital Signatures for
Kernel Modules on x64-based Systems Running Windows Vista.” Signing kernel-
mode drivers for use on x64 versions of Windows Vista requires the use of cross-
certificates. For more information, see the white paper titled “Microsoft Cross-
certificates for Windows Vista Kernel Mode Code Signing.”
Unsigned or altered: Plug and Play displays the dialog box shown in
Figure 11 for two scenarios:
The driver package does not contain a signed catalog file. A driver
package is also considered unsigned if the certificate was not issued by a
trusted CA or the signature is not valid.
One or more of the files in the driver package have been altered
since the package was signed.
For more information on driver package integrity for third-party developers, see the
white paper titled “Driver Package Integrity during Plug and Play Device Installs in
Windows Vista.” There is also related information in the WDK under the sections
titled "How Setup Selects Drivers" and "Signing Drivers for Development and Test."
For additional information on driver signing for x64 versions of Windows Vista, see
the white paper titled “Digital Signatures for Kernel Modules on x64-based Systems
Running Windows Vista.”
Windows Defender
Windows Defender is a feature of Windows Vista that protects Windows computers
against spyware and malicious code. One of its components, Software Explorer,
provides detailed information about the software that is running on a system, such
as the program's name, publisher, and whether the software is digitally signed.
Microsoft recommends when users should obtain more information about the
software publisher before running the software. A user can then make a more
informed decision about whether to trust a specific piece of software. For more
information on Windows Defender, see “Windows Defender.”
CA administrators have several models that they can use to issue test certificates:
The CA administrator automatically issues certificates to all members of a
specified domain, typically developers and testers.
CA clients make certificate enrollment requests. There are two ways to
handle the approval process:
The CA administrator designates a specific individual to manually
approve each request.
The CA automatically evaluates each request based on access
control lists (ACLs), previously configured by the CA administrator.
The CA administrator designates specific individuals to make certificate
enrollment requests on behalf of the members of the organization.
In addition to centralizing the process, a CA makes other aspects of certificate
management simpler including expiration, revocation, and reissuance.
Test computers can be configured through Active Directory or with Group Policy. If
these techniques are not desirable, other options include manual configuration with
the MMC snap-in or command line scripts that use CertMgr. For more information,
see "Configuring a Test Computer/Environment" later in this paper.
Many commonly used commercial CAs’ root certificates are in the Trusted Root
Certification Authorities certificate store by default. However, if an application is
signed with a self-signed certificate, that certificate must be added to the Trusted
Root Certification Authorities certificate store. Otherwise, Windows will not
successfully verify the test signature.
Trusted Publisher
For default Authenticode policy—used by Plug and Play, Internet Explorer, and
others —if a publisher’s code-signing certificate is in the Trusted Publishers
certificate store, the user or administrator has agreed to allow Windows to install or
run the publisher’s software without displaying security warnings or dialog boxes.
The Trusted Publishers certificate store is different from the Trusted Root
Certification Authorities certificate store in that only end-entity certificates can be
trusted. In other words, adding a test CA root certificate to the Trusted Publishers
certificate store does not configure all certificates that this CA issued as trusted.
Each certificate must be added separately.
Configuring certificates in the Trusted Publishers certificate store is not necessary—
nor in most cases desirable—for manual testing of test-signed applications. For
scenario testing, it is generally desirable for a tester to replicate the end-user
experience of installing the application, with the Trusted Publishers certificate store
in its default state. In that state the software vendor’s code-signing certificate is not
configured in the Trusted Publishers certificate store. However, scripting an
automated test to respond to a trust dialog box may not be possible. In these cases,
it is appropriate to add the test-signing certificate to the Trusted Publishers
certificate store.
Machine and User Certificate Stores
Two types of system certificate stores are relevant to configuring a test computer:
user certificate stores and machine certificate stores. There is one set of machine
certificate stores per computer and one set of user certificate stores per user
account. Note that all user certificate stores inherit the contents of the machine-level
certificate stores. If a certificate is added to the Trusted Root Certification
Authorities machine certificate store, all Trusted Root Certification Authorities user
stores will also contain the certificate.
The required level of privilege to configure a certificate store depends on the type of
store. Users with administrator privilege can configure the machine store and their
own user stores. Users with lower privileges can configure only their own user
stores.
Note: Different Windows features make decisions based on different certificate
stores. In general, processes that are running under LocalSystem, LocalService, or
NetworkService contexts trust only certificates in the machine certificate stores.
Applications that run in a user’s context trust that user’s certificate stores.
For example, test-signing verification by a Plug and Play installation requires that
test certificates be located in a machine certificate store. Test-signing applications
for the UAC, Internet Explorer, and Windows Defender scenarios only require test
certificates to be present in the user’s certificate store.
Test owners can differentiate between configuring the user and machine stores in
all but the first of the configuration tools that are described in Appendix 2 of this
paper.
Test-Signing Operations
Test signing can be performed by individual developers or by a centralized build
process. The procedure is relatively simple. To set up a test-signing operation, a
developer must:
Acquire a test code-signing certificate with a private key.
Configure the code-signing certificate.
If the code-signing certificate is issued by a CA, the CA must be
configured in either the user or machine Trusted Root Certification
Authorities certificate store. This ensures that the tool that it used for
signing will recognize that the code-signing certificate is valid.
If the test certificate is self-signed, then the self-signed certificate
itself must be located in the Trusted Root Certification Authorities certificate
store.
Acquire a copy of SignTool. This tool is included with the WinSDK and
WDK and runs from their command line environments. If developers want to
use SignTool outside those command line environments, they must make sure
that CAPICOM.dll—version 2.1.0.1 or higher—has been copied to the directory
where SignTool is located. CAPICOM is also redistributed through MSDN. For
more information, see "Resources” at the end of this paper.
Decide whether to timestamp the application. Timestamping is discussed in
the next section.
Timestamping
A timestamp is an assertion from a trusted source—called a timestamp authority
(TSA)—that the digital signature’s signed hash was in existence when the
timestamp was issued. If the signing certificate was valid when the signature was
timestamped, Windows considers the signature to be valid, even after the certificate
has expired. If a signature is not timestamped, Windows considers the signature
invalid after the certificate has expired.
There are three options for timestamping prerelease software, as discussed in the
following sections.
Option 1: No timestamp
This choice is appropriate if the expiration date of the code-signing certificate
significantly exceeds the expected lifetime of the test code. For example, a self-
signed certificate that expires in one year should be more than sufficient to sign a
prerelease build of an application that is expected to be used for only a few days. If
the test certificate is part of an automated process, be sure to refresh the certificate
periodically, well before the certificate expires. This ensures that prerelease
applications are not accidentally signed with a certificate that is close to expiring.
The build process designer should also ensure that the release-signing process still
timestamps the signature.
Option 2: Timestamp against a public timestamp authority
This is the recommended approach for all public and long-lasting releases of
applications. Timestamping is currently available through Verisign, free of charge.
Other commercial CAs may also offer timestamping services. Accessing the
timestamping service requires Internet connectivity. For more information, see
"Appendix 4. SignTool" of this paper and "SignTool (Signtool.exe)" in the MSDN
library.
Option 3: In-house timestamps
Software development organizations that must perform code signing and
timestamping without sending traffic outside a private network should consider
deploying an in-house timestamping service. Currently nCipher offers a hardware-
based Authenticode timestamping solution. However, if a timestamp does not chain
to a root certificate by default in the Trusted Root Certifications Authorities
certificate store, the timestamp is trusted only within the managed network
environment where the computers are explicitly configured to trust the TSA. For
further information, see the white paper titled “Deploying Authenticode with
Cryptographic Hardware for Secure Software Publishing.”
If Option 2 or 3 is chosen, the code signer must decide whether to sign and
timestamp in the same operation or to perform the tasks on separate computers.
The rationale behind using two computers is that timestamping requires an Internet-
facing computer. Signing requires access to a private signing key, and an
organization might not want to risk having the computer used for release signing
connected to the Internet. Using a separate computer for timestamping helps
maintain the security of the private key. For test-signing purposes, however, a
single operation is probably more appropriate because the value of the test-signing
private key is limited and can easily be reissued.
Using SignTool
After the signing environment has been configured, it is easy to use SignTool to
sign, timestamp, or sign and timestamp. For examples of command line syntax and
additional guidance on the operation of SignTool, see Appendix 5 of this paper.
Organizations should consider the criteria in Table 2 when evaluating smart cards
against HSMs.
Table 2. Key Protection Evaluation Criteria
Criteria Smart card Hardware security module
Certification: FIPS 140-2 Level 3 Generally, no Yes
Key generation in hardware Maybe Yes
Key backup No Yes
Multifactor authentication No Maybe
Speed Slower Faster
Separation of roles No Yes
Automation No Yes
Destruction Yes Yes
The following list explains the terms and issues that are summarized in Table 2.
Certification. Federal Information Processing Standard (FIPS) 140-2 is a
U.S. Government standard that provides criteria for evaluating cryptographic
modules. As a best practice, Microsoft recommends that vendors use FIPS
140-2 Level 3 certified products. Industrial HSMs normally have this
certification, but smart card devices usually do not.
Key generation. When keys are generated, they should never be exposed
as plain text outside the hardware device. Industrial HSMs provide key
generation in the hardware. Smart card implementations might support this
feature.
Key backup. Keys should be backed up for disaster-recovery purposes
and to mitigate the risk of a hardware failure. It is important that keys not be
exposed in plain text outside the HSM during backup operations. Industrial
HSMs support secure key backup from one FIPS 140-2 Level 3 certified device
to another. If the keys are not backed up and the hardware device fails, new
keys must be issued.
Multifactor authentication. Organizations should require more than one
approver for a code-signing operation. This is referred to as "k of n," where a
specific number of authorizations must be present to perform any cryptographic
operations. For example, three trusted individuals out of seven must be present
to digitally sign software.
Some HSMs support multifactor authentication. A multiple-approver
requirement can be met with a smart card, but it must be accomplished in other
ways. For example, a smart card could be stored in a safe that requires multiple
keys or one officer could know the safe's combination while another knows the
smart card's personal identification number (PIN).
Speed. Smart cards generally perform cryptographic operations more
slowly than industrial HSMs. HSMs contain dedicated cryptographic
accelerators, which makes them better suited to high-throughput environments.
Any organization that requires more than 100 signings per week should
consider using an HSM.
Separation of duties. Administrative and operational roles should be
segregated to avoid relying upon a single individual or team.
Automation. HSMs support automated signing. With smart cards,
someone must manually enter a PIN for each signing operation. High-
throughput or time-sensitive environments that require automated signing
should deploy an HSM.
Destruction. HSMs support the complete key life cycle including key
destruction. If a private key becomes invalid for any reason, it is important that
the key be destroyed. This can be accomplished by overwriting the key on the
HSM or smartcard or by physically destroying the device.
Signing Environment
The signing environment must be physically secure. Otherwise, there is no way to
prevent smart cards or HSMs from being lost or used to sign inappropriate content.
The value and availability requirements of the code-signing infrastructure dictate the
physical and logical barriers that must be implemented. For example, for a low-
throughput infrastructure it may be sufficient to keep an HSM in a locked room that
is accessible to only a limited set of individuals. In contrast, a high-throughput
production infrastructure may require a high-security data center.
This paper does not attempt to provide a comprehensive description of how to
physically secure a code-signing environment. In general, Microsoft recommends
that software publishers apply the principles of defense-in-depth by using multiple
security techniques for different layers of their code-signing system. Organizations
should consider the following physical security best practices:
Access controls such as locks, keycard cards, or biometrics to restrict
access to the code-signing infrastructure
Restricted physical access to HSMs or smart cards
Security cameras
Onsite security guards
Visitor logging
A tools-resistant server safe for online code-signing servers
Logical and physical segregation of the code-signing infrastructure from the
production network
Periodic audits of the code-signing infrastructure to ensure compliance with
documented practices and design
For non-networked signing services, the signing computer or smart card should be
kept offline in a tool-resistant safe when it is not in use. The following procedures
are highly recommended for networked code-signing systems:
Keep the signing service behind a firewall or on a separate network.
Consider Microsoft Internet Security and Acceleration Server or Server and
Domain Isolation with IPSec.
Deploy network authentication and integrity protocols as part of the
submission and approval process. Password authentication is generally not
recommended. Instead, consider certificate-based authentication that uses
certificates that are issued from an internal CA or domain authentication that
uses Kerberos. IPSec with mutual authentication is also a viable option.
Consider using a separate drop-off-and-pick-up server as an intermediary
between the corporate and signing service networks.
Consider deploying network intrusion-detection systems to detect network-
based hacking attempts.
Auditing Practices
Microsoft recommends that all code-signing activities be logged for auditing
purposes. In a small organization, auditing could be handled with an electronic log
or physical log book that is stored in a secure location. A medium to large
organization might record every transaction in a code-signing database. The
auditing process should record data such as the name of the file, the name of the
submitter, the name of the approver, the hash of the file, and the file before and
after signing. This data ensures that code-signing activity can be examined and
individuals can be held accountable if unintended or malicious code is signed.
If an audit server is used, it is important to ensure that the audit server is hardened.
Microsoft Baseline Security Analyzer (MBSA) is a free tool that helps organizations
detect common security misconfigurations, such as unnecessary active services,
and identify missing security updates. Run MBSA regularly to ensure a sound
security posture.
Virus Scanning
It is critical that signed code not contain viruses. Microsoft strongly recommends
that software publishers check all submitted files for viruses as part of the release
process. Organizations should use at least two antivirus programs before signing
any public release. Virus scanning should be part of the code-signing process and
should be used in addition to standard desktop virus scanning by developers. Best-
practice recommendations include the following:
Ensure that the virus-scanning system is hardened and is operating in a
known good state. Harden the virus scan server and run MBSA regularly.
Ensure that the virus-scanning software is operating in a known good state.
This is accomplished by updating the virus definitions and testing the virus-
scanning application with a known test file before scanning submissions. This
ensures that the virus-scanning engine and virus-scanning definitions are up to
date and working properly.
Logically or physically separate the virus-scanning server from the code-
signing server. Ensure separation of duties by giving two separate individuals or
teams access to and responsibility for maintaining the virus-scanning servers.
Test Signing
Microsoft recommends that organizations use separate test-signing procedures to
sign prerelease code, not the release-signing process. The use of test signing has
several advantages:
Test signing limits the possibility that prerelease code could be signed with
the organization’s production keys.
Test-signing keys are not valid outside the test environment, so they require
less stringent security policies.
Test-signing keys are less valuable than production-signing keys. so they
can be distributed more freely to members of a software development team. For
example, a developer can be granted access to an individual test key, reducing
the required time for seeking approval.
Access to the release code-signing infrastructure can be far more controlled
than for test signing because the release keys are required less frequently.
Test-signing keys and certificates can be generated in-house with freely
available tools.
For further information on test signing, see "Code Signing during Development"
earlier in this paper.
Release Signing
Microsoft strongly recommends that all publicly released code be signed with a
certificate from a CA that is present in the trusted CA root store. This
recommendation includes public betas as well as final releases. Software for
internal use can be signed by a certificate that is issued by either a commercial CA
or an internal CA that the organization manages. Major milestones might also be
release signed to ensure that the release-signing process is functioning properly.
However, such internal submissions should be confined to the organization and
protected from public release.
Revocation
If a private signing key is compromised, the publisher must contact the issuing CA
and have the certificate revoked. Revocation invalidates the certificate and adds it
to the CRL. If signatures are timestamped, those files that were signed before the
certificate was revoked still have valid signatures. Otherwise, revocation invalidates
all files that are signed by using the revoked certificate. Note that revoked
certificates should remain in the CRL because a timestamped signatures that was
created with certificates that were later revoked can remain valid indefinitely.
Note: If legitimately signed applications are signed and timestamped after the
malware is signed and timestamped, revoking the compromised certificate
invalidates the signatures on the legitimately signed applications in addition to the
malware.
The most effective way to limit the risk of a compromised key is to implement good
security policies and procedures.
Automation
Automation, in the context of this paper, means a process for automatically
approving and signing code that is submitted to a code-signing service without
requiring manual approval. This approach can shorten the turnaround time for
builds and increase the available time for development. However, automation
extends the trust boundary from the code-signing service to the build process itself.
Organizations that use automation should implement a layered security approach to
ensure that only approved code can be submitted to the build process and
subsequently signed.
Some additional recommendations for a robust automation process include the
following:
Authenticate and audit the process for approving code that is submitted to
the build process.
Authenticate submissions from the build computer to the code-signing
service.
Consider using strong network security for both the build and code-signing
networks, including:
Requiring strong authentication and message integrity.
Maintaining separate networks for build, code signing, and general
use.
Installing intrusion-detection and network-monitoring software.
Separation of Duties
Organizations should use separation of duties to ensure that administrative and
operational roles are separated within the code-signing environment and the
automated build process. This approach prevents organizational pressures from
influencing the overall signing process. For example, one way to implement
separation of duties is to have:
One group that is responsible for the approval process.
A second group that controls access to the HSM.
A third group that is responsible for auditing and virus scanning.
Staffing Requirements
Only highly trusted employees should have a code-signing role. Organizations
should consider, for example, having such employees undergo background or credit
rating checks. Other factors that might influence staffing decisions could include
seniority, performance, and job satisfaction.
Timestamping
As previously discussed, certificates normally expire after a period of time, such as
one year. However, software is typically designed to operate for many years. If the
certificate that was used to sign the code expires, the signature cannot be validated
and the software might not install or run. To avoid this issue, Microsoft recommends
that software publishers timestamp their digital signatures.
The digital signature of production code should be timestamped to ensure that the
code is still valid after the certificate that was used to sign the code has expired.
Timestamping is available through Verisign. Other commercial CAs may also offer
timestamping services. Alternatively, an internal hardware-based timestamping
service can be deployed. However, the timestamps that an internal TSA provides
will be trusted only within the internal network. For more information, see
“Timestamps” under “Signing Technologies in Windows” earlier in this paper.
2. Submission
3. Virus
Scan Operations Signer
1. Approval Virus Scanner + Virus Scanner
4. Logging
Developer Log Book Operations Signer
+ Neutral 3rd Party Timestamp
> Approver Server
5. Retrieve Secure
Smart Card Cabinet
Neutral 3rd Party
7. Archive
Signed Code
Internet
6. Signing
Operation
8. Return
Signed Operations Signer
Code Signing Server + Neutral 3rd Party Firewall
Security Boundary
Figure 14 depicts a typical online manual topology, and the following sections
describe the workflow.
Firewall Firewall
10. Return HSM
Signed
Code Code Signing Firewall
Server
Security Boundary
Who: Developer
The developer initiates the submission request by using a secure Web front end.
The developer is authenticated by using SSL or IPSec.
Only developers or build services have access to the Web front end.
Who: Developer
The developer uploads the unsigned files to the secured file share.
All processing—other than signing—is complete. Changing the submission
later, by processes such as rebasing files or localizing resource files, invalidates
the signature.
Who: Approver(s)
Reference: “Code-Signing Submission and Approval Process”
Approvers review the submission.
Approvers authenticate themselves to the Web front end by using SSL or
IPSEC.
There are at least two approvers according to best practices.
Figure 15 depicts a typical online automated topology, and the following sections
describe the workflow.
3. Virus
Scan
1. Check in Virus
Code Build Server Scanner
HSM
Developers 2. Submit 4. Logging
Files to Staging Audit
Staging Timestamp
Server Server Server
Server
5. Code Archive
Signing Server
6. Archive
Internet
Firewall Firewall
7. Return HSM
Signed
Code Code Signing Firewall
Server
Security Boundary
The submission is signed by using signing keys on the HSM and the code-
signing software on the signing server.
The submission is timestamped. This step is optional but highly
recommended for code that is expected to function beyond the lifetime of the
certificate.
The options for timestamping a public release are:
Timestamp the signed file on the code-signing server. Use a global
TSA over a separate dedicated Internet connection that is behind a strict
firewall to ensure that the signing server is logically isolated from the
internal network and the Internet.
Copy the signed file to a separate server that is used only for
timestamping. This ensures that the signing server is never exposed to the
Internet or corporate network.
The options for an internal release are:
Use a hardware-based timestamp solution within the boundaries of
the signing environment.
Use a global TSA, as described in the previous list.
signing and related operations. This helps to ensure the integrity of the private keys
that are used for release signing and prevents the signing of applications from
unintended sources. For more information regarding code-signing processes and
the protection of private keys, see "Code-Signing Service Best Practices" earlier in
this paper.
Network managers configure which applications are trusted within managed
network environments by adding the code-signing certificates of trusted software
publishers to the certificate stores of the computers that they manage. The trusted
code-signing certificates can come from any combination of trusted third-party
software publishers, an internal CA that the organization manages, or a certificate
that a commercial CA issues to an organization.
Resources
The following links provide further information about Windows code-signing and
related topics.
Introduction
Digital Signatures for Kernel Modules on x64-based Systems Running
Windows Vista
http://www.microsoft.com/whdc/system/platform/64bit/kmsigning.mspx
Cryptographic Services
http://go.microsoft.com/fwlink/?LinkId=95779
Code-Signing Basics
Introduction to Code Signing
http://go.microsoft.com/fwlink/?LinkId=95781
Authenticode
http://www.microsoft.com/technet/archive/security/topics/secaps
/authcode.mspx?mfr=true
Public-Key Infrastructure (X.509) Certificates
http://www.ietf.org/html.charters/pkix-charter.html
SignTool (Signtool.exe)
http://go.microsoft.com/fwlink/?LinkId=95784
Others
Add a trusted root certification authority to a Group Policy object
http://technet2.microsoft.com/WindowsServer/en/Library
/4b7ea7f9-311a-479b-aecc-c856165b97c11033.mspx?mfr=true
Certificate stores
http://technet2.microsoft.com/WindowsServer/en/Library
/1c4d3c02-e996-450a-bf4f-9a12d245a7eb1033.mspx
Strong Name Tool (Sn.exe)
http://msdn2.microsoft.com/en-us/library/k5b5tt23(vs.71).aspx
Implementing and Administering Certificate Templates in Windows Server
2003
http://technet2.microsoft.com/WindowsServer/en/Library
/c25f57b0-5459-4c17-bb3f-2f657bd23f781033.mspx
Platform SDK Redistributable: CAPICOM
http://www.microsoft.com/downloads/details.aspx?FamilyID=860ee43a-a843-
462f-abb5-ff88ea5896f6&DisplayLang=en
MakeCert arguments:
-r: Specifies that the certificate is self signed, that is, the certificate is a root
certificate.
-pe: Specifies that the private key that is associated with the certificate can
be exported. This is useful if it is necessary to migrate the private key to another
computer.
–sr CurrentUser: Specifies that the test certificate is created in the
CurrentUser certificate store. To add the certificate to the machine store,
specify LocalMachine. Note that adding certificates to a machine store requires
administrator credentials.
-ss TestCertStore: Specifies the name of the certificate store that contains
the test certificate as TestCertStore.
-n "CN=TestCert": Specifies the subject name of the certificate as
TestCert. The subject name should clearly identify the certificate as a test
certificate, for example, "Contoso Testing Cert - for in-house use only."
TestCertFile.cer: The name of the file that contains a copy of the test
certificate. It can be used to configure a test computer as described in
"Appendix 2. Configuring System Certificate Stores" of this paper. The file does
not contain the private key.
For more information on MakeCert, see “Resources” for links to the MSDN
documentation.
If the certificate must be placed in multiple certificate stores, repeat the procedure
for each store.
Note: This procedure can be used only to add a certificate to the user’s certificate
store. It cannot be used to add a certificate to a machine store.
5. In the Add Standalone Snap-in dialog box , click Close. In the Add/Remove
Snap-in dialog box, click OK.
6. In the left pane of the MMC window, expand Certificates. and then click the
desired certificate store, such as Trusted Root Certification Authorities or
Trusted Publishers.
7. On the Action menu, click All Tasks, and then click Import to launch the
Certificate Import Wizard. Then click Next to go to the second page.
8. In the File Name edit box, enter the name of the file that contains the certificate
and click Next. An alternative is to click Browse and navigate to the file.
9. Click Place all certificates in the following store, and then click Browse to
open the Select Certificate Store dialog box. From the drop-down list, select
Trusted Root Certification Authorities and click OK.
10. Click Next, and then click Finish.
Note: Before a test certificate can be added to the Trusted Root Certification
Authorities certificate store, the system displays a Security Warning dialog box.
Click Yes to allow the certificate to be added.
Administrators edit policy settings with the MMC Group Policy Object Editor snap-in.
To use the snap-in to deploy code-signing certificates to the system certificate
stores of multiple users:
1. On the Start menu, click Run, and enter "mmc" to launch MMC.
2. On the MMC window's File menu, click Add\Remove Snap-in.
3. On the Standalone tab of the Add/Remove Snap-in dialog box, click Add.
4. From the list of available snap-ins, select Group Policy Object Editor, and
click Add.
To edit the Group Policy object for the local computer, click Finish
and then click Close.
To edit the Group Policy object for a domain, click Browse and
either select Default Domain Policy or specify a domain. Then click
Finish.
5 If there are no more snap-ins to add to the console, click OK.
6. In the left pane of the Console window, expand Local Security Policy or
Default Domain Policy, depending on the choice made in Step 4. Then
expand Computer Configuration, Windows Settings, and Security Settings
and click Public Key Policies.
7. Right-click the desired system certificate store, such as Trusted Root
Certification Authorities or Trusted Publishers.
8. On the shortcut menu, click Import to launch the Certificate Import Wizard and
use it to import the certificates.
Revocation
In most PKI deployments, only certificates that have not yet expired are placed on
the CRL. This means that when a revoked certificate expires, it is eventually
removed from the CRL. However, timestamping allows Authenticode signatures to
remain valid indefinitely. As a result, revoked code-signing certificates should not be
removed from the CRL. This paper recommends always revoking compromised
certificates that were used to sign publicly released software and maintaining these
entries in the CRL indefinitely.
Microsoft Certificate Server enables administrators to configure the CA to keep all
revoked certificates in the CRL. However, the CA does not distinguish between
code-signing certificates and other certificates. For this reason, administrators
should dedicate a CA for the sole purpose of handling code-signing production
certificates. This paper makes no recommendation on revoking test code-signing
certificates because the certificates are trusted only within the test environment.
Organizations must resolve this question themselves based on the value of the
required test certificates and resources to revoke all test certificates generated by
the test CA.
SignTool arguments:
verify: Verifies the signature in the specified file.
/pa: Uses the Authenticode verification policy when verifying the signature.
/v: Specifies the verbose option, which displays successful execution and
warning messages.
FileName: Specifies the name of the binary file that contains the signature
to be verified,
3. Examine the string in the File name edit box to confirm that the file path is
correct, and then click Next to go to the Password page.
4. Enter the PFX file's password, select the Mark the key as exportable check
box, and click Next to go to the Certificate Store page.
Important: If you do not select the check box, it will be more difficult to delete
the private key later.
5. To add the certificate to the Personal store and go to the wizard's completion
page, click Next . Otherwise, specify a store and click Next.
6. Examine the settings on the completion page and click Finish to complete the
wizard.
3. Select the Personal Information Exchange – PCKS #12 (.PFX)) check box.
Under that check box, select the Enable strong protection and Delete the
private key if the export is successful check boxes. To go to the Password
page, click Next.
4. Enter a strong password in both edit boxes, and click Next to go to the File to
Export page.
5. Click Browse and navigate to a location that can be easily remembered and is
accessible to a limited set of users. Assign a name to the exported PFX file and
click Close to create the file and return to the wizard. Then click Next to go the
wizard's completion page.
6. Examine the data on the completion page and click Finish to complete the
wizard. Click OK on the subsequent message box stating that the export was
successful.
7. Return to the MMC certificates snap-in and right-click the certificate. On the
shortcut menu, click Delete, and then click Yes on the Certificates message
box to delete the certificate.
8. Navigate Windows Explorer to the PFX file that was exported earlier in this
procedure. Select the file, hold down the SHIFT key to prevent the deleted file
from being placed in the Recycle Bin, and press the DELETE key. An
alternative approach is to delete the file normally and then delete it from the
Recycle Bin.