MakeCert
MakeCert (Makecert.exe) is a command-line CryptoAPI tool that creates an X.509 certificate that is signed by a system test root key or by another specified key. The certificate binds a certificate name to the public part of the key pair. The certificate is saved to a file, a system certificate store, or both.
MakeCert supports a large number of switches but this section only describes the basic switches that are relevant to creating a test certificate that can be used to test-sign a driver package or embed a signature in a driver file.
Partial list of switches and arguments
/b DateStart
Specifies the start date when the certificate first becomes valid. The format of DateStart is mm/dd/yyyy.
If the /b switch is not specified, the default start date is the date when the certificate is created.
/e DateEnd
Specifies the end date when the certificate’s validity period ends. The format of DateEnd is mm/dd/yyyy.
If the /e switch is not specified, the default end date is 12/31/2039.
/len KeyLength
Specifies the length, in units of bits, of the subject’s private and public keys.
If the /len switch is not specified, the default key length is 1024 bits.
/m nMonths
Specifies the number of months starting from the start date during which the certificate will remain valid.
/n «Name«
Specifies a name for the certificate. This name must conform to the X.500 standard. The simplest method is to use the «CN=MyName» format.
If the /n switch is not specified, the default name of the certificate is «Joe’s Software Emporium».
/pe
Configures MakeCert to make the private key that is associated with the certificate exportable.
/r
Configures MakeCert to create a self-signed root certificate.
/sc SubjectCertFile
Specifies the subject’s certificate file name along with the existing subject public key that is used.
/sk SubjectKey
Specifies the name of the subject’s key container that holds the private key. If a key container does not exist, a new key container is created. If neither /sk nor /sv switch is entered, a default key container is created and used by default.
/sr SubjectCertStoreLocation
Specifies the registry location of the certificate store. The SubjectCertStoreLocation argument must be either of the following:
currentUser
Specifies the registry location HKEY_CURRENT_USER.
localMachine
Specifies the registry location HKEY_LOCAL_MACHINE.
If the /r switch is not specified along with the /s switch, currentUser is the default.
/ss SubjectCertStoreName
Specifies the name of the certificate store where the generated certificate is saved.
/sv SubjectKeyFile
Specifies the name of the subject’s .pvk file that holds the private key. If neither /sk nor /sv switch is entered, a default key container is created and used by default.
OutputFile
The name of the file in which the generated certificate is saved.
Comments
MakeCert supports a large number of switches. The switches described in this topic are limited to the ones that you can use to create a test certificate.
For a complete list of MakeCert parameters, see the MakeCert website and the Using MakeCert website.
A 32-bit version of the MakeCert tool is located in the bin\i386 folder of the WDK. A 64-bit version of the tool is located in the bin\amd64 and bin\ia64 folders of the WDK.
АйТиБложик
Маленький IT блог с характером 1С.
Страницы
Поиск по блогу
вторник, 3 марта 2015 г.
Создание временного сертификата для использования во время разработки
Что такое MakeCert
MakeCert — инструмент для создания сертификатов X.509, которые предназначены исключительно для тестирования разрабатываемого приложения. Этот инструмент создает пару ключей(открытый и закрытый) для цифровой подписи и помещает её в файл сертификата.
MakeCert входит в состав пакета Windows SDK, который можно скачать с http://go.microsoft.com/fwlink/p/?linkid=84091. Если вам не хочется устанавливать целый пакет разработчика, то вот ссылка на сам файл.
Создание временного сертификата
MakeCert — это консольное приложение. Для работы с ним необходимо запустить командную строку(от имени Администратора) и ввести команду запуска приложения с указанными параметрами: makecert [options] outputCertificateFile, где outputCertificateFile — имя файла с расширением .cer, в который будет записан тестовый сертификат X.509, options — параметры создания сертификата.
Описание параметров приведено на сайте MSDN по этой ссылке.
Пример вызова makecert.exe: makecert -sk XYZ -n «CN=XYZ Company» testXYZ.cer
Что бы создать временный сертификат, необходимо выполнить два действия. Первое — создать самозаверяющий сертификат, который будет использоваться в качестве корневого сертификата для временного сертификата. Второе — создать сам временный сертификат, подписанный корневым сертификатом.
Создание самозаверяющего сертификата корневого центра и экспорт закрытого ключа
Выполняем в командной строке:
makecert -n «CN=TempCert» -r -sv TempCert.pvk TempCert.cer
![]() |
| Создание самозаверяющего сертификата |
- -n (subjectName) — задает имя субъекта. Согласно правилам, к имени субъекта добавляется префикс «CN = » для «Common Name»;
- -r — указывает, что сертификат самозаверяющий;
- -sv (privateKeyFile) — указывает файл, содержащий контейнер закрытого ключа. То есть закрытый ключ будет храниться не в сертификате, а в файле. Он нам еще пригодится.
Самозаверяющий сертификат — это сертификат подписанный приложением, которое создало его, в нашем случает MakeCert’ом.
Как создать самоподписанный сертификат в Windows
Большинству администраторов Windows, знакомых с темой PKI, известна утилита MakeCert.exe, с помощью которой можно создать самоподписанный сертификат. Эта утилита включена в состав Microsoft .NET Framework SDK и Microsoft Windows SDK. В Windows 8 и Windows Server 2012 появилась встроенная возможность создания самоподписанного сертификата средствами PowerShell 3.0 и выше без использования специальных утилит.
Использование командлета New-SelfSignedCertificate для создания сертфикатов
Для создания самоподписанного сертификата в PowerShell предлагается использовать командлет New-SelfSignedCertificate, входящий в состав модуля PoSh с именем PKI (Public Key Infrastructure).
Чтобы вывести список всех доступных командлетов в модуле PKI, выполните команду:
Get-Command -Module PKI
Самоподписанные сертификаты рекомендуется использовать в тестовых целях или для обеспечения сертификатами внутренних интранет служб (IIS, Exchange, Web Application Proxy, LDAPS, ADRMS, DirectAccess и т.п.), в тех случая когда по какой-то причине приобретение сертификата у внешнего провайдера или разворачивание инфраструктуры PKI/CA невозможны.
Для создания сертификата нужно указать значения –DnsName (DNS имя сервера, имя может быть произвольным и отличаться от имени localhost) и —CertStoreLocation (раздел локального хранилища сертификатов, в который будет помещен сгенерированный сертификат). Командлет можно использовать для создания самоподписанного сертификата в Windows 10 (в нашем примере), Windows 8/8.1 и Windows Server 2016/2012/2012 R2.
Чтобы создать сертификат для DNS имени test.contoso.com и поместить его в список персональных сертификатов компьютера, выполним команду:
New-SelfSignedCertificate -DnsName test.contoso.com -CertStoreLocation cert:\LocalMachine\My
Directory: Microsoft.PowerShell.Security\Certificate::LocalMachine\My
Thumbprint Subject
———- ——-
2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 CN=test.contoso.com
По-умолчанию генерируется самоподписанный сертификат со следующим настройками:
- Криптографический алгоритм: RSA;
- Размер ключа: 2048бит;
- Допустимые вариантов использования ключа: Client Authentication и Server Authentication;
- Сертификат может использоваться для: Digital Signature, Key Encipherment ;
- Срок действия сертификата: 1год.
Данная команда создаст новый сертификат и импортирует его в персональное хранилище компьютера. Открыв оснастку certlm.msc, проверим, что в разделе Personal хранилища сертификатов компьютера появился новый сертификат.
$todaydate = Get-Date
$add3year = $todaydate.AddYears(3)
New-SelfSignedCertificate -dnsname test.contoso.com -notafter $add3year -CertStoreLocation cert:\LocalMachine\My
Чтобы экспортировать полученный сертификат c закрытым ключом в pfx файл, защищенный паролем, нам понадобится его отпечаток (Thumbprint), который нужно скопировать из результатов выполнения команды New-SelfSignedCertificate:
$CertPassword = ConvertTo-SecureString -String “YourPassword” -Force –AsPlainText
Export-PfxCertificate -Cert cert:\LocalMachine\My\2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:\test.pfx -Password $CertPassword

