User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

citrix:создание-сертификата-для-контроллера-домена

Для нормальной работы в домене может понадобиться создать сертификат для контроллера домена.
На необходимость этого может указывать сообщение о ненайденных сертификатах при выполнении команды:

certutil -dcinfo verify

Создание сертификата для контроллера домена описано тут:
http://technet.microsoft.com/en-us/library/cc782583.aspx

Вкратце:

1. Берем скрипт vbs, переносим его на контроллер домена в отдельную папку, переходим в эту папку в командной строке и запускаем его в командной строке с правами администратора домена. Скрипт создаст файлы:

Set oArgs = WScript.Arguments 
Set oShell = WScript.CreateObject("WScript.Shell") 
' 
' Parse command line 
' 
if oArgs.Count < 1 then 
    sTemplateName = "DomainController" 
    sType = "E" 
else 
    if ((oArgs(0) = "-?") or (oARgs.Count < 2)) then 
        Wscript.Echo "Usage: reqdccert.vbs [Templatename] [Type]" 
        Wscript.Echo "[Templatename] is the name of a V2 template" 
        Wscript.Echo "[Type]         can be E for Email and A for Authentication certificate" 
        Wscript.Echo "If no option is specified, the DomainController certificate template is used." 
        Wscript.Quit 1 
    else 
        sTemplateName = oArgs(0) 
                sType = oArgs(1) 
    end if 