Export-Certificate -Cert Cert:\LocalMachine\My\2779C0490D558B31AAA0CEF2F6EB1A5C2CA83B30 -FilePath C:\testcert.cer
Полученный открытый ключ или сам файл сертификата можно установить на веб-сервер или клиентах домена с помощью GPO (пример установки сертификата на ПК с помощью групповых политик).
Одной из полезных возможностей командлета New-SelfSignedCertificate является возможность создать сертификат с несколькими различными именами Subject Alternative Names (SAN).
К примеру, создадим сертификат, у которого указаны следующие имена:
- Subject Name (CN): adfs1.contoso.com
- Subject Alternative Name (DNS): web_gw.contoso.com
- Subject Alternative Name (DNS): enterprise_reg.contoso.com
Команда создания сертификата будет такой:
New-SelfSignedCertificate -DnsName adfs1.contoso.com,web_gw.contoso.com,enterprise_reg.contoso.com -CertStoreLocation cert:\LocalMachine\My

New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname *.contoso.com
Создаем самоподписанный сертфикат типа Code Signing для подписывания кода
В PoweShell 3.0 командлет New-SelfSifgnedCertificate генерировал только SSL сертификаты, которые нельзя было использоваться для подписывания кода драйверов и приложений (в отличии сертификатов, генерируемых утилитой MakeCert).
В PowerShell 5 новая версия командлета New-SelfSifgnedCertificate теперь может использоваться для выпуска сертификатов типа Code Signing.
Для создания самоподписанного сертфиката для подписывания кода приложений, выполните команду:
$cert = New-SelfSignedCertificate -Subject «Cert for Code Signing” -Type CodeSigningCert -CertStoreLocation cert:\LocalMachine\My
Set-AuthenticodeSignature -FilePath C:\PS\test_script.ps1 -Certificate $cert
Если при выполнении команды появится предупреждение UnknownError, значит этот сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя.
Move-Item -Path $cert.PSPath -Destination «Cert:\CurrentUser\Root»
После этого вы можете подписать свой PowerShell скрипт с помощью данного самоподписанного сертификата.