end if 
Set oFilesystem = CreateObject("Scripting.FileSystemObject") 
Set objSysInfo = CreateObject("ADSystemInfo") 
Set objDC = GetObject("LDAP://" & objSysInfo.ComputerName) 
sGUID = objDC.GUID 
sDNShostname = objDC.DNShostname 
sHostname = objDC.cn 
'############################################################################## 
' 
' Create the ASN.1 file 
' 
'############################################################################## 
Dim aASNsubstring(2, 5) 
Const HEX_DATA_LENGTH = 1 
Const ASCIIDATA = 2 
Const HEXDATA = 3 
Const HEX_BLOB_LENGTH = 4 
Const HEX_TYPE = 5 
aASNsubstring(0, ASCIIDATA) = sDNShostname 
aASNsubstring(0, HEX_TYPE) = "82" 
' 
' Convert DNS name into Hexadecimal 
' 
For i = 1 to Len(aASNsubstring(0, ASCIIDATA)) 
    aASNsubstring(0, HEXDATA) = aASNsubstring(0, HEXDATA) & _ 
                                    Hex(Asc(Mid(aASNsubstring(0, ASCIIDATA), i, 1^ 
Next 
aASNsubstring(0, HEX_DATA_LENGTH) = ComputeASN1 (Len(aASNsubstring(0, HEXDATA)) / 2) 
' 
' Build the ASN.1 blob for DNS name 
' 
sASN = aASNsubstring(0, HEX_TYPE) & _ 
       aASNsubstring(0, HEX_DATA_LENGTH) & _ 
       aASNsubstring(0, HEXDATA) 
' 
' Append the GUID as other name 
' 
if (sType = "E") then 
    aASNsubstring(1, HEXDATA) = sGUID 
    aASNsubstring(1, HEX_TYPE) = "A0" 
    aASNsubstring(1, HEX_DATA_LENGTH) = ComputeASN1 (Len(aASNsubstring(1, HEXDATA)) / 2) 
    sASN = sASN & _ 
           "A01F06092B0601040182371901" & _ 
           aASNsubstring(1, HEX_TYPE) & _ 
           "120410" & _ 
           aASNsubstring(1, HEXDATA) 
end if 
' 
' Write the ASN.1 blob into a file 
' 
Set oFile = oFilesystem.CreateTextFile(sHostname & ".asn") 
' 
' Put sequence, total length and ASN1 blob into the file 
' 
oFile.WriteLine "30" & ComputeASN1 (Len(sASN) / 2) & sASN 
oFile.Close 
'  
' Use certutil to convert the hexadecimal string into bin 
' 
oShell.Run "certutil -f -decodehex " & sHostname & ".asn " & _  
                                       sHostname & ".bin", 0, True 
'  
' Use certutil to convert the bin into base64 
' 
oShell.Run "certutil -f -encode " & sHostname & ".bin " & _ 
                                    sHostname & ".b64", 0, True 
'############################################################################## 
' 
' Create the INF file 
' 
'############################################################################## 
Set iFile = oFilesystem.OpenTextFile(sHostname & ".b64") 
Set oFile = oFilesystem.CreateTextFile(sHostname & ".inf") 
oFile.WriteLine "[Version]" 
oFile.WriteLine "Signature= " & Chr(34) & "$Windows NT$" & Chr(34) 
oFile.WriteLine "" 
oFile.WriteLine "[NewRequest]" 
oFile.WriteLine "KeySpec = 1" 
oFile.WriteLine "KeyLength = 1024" 
oFile.WriteLine "Exportable = TRUE" 
oFile.WriteLine "MachineKeySet = TRUE" 
oFile.WriteLine "SMIME = FALSE" 
oFile.WriteLine "PrivateKeyArchive = FALSE" 
oFile.WriteLine "UserProtected = FALSE" 
oFile.WriteLine "UseExistingKeySet = FALSE" 
oFile.WriteLine "ProviderName = " & Chr(34) & _ 
                "Microsoft RSA SChannel Cryptographic Provider" & Chr(34) 
oFile.WriteLine "ProviderType = 12" 
oFile.WriteLine "RequestType = PKCS10" 
oFile.WriteLine "KeyUsage = 0xa0" 
oFile.WriteLine "" 
oFile.WriteLine "[EnhancedKeyUsageExtension]" 
oFile.WriteLine "OID=1.3.6.1.5.5.7.3.1" 
oFile.WriteLine "OID=1.3.6.1.5.5.7.3.2" 
oFile.WriteLine ";" 
oFile.WriteLine "; The subject alternative name (SAN) can be included in the INF-file" 
oFile.WriteLine "; for a Windows 2003 CA." 
oFile.WriteLine "; You don't have to specify the SAN when submitting the request." 
oFile.WriteLine ";" 
oFile.WriteLine "[Extensions]" 
iLine = 0 
Do While iFile.AtEndOfStream <> True 
    sLine = iFile.Readline 
    If sLine = "-----END CERTIFICATE-----" then 
        Exit Do 
    end if 
    if sLine <> "-----BEGIN CERTIFICATE-----" then 
        if iLine = 0 then 
            oFile.WriteLine "2.5.29.17=" & sLine 
        else 
            oFile.WriteLine "_continue_=" & sLine 
        end if 
        iLine = iLine + 1 
    end if 
Loop 
oFile.WriteLine "Critical=2.5.29.17" 
oFile.WriteLine ";" 
oFile.WriteLine "; The template name can be included in the INF-file for any CA." 
oFile.WriteLine "; You don't have to specify the template when submitting the request." 
oFile.WriteLine ";" 
oFile.WriteLine ";[RequestAttributes]" 
oFile.WriteLine ";CertificateTemplate=" & sTemplateName 
oFile.Close 
iFile.Close 
'############################################################################## 
' 
' Create the certreq.exe command-line to submit the certificate request 
' 
'############################################################################## 
Set oFile = oFilesystem.CreateTextFile(sHostname & "-req.bat") 
oFile.WriteLine "CERTREQ -attrib " _ 
                 & Chr(34) & "CertificateTemplate:" & sTemplateName _ 
                 & Chr(34) & " " & sHostname & ".req" 
' 
' The GUID structure needs to be reconstructed. The GUID is read 
' as a string like f4aaa8576e6828418712b6ca89fbf5bc however the  
' format that is required for the certreq command looks like 
' 57a8aaf4-686e-4128-8712-b6ca89fbf5bc. The bytes are reordered 
' in the following way: 
' 
'                            11111111112222222222333  
'             Position 12345678901234567890123456789012 
'                      |------|--|--|--|--------------| 
' Original GUID:       f4aaa8576e6828418712b6ca89fbf5bc 
' 
'                            11 1 1111 1112 222222222333                
'             Position 78563412 1290 5634 7890 123456789012                     
'                      |------- |--- |--- |--- |----------| 
' Reformatted GUID:    57a8aaf4-686e-4128-8712-b6ca89fbf5bc 
' 
oFile.WriteLine "REM " 
oFile.WriteLine "REM !!! Only valid for Windows 2003 or later versions !!!" 
oFile.WriteLine "REM If you do not specify certificate extensions in the *.INF file" 
oFile.WriteLine "REM they can be specified here like the following example" 
oFile.WriteLine "REM " 
oFile.WriteLine "REM CERTREQ -submit -attrib " _ 
                 & Chr(34) & "CertificateTemplate:" & sTemplateName _ 
                 & "\n" _ 
                 & "SAN:guid=" _ 
                 & Mid(sGUID, 7, 2) _ 
                 & Mid(sGUID, 5, 2) _ 
                 & Mid(sGUID, 3, 2) _ 
                 & Mid(sGUID, 1, 2) & "-" _ 
                 & Mid(sGUID, 11, 2) _ 
                 & Mid(sGUID, 9, 2) & "-" _ 
                 & Mid(sGUID, 15, 2) _ 
                 & Mid(sGUID, 13, 2) & "-" _ 
                 & Mid(sGUID, 17, 4) & "-" _ 
                 & Mid(sGUID, 21, 12) _ 
                 & "&DNS=" & sDNShostname & Chr(34) & " " & sHostname & ".req" 
oFile.Close 
'############################################################################## 
' 
' Create the certificate verification script 
' 
'############################################################################## 
Set oFile = oFilesystem.CreateTextFile(sHostname & "-vfy.bat") 
oFile.WriteLine "certutil -viewstore " & Chr(34) & objDC.distinguishedname & _ 
                "?usercertificate" & chr(34) 
oFile.Close 
'############################################################################## 
' 
' Compute the ASN1 string 
' 
'############################################################################## 
Function ComputeASN1 (iStrLen) 
    If Len(Hex(iStrLen)) Mod 2 = 0 then 
        sLength = Hex(iStrLen) 
    else 
        sLength = "0" & Hex(iStrLen) 
    end if 
    if iStrLen > 127 then 
        ComputeASN1 = Hex (128 + (Len(sLength) / 2)) & sLength 
    else 
        ComputeASN1 = sLength 
    End If 
End Function

2. Затем создаем запрос к центру сертификации командой:

CERTREQ -new <dcname>.inf <dcname>.req

Запрос будет создан в файле <dcname>.req

3. Затем можно проверить запрос с помощью сгенеренного пакетного файла:

DC-STASUS-TK-vfy.bat

4. И наконец запросить сертификат в центре сертификации AD с помощью также сгенерированного файла:

DC-STASUS-TK-req.bat

Потом нужно выбрать центр сертификации у которого запросим сертификат.

Запрос сертификата появится в центре сертификации.
Сертификат надо выдать, экспортировать и установить.

Если все правильно сделано, то в ответ на команду

certutil -dcinfo verify

будут предоставлены сведения о сертификате контроллера домена.

Discussion

Enter your comment. Wiki syntax is allowed:
L L L T H
 
citrix/создание-сертификата-для-контроллера-домена.txt · Last modified: 2015/04/09 15:10 (external edit)