|
|
<%@ CODEPAGE=65001 'UTF-8%> <%' certrqma.asp - (CERT)srv web - (R)e(Q)uest, (M)ore (A)dvanced ' Copyright (C) Microsoft Corporation, 1998 - 1999 %> <!-- #include FILE=certsbrt.inc --> <!-- #include FILE=certdat.inc --> <% On Error Resume Next
' Exporting keys to a pvk file is only used by old code signing tools. ' (This is different from exporting both cert and keys in a pfx file.) ' Set this flag to true if you really need this functionality bEnableExportKeyToFile = True
Const CR_OUT_BASE64 =&H00000001 Const CR_PROP_CAEXCHGCERT=15 Const PROPTYPE_BINARY=3
' get CA exchange cert and save into this page Dim bFailed, nError Set ICertRequest2=Server.CreateObject("CertificateAuthority.Request") bFailed=False If "IE"=sBrowser Then Public sCAExchangeCert Dim sCertificate sCertificate=ICertRequest2.GetCAProperty(sServerConfig, CR_PROP_CAEXCHGCERT, 0, PROPTYPE_BINARY, CR_OUT_BASE64) sCAExchangeCert=FormatBigString(sCertificate, " sCAExchange=sCAExchange & ") End If
If Err.Number<>0 Then ' CA may be down. bFailed=True nError=Err.Number End If
'----------------------------------------------------------------- ' Format the big string as a concatenated VB string, breaking at the embedded newlines Function FormatBigString(sSource, sLinePrefix) Dim sResult, bCharsLeft, nStartChar, nStopChar, chQuote sResult="" chQuote=chr(34) bCharsLeft=True nStopChar=1
While (bCharsLeft) nStartChar=nStopChar nStopChar=InStr(nStopChar, sSource, vbNewLine)
If (nStopChar>0) Then sResult=sResult & sLinePrefix & chQuote & Mid(sSource, nStartChar, nStopChar-nStartChar) & chQuote & " & vbNewLine"
If (nStopChar>=Len(sSource)-Len(vbNewLine)) Then bCharsLeft=False End If
Else bCharsLeft=False End if sResult=sResult & vbNewLine nStopChar=nStopChar+Len(vbNewLine) Wend FormatBigString=sResult End Function %> <HTML> <Head> <Meta HTTP-Equiv="Content-Type" Content="text/html; charset=UTF-8"> <Title>Microsoft Certificate Services</Title> </Head> <%If True=bFailed Then %> <Body BgColor=#FFFFFF Link=#0000FF VLink=#0000FF ALink=#0000FF><Font ID=locPageFont Face="Arial"> <%Else%> <Body BgColor=#FFFFFF Link=#0000FF VLink=#0000FF ALink=#0000FF OnLoad="postLoad();"><Font ID=locPageFont Face="Arial"> <%End If%>
<Table Border=0 CellSpacing=0 CellPadding=4 Width=100% BgColor=#008080> <TR> <TD><Font Color=#FFFFFF><LocID ID=locMSCertSrv><Font Face="Arial" Size=-1><B><I>Microsoft</I></B> Certificate Services -- <%=sServerDisplayName%> </Font></LocID></Font></TD> <TD ID=locHomeAlign Align=Right><A Href="/certsrv"><Font Color=#FFFFFF><LocID ID=locHomeLink><Font Face="Arial" Size=-1><B>Home</B></Font></LocID></Font></A></TD> </TR> </Table>
<%If True=bFailed Then %> <P ID=locPageTitle1><Font Color=#FF0000><B>Error</B></Font> <!-- Green HR --><Table Border=0 CellSpacing=0 CellPadding=0 Width=100%><TR><TD BgColor=#008080><Img Src="certspc.gif" Alt="" Height=2 Width=1></TD></TR></Table>
<P ID=locErrorMsg> An unexpected error has occurred: <%If nError=&H800706BA Or nError=&H80070005 Then%> <LocID ID=locSvcNotStarted>The Certification Authority Service has not been started.</LocID> <%Else%> <%=ICertRequest.GetErrorMessageText(nError, CR_GEMT_HRESULT_STRING)%> <%End If%>
<%Else 'True<>bFailed%>
<Form Name=UIForm OnSubmit="goNext();return false;" Action="certlynx.asp" Method=Post> <Input Type=Hidden Name=SourcePage Value="certrqma">
<P ID=locPageTitle> <B> Advanced Certificate Request </B> <!-- Green HR --><Table Border=0 CellSpacing=0 CellPadding=0 Width=100%><TR><TD BgColor=#008080><Img Src="certspc.gif" Alt="" Height=2 Width=></TD></TR></Table>
<Span ID=spnFixTxt Style="display:none"> <Table Border=0 CellSpacing=0 CellPadding=4 Style="Color:#FF0000"><TR><TD ID=locBadCharError> <I>Please correct the fields marked in <B>RED</B>.</I> The e-mail address may contain the characters A-Z, a-z, 0-9, and some common symbols, but no extended characters. The country/region field must be a two letter ISO 3166 country/region code. </TD></TR></Table> </Span> <Span ID=spnErrorTxt Style="display:none"> <Table Border=0 CellSpacing=0 CellPadding=4 Style="Color:#FF0000"> <TR><TD ID=locErrMsgBasic> <B>An error occurred</B> while creating the certificate request. Please verify that your CSP supports any settings you have made and that your input is valid. </TD></TR><TR><TD> <LocID ID=locErrorCause><B>Suggested cause:</B></LocID><BR> <Span ID=spnErrorMsg></Span> </TD></TR><TR> <TD ID=locErrorNumber><Font Size=-2>Error: <Span ID=spnErrorNum></Span></Font></TD> </TR> </Table> </Span>
<Table Border=0 CellSpacing=0 CellPadding=0> <TR> <!-- establish column widths. --> <TD Width=<%=L_LabelColWidth_Number%>></TD> <!-- label column, top border --> <TD RowSpan=59 Width=4></TD> <!-- label spacing column --> <TD></TD> <!-- field column --> </TR> <%If "Enterprise"=sServerType Then%> <!-- Enterprise Options -->
<TR> <TD ID=locTemplateHead ColSpan=3><Font Size=-1><BR><B>Certificate Template:</B></Font></TD> </TR><TR><TD ColSpan=3 Height=2 BgColor=#008080></TD> </TR><TR><TD ColSpan=3 Height=6></TD> </TR><TR><TD></TD> <TD><Select Name=lbCertTemplate OnChange="handleTemplateChange();"> <% Dim nWriteTemplateResult nWriteTemplateResult=WriteTemplateList() %> </Select></TD> </TR>
<%End If '"Enterprise"=sServerType%> <TR><TD ColSpan=3> <%If "Enterprise"=sServerType Then%> <!-- Enterprise Options --> <Span ID=spnIDInfo Style="display:none"> <%End If '"Enterprise"=sServerType%> <Table Border=0 CellSpacing=0 CellPadding=0> <TR> <!-- establish column widths. --> <TD Width=<%=L_LabelColWidth_Number%>></TD> <!-- label column, top border --> <TD RowSpan=59 Width=4></TD> <!-- label spacing column --> <TD></TD> <!-- field column --> </TR>
<TR> <%If "StandAlone"=sServerType Then%> <TD ID=locIdentHeadStandAlone ColSpan=3><Font Size=-1><BR><B>Identifying Information:</B></Font></TD> </TR><TR><TD ColSpan=3 Height=2 BgColor=#008080></TD> <%Else%> <TD ID=locIdentHeadEnterprise ColSpan=3><Font Size=-1><BR><B>Identifying Information For Offline Template:</B></Font></TD> </TR><!--<TR><TD ColSpan=3 Height=2 BgColor=#008080></TD>--> <%End If%> </TR><TR><TD ColSpan=3 Height=6></TD> </TR><TR> <TD ID=locNameAlign Align=Right><Span ID=spnNameLabel><LocID ID=locNameLabel><Font Size=-1>Name:</Font></LocID></Span></TD> <TD><Input ID=locTbCommonName Type=Text MaxLength=64 Size=42 Name=tbCommonName></TD> </TR><TR> <TD ID=locEmailAlign Align=Right><Span ID=spnEmailLabel><LocID ID=locEmailLabel><Font Size=-1>E-Mail:</Font></LocID></Span></TD> <TD><Input ID=locTbEmail Type=Text MaxLength=128 Size=42 Name=tbEmail></TD> </TR><TR> <TD Height=8></TD> <TD></TD> </TR><TR> <TD ID=locCompanyAlign Align=Right><Span ID=spnCompanyLabel><LocID ID=locOrgLabel><Font Size=-1>Company:</Font></LocID></Span></TD> <TD><Input ID=locTbOrg Type=Text MaxLength=64 Size=42 Name=tbOrg Value="<%=sDefaultCompany%>"></TD> </TR><TR> <TD ID=locDepartmentAlign Align=Right><Span ID=spnDepartmentLabel><LocID ID=locOrgUnitLabel><Font Size=-1>Department:</Font></LocID></Span></TD> <TD><Input ID=locTbOrgUnit Type=Text MaxLength=64 Size=42 Name=tbOrgUnit Value="<%=sDefaultOrgUnit%>"></TD> </TR><TR> <TD Height=8></TD> <TD></TD> </TR><TR> <TD ID=locCityAlign Align=Right><Span ID=spnCityLabel><LocID ID=locLocalityLabel><Font Size=-1>City:</Font></LocID></Span></TD> <TD><Input ID=locTbLocality Type=Text MaxLength=128 Size=42 Name=tbLocality Value="<%=sDefaultLocality%>"></TD> </TR><TR> <TD ID=locStateAlign Align=Right><Span ID=spnStateLabel><LocID ID=locStateLabel><Font Size=-1>State:</Font></LocID></Span></TD> <TD><Input ID=locTbState Type=Text MaxLength=128 Size=42 Name=tbState Value="<%=sDefaultState%>"></TD> </TR><TR> <TD ID=locCountryAlign Align=Right><Span ID=spnCountryLabel><LocID ID=locCountryLabel><Font Size=-1>Country/Region:</Font></LocID></Span></TD> <TD><Input ID=locTbCountry Type=Text MaxLength=2 Size=2 Name=tbCountry Value="<%=sDefaultCountry%>"></TD> </TR>
</Table> <%If "Enterprise"=sServerType Then%> </Span> <%End If '"Enterprise"=sServerType%> </TD></TR>
<%If "StandAlone"=sServerType Then%> <!-- Stand-Alone Options -->
<TR> <TD ID=locEKUHead ColSpan=3><Font Size=-1><BR><B>Type of Certificate Needed:</B></Font></TD> </TR><TR><TD ColSpan=3 Height=2 BgColor=#008080></TD> </TR><TR><TD ColSpan=3 Height=6></TD> </TR><TR><TD></TD> <TD><Select Name=lbUsageOID OnChange="handleUsageOID(true);"> <Option ID=locCliAuthCert Selected Value="1.3.6.1.5.5.7.3.2"> Client Authentication Certificate <Option ID=locEmailCert Value="1.3.6.1.5.5.7.3.4"> E-Mail Protection Certificate <Option ID=locSrvAuthCert Value="1.3.6.1.5.5.7.3.1"> Server Authentication Certificate <Option ID=locCodeSgnCert Value="1.3.6.1.5.5.7.3.3"> Code Signing Certificate <Option ID=locTimStmpCert Value="1.3.6.1.5.5.7.3.8"> Time Stamp Signing Certificate <Option ID=locIPSecCert Value="1.3.6.1.5.5.8.2.2"> IPSec Certificate <Option ID=locUserEKUCert Value="**"> Other... </Select></TD> </TR>
<TR><TD ID=locEkuAlign Align=Right><Span ID=spnEKUOther1 Style="display:none"><LocID ID=locUserEKULabel><Font Size=-1>OID:</Font></LocID></Span></TD> <TD><Span ID=spnEKUOther2 Style="display:none"><Input ID=locTbEKUOther Type=Text Name=tbEKUOther Value="1.3.6.1.5.5.7.3."></Span></TD> </TR>
<%End If%> <!-- common -->
<TR> <TD ID=locKeyOptHead ColSpan=3><Font Size=-1><BR><B>Key Options:</B></Font></TD> </TR><TR><TD ColSpan=3 Height=2 BgColor=#008080></TD> </TR><TR><TD ColSpan=3 Height=6></TD> </TR>
<TR> <TD></TD> <TD><Font Size=-1> <Input Type=Radio ID=rbKG1 Name=rbKeyGen Value="0" OnClick="handleKeyGen();" Checked><Label For=rbKG1 ID=locNewKeyLabel>Create new key set</Label> <LocID ID=locSpc3> <LocID> <Input Type=Radio ID=rbKG2 Name=rbKeyGen Value="1" OnClick="handleKeyGen();"><Label For=rbKG2 ID=locExistKeyLabel>Use existing key set</Label> </Font></TD> </TR>
<TR><TD ColSpan=3 Height=4></TD></TR> <TR> <TD ID=locCSPLabel Align=Right><Font Size=-1>CSP:</Font></TD> <TD><Select Name=lbCSP OnChange="handleCSPChange();"> <Option ID=locLoading>Loading...</Option> </Select></TD> </TR> <TR ID=trBadCSPForKeySpec Style="display:none"> <TD></TD> <TD BgColor=#FFFFE0><LocID ID=locBadCSPForKeySpec><Font Size=-1><Span ID=spnBadCSPForKeySpecMsg></Span></Font></LocID></TD> </TR>
<TR><TD ColSpan=3 Height=4></TD></TR> <TR> <TD ID=locKeyUsageLabel Align=Right><Font Size=-1>Key Usage:</Font></TD> <TD><Font Size=-1> <Span ID=spnKeyUsageKeyExchange><Input Type=Radio ID=rbKU1 Name=rbKeyUsage Value="0" Checked OnClick="handleKeyUsageChange(false);"><Label For=rbKU1 ID=locKUExch>Exchange</Label><LocID ID=locSpc1> <LocID></Span> <Span ID=spnKeyUsageSignature><Input Type=Radio ID=rbKU2 Name=rbKeyUsage Value="1" OnClick="handleKeyUsageChange(false);"><Label For=rbKU2 ID=locKUSig>Signature</Label><LocID ID=locSpc2> <LocID></Span> <Span ID=spnKeyUsageBoth><Input Type=Radio ID=rbKU3 Name=rbKeyUsage Value="2" OnClick="handleKeyUsageChange(false);"><Label For=rbKU3 ID=locKUBoth>Both</Label></Span></Font></TD> </TR>
<TR><TD ColSpan=3 Height=4></TD></TR> <TR> <TD ID=locKeySizeLabel Align=Right ><Font Size=-1>Key Size:</Font></TD> <TD><Table Border=0 CellPadding=0 CellSpacing=0> <TR> <TD RowSpan=2><Input ID=locTbKeySize Type=Text Name=tbKeySize Value="0" MaxLength=5 Size=4 OnPropertyChange="handleKeySizeChange();"> </TD> <TD ID=locKeySizeMinLabel Align=Right><Font Size=-2>Min:</Font></TD> <TD ID=locKeySizeMin Align=Right><Font Size=-2><Span ID=spnKeySizeMin></Span></Font></TD> <TD ID=locKeySizeCommon RowSpan=2><Font Size=-2> (common key sizes: <Span ID=spnKeySizeCommon></Span>)</Font></TD> </TR><TR> <TD ID=locKeySizeMaxLabel Align=Right><Font Size=-2>Max:</Font></TD> <TD ID=locKeySizeMax Align=Right><Font Size=-2><Span ID=spnKeySizeMax></Span></Font></TD> </TR> </Table></TD> </TR> <TR ID=trKeySizeBad Style="display:none"> <TD></TD> <TD BgColor=#FFFFE0><LocID ID=locKeySizeBad><Font Size=-1><Span ID=spnKeySizeBadMsg></Span></Font></LocID></TD> </TR> <TR ID=trKeySizeBadSpc Style="display:none"><TD ColSpan=3 Height=4></TD></TR> <TR ID=trKeySizeWarn Style="display:none"> <TD></TD> <TD BgColor=#FFFFE0><LocID ID=locKeySizeWarning><Font Size=-1><I>Warning: Large keys can take many hours to generate!</I></Font></LocID></TD> </TR> <TR ID=trKeyGenWarn Style="display:none"> <TD></TD> <TD><LocID ID=locKeyGenWarning><Font Size=-1><I>A key of this size will be generated </I>only<I> if a key for the <BR> specified usage does not already exist in the specified container.</I></Font></LocID></TD> </TR>
<TR ID=trGenContNameSpc><TD ColSpan=3 Height=4></TD></TR> <TR ID=trGenContName> <TD></TD> <TD><Font Size=-1> <Input Type=Radio ID=rbGCN1 Name=rbGenContName Value="0" OnClick="handleGenContName();" Checked><Label For=rbGCN1 ID=locAutoContNameLabel>Automatic key container name</Label> <LocID ID=locSpc4> <LocID> <Input Type=Radio ID=rbGCN2 Name=rbGenContName Value="1" OnClick="handleGenContName();"><Label For=rbGCN2 ID=locUserContNameLabel>User specified key container name</Label> </Font></TD> </TR>
<TR ID=trContNameSpc><TD ColSpan=3 Height=4></TD></TR> <TR ID=trContName Style="display:none"> <TD ID=locContainerNameLabel Align=Right><Font Size=-1>Container Name:</Font></TD> <TD><Font Size=-1><Input ID=locTbContainerName Type=Text Name=tbContainerName Size=20></Font></TD> </TR>
<TR ID=trMarkExportSpc><TD ColSpan=3 Height=4></TD></TR> <TR ID=trMarkExport><TD></TD> <TD><Font Size=-1><Input Type=Checkbox Name=cbMarkKeyExportable ID=cbMarkKeyExportable OnClick="handleMarkExport();"><Label For=cbMarkKeyExportable ID=locMarkExportLabel>Mark keys as exportable</Label> <%If bEnableExportKeyToFile Then%> <Span ID=spnMarkKeyExportable Style="display:none"> <BR><Img Src="certspc.gif" Alt="" Height=1 Width=25><Input Type=Checkbox Name=cbExportKeys ID=cbExportKeys OnClick="handleExportKeys();"><Label For=cbExportKeys ID=locExportToFileLabel>Export keys to file</Label> <Span ID=spnExportKeys Style="display:none"> <BR><Img Src="certspc.gif" Alt="" Height=1 Width=25><LocID ID=locExpFileNameLabel>Full path name:</LocID> <Input ID=locTbExportKeyFile Type=Text Name=tbExportKeyFile Size=20 Value="*.pvk"> </Span> </Span> <%End If%> </Font></TD> </TR>
<TR ID=trStrongKeySpc><TD ColSpan=3 Height=4></TD></TR> <TR ID=trStrongKey> <TD></TD> <TD><Font Size=-1><Input Type=Checkbox ID=cbStrongKey Name=cbStrongKey OnClick="handleStrongKeyAndLMStore();"><Label For=cbStrongKey ID=locStrongKeyLabel>Enable strong private key protection</Label></Font></TD> </TR>
<TR ID=trLMStoreSpc><TD ColSpan=3 Height=4></TD></TR> <TR ID=trLMStore><TD></TD> <TD><Font Size=-1><Input Type=Checkbox Name=cbLocalMachineStore ID=cbLocalMachineStore OnClick="handleStrongKeyAndLMStore();"><Label For=cbLocalMachineStore ID=locLMStoreLabel>Use local machine store</Label><BR> <LocID ID=locAdminWarning><Img Src="certspc.gif" Alt="" Height=1 Width=25><I>You must be an administrator to generate or use<BR> <Img Src="certspc.gif" Alt="" Height=1 Width=25> a key in the local machine store.</I></Font></LocID></TD> </TR>
<TR> <TD ID=locAddOptHead ColSpan=3><Font Size=-1><BR><B>Additional Options:</B></Font></TD> </TR><TR><TD ColSpan=3 Height=2 BgColor=#008080></TD> </TR><TR><TD ColSpan=3 Height=3></TD> </TR>
<TR><TD ColSpan=3 Height=6></TD></TR> <TR> <TD ID=locRequestFormatLabel Align=Right><Font Size=-1>Request Format:</Font></TD> <TD> <Input Type=Radio ID=rbFormatCMC Name=rbRequestFormat Value="0" Checked><Label For=rbFormatCMC ID=locFormatCMCLabel>CMC</Label> <LocID ID=locSpc5> <LocID> <Input Type=Radio ID=rbFormatPKCS10 Name=rbRequestFormat Value="1"><Label For=rbFormatPKCS10 ID=locFormatPKCS10Label>PKCS10</Label> </TD> </TR> <TR><TD ColSpan=3 Height=4></TD></TR>
<TR><TD ColSpan=3 Height=4></TD></TR> <TR> <TD ID=locHashAlgLabel Align=Right><Font Size=-1>Hash Algorithm:</Font></TD> <TD><Select Name=lbHashAlgorithm></Select></TD> </TR> <TR><TD></TD><TD ID=locHashAlgWarning><Font Size=-1><I>Only used to sign request.</I></Font></TD></TR>
<TR><TD ColSpan=3 Height=8></TD></TR> <TR><TD></TD> <TD><Font Size=-1><Input Type=Checkbox Name=cbSaveRequest ID=cbSaveRequest OnClick="handleSaveReq();"><Label For=cbSaveRequest ID=locSaveReqLabel>Save request to a file</Label> <Span ID=spnSaveRequest Style="display:none"> <BR><Img Src="certspc.gif" Alt="" Height=1 Width=25><LocID ID=locReqFileNameLabel>Full path name:</LocID> <Input ID=locTbSaveReqFile Type=Text Name=tbSaveReqFile Size=20> <BR><Img Src="certspc.gif" Alt="" Height=1 Width=25><LocID ID=locSaveReqWarning><B>This request will be saved and not submitted.</B></LocID> </Span> </Font></TD> </TR>
<TR><TD ColSpan=3 Height=6></TD> </TR><TR> <TD ID=locAttribLabel Align=Right><Font Size=-1><Span ID=spnSubmitAttrLable>Attributes:</Span></Font></TD> <TD><Span ID=spnSubmitAttrBox><TextArea ID=locTaAttrib Name=taAttrib Wrap=Off Rows=2 Cols=30></TextArea></SPan></TD> </TR>
<TR><TD ColSpan=3 Height=6></TD> </TR><TR> <TD ID=locFriendlyNameLabel Align=Right><Font Size=-1>Friendly Name:</Font></TD> <TD><Font Size=-1><Input ID=locTbFriendlyName Type=Text Name=tbFriendlyName Size=20></Font></TD> </TR>
<TR><TD ColSpan=3><Font Size=-1><BR></Font></TD></TR> <TR><TD ColSpan=3 Height=2 BgColor=#008080></TD></TR> <TR><TD ColSpan=3 Height=3></TD></TR> <TR> <TD></TD> <TD ID=locSubmitAlign Align=Right> <Input ID=locBtnSubmit Type=Submit Name=btnSubmit Value="Submit >" Style="width:.75in"> <Input ID=locBtnSave Type=Submit Name=btnSave Value="Save" Style="width:.75in; display:none"> </TD> </TR> <TR><TD ColSpan=3 Height=20></TD></TR>
</Table> </P>
<!-- Green HR --><Table Border=0 CellSpacing=0 CellPadding=0 Width=100%><TR><TD BgColor=#008080><Img Src="certspc.gif" Alt="" Height=2 Width=1></TD></TR></Table> <!-- White HR --><Table Border=0 CellSpacing=0 CellPadding=0 Width=100%><TR><TD BgColor=#FFFFFF><Img Src="certspc.gif" Alt="" Height=5 Width=1></TD></TR></Table>
</Form> </Font> <!-- ############################################################ --> <!-- End of standard text. Scripts follow --> <%bIncludeXEnroll=True%> <%bIncludeGetCspList=True%> <%bIncludeTemplateCode=True%> <%bIncludeCheckClientCode=True%> <!-- #include FILE=certsgcl.inc -->
<!-- This form we fill in and submit 'by hand'--> <Span Style="display:none"> <Form Name=SubmittedData Action="certfnsh.asp" Method=Post> <Input Type=Hidden Name=Mode> <!-- used in request ('newreq'|'chkpnd') --> <Input Type=Hidden Name=CertRequest> <!-- used in request --> <Input Type=Hidden Name=CertAttrib> <!-- used in request --> <Input Type=Hidden Name=FriendlyType> <!-- used on pending --> <Input Type=Hidden Name=ThumbPrint> <!-- used on pending --> <Input Type=Hidden Name=TargetStoreFlags> <!-- used on install ('0'|CSSLM)--> <Input Type=Hidden Name=SaveCert> <!-- used on install ('no'|'yes')--> </FORM> </Span>
<Script Language="JavaScript">
//================================================================ // PAGE GLOBAL VARIABLES
//---------------------------------------------------------------- // Strings to be localized var L_CspLoadErrNoneFound_ErrorMessage="An unexpected error occurred while getting the CSP list:\nNo CSPs could be found!"; var L_CspLoadErrUnexpected_ErrorMessage="\"An unexpected error (\"+sErrorNumber+\") occurred while getting the CSP list.\""; var L_SetKeySize_Message="\"Set key size to \"+nKeySize"; var L_WarningTemplateKeySize_Message="\"You may have selected a certificate type that requires a minimum key size of \" + nKeySize + \" which is larger than the current maximum.\\nPlease select a different CSP or key usage.\""; var L_RecommendOneKeySize_Message="\"\"+nKeySize+\" is a bad key size. The closest valid key size is \"+sCloseBelow+\".\""; var L_RecommendTwoKeySizes_Message="\"\"+nKeySize+\" is a bad key size. The closest valid key sizes are \"+sCloseBelow+\" and \"+sCloseAbove+\".\""; var L_StillLoading_ErrorMessage="This page has not finished loading yet. Please wait a few seconds and try again."; var L_KeySizeNotNumber_ErrorMessage="Please enter a number for the key size."; var L_KeySizeBadNumber_ErrorMessage="\"Please enter a valid number for the key size. The key size must be\\nbetween \"+g_nCurKeySizeMin+\" and \"+g_nCurKeySizeMax+\", and be a multiple of \"+g_nCurKeySizeInc+\".\""; var L_CSPNotSupportTemplateKeySpec_Message="\"You may have selected a CSP that does not support the certificate key type. Please select either different CSP or certificate template.\""; var L_TemplateKeySizeTooBig_ErrorMessage = "\"The certificate type you selected requires minimum key size of \" + g_nCurTemplateKeySizeMin + \".\\nIt is bigger than the maximum size of \" + g_nCurKeySizeMax + \".\\nPlease change the number or select a different CSP.\""; var L_NoCntnrName_ErrorMessage="Please enter a key container name."; var L_BadOid_ErrorMessage="Please enter a valid OID, or choose a predefined certificate type.\nMultiple OIDs must be separated with a comma."; var L_NoExportFileName_ErrorMessage="Please enter a file name for exporting the keys."; var L_NoSaveReqFileName_ErrorMessage="Please enter a file name for saving the request."; var L_Generating_Message="Generating request..."; var L_UserEKUCert_Text="\"User-EKU (\"+sCertUsage+\") Certificate\""; var L_RequestSaved_Message="Request saved to file."; var L_Waiting_Message="Waiting for server response..."; var L_ErrNameUnknown_ErrorMessage="(unknown)"; var L_SugCauseNone_ErrorMessage="No suggestion."; var L_SugCauseBadCSP_ErrorMessage="The CSP you chose was unable to process the request. Try a different CSP."; var L_SugCauseBadSetting2_ErrorMessage="The CSP you chose does not support one or more of the settings you have made, such as key size, key spec, hash algorithm, etc. Try using different settings or a different CSP."; var L_SugCauseBadKeyContainer_ErrorMessage="Either the key container you specified does not exist, or the CSP you chose was unable to process the request. Enter the name of an existing key container; choose 'Create new keyset'; or try a different CSP."; var L_SugCauseExistKeyContainer_ErrorMessage="The container you named already exists. When creating a new key, you must use a new container name."; var L_SugCauseBadChar_ErrorMessage="You entered an invalid character. Report a bug, because this should have been caught in validation."; var L_SugCauseBadHash_ErrorMessage="The hash algorithm you selected cannot be used for signing. Please select a different hash algorithm."; var L_SugCauseNoFileName_ErrorMessage="You did not enter a file name."; var L_ErrNameNoFileName_ErrorMessage="(no file name)"; var L_SugCauseNotAdmin_ErrorMessage="You must be an administrator to generate a key in the local machine store."; var L_ErrNamePermissionDenied_ErrorMessage="Permission Denied"; var L_SugCausePermissionToWrite_ErrorMessage = "You do not have write permission to save the file to the path"; var L_SugCauseBadFileName_ErrorMessage="The file name you specified is not a valid file name. Try a different file name."; var L_SugCauseBadDrive_ErrorMessage="The drive you specified is not ready. Insert a disk in the drive or try a different file name."; var L_DownLevelClients_ErrorMessage="This error can be caused by requesting Key Archival for the new private key, which may not be supported on this platform."; var L_SCARD_E_NO_MEMORY_MSG="Not enough memory available to complete this command."; var L_SCARD_F_WAITED_TOO_LONG="An internal consistency timer has expired."; var L_SCARD_E_INSUFFICIENT_BUFFER="The data buffer to receive returned data is too small for the returned data."; var L_SCARD_E_UNKNOWN_READER="The specified reader name is not recognized."; var L_SCARD_E_NO_SMARTCARD="The operation requires a Smart Card, but no Smart Card is currently in the device."; var L_SCARD_E_UNKNOWN_CARD="The specified smart card name is not recognized."; var L_SCARD_E_NOT_READY="The reader or smart card is not ready to accept commands."; var L_SCARD_F_COMM_ERROR="An internal communications error has been detected."; var L_SCARD_E_NO_SERVICE="The Smart card resource manager is not running."; var L_SCARD_E_SERVICE_STOPPED="The Smart card resource manager has shut down."; var L_SCARD_E_NO_READERS_AVAILABLE="Cannot find a smart card reader."; var L_SCARD_E_COMM_DATA_LOST="A communications error with the smart card has been detected. Retry the operation."; var L_SCARD_E_NO_KEY_CONTAINER="The requested key container does not exist on the smart card."; var L_SCARD_W_UNPOWERED_CARD="Power has been removed from the smart card, so that further communication is not possible."; var L_SCARD_W_REMOVED_CARD="The smart card has been removed, so that further communication is not possible."; var L_SCARD_W_WRONG_CHV="The card cannot be accessed because the wrong PIN was presented."; var L_SCARD_W_CHV_BLOCKED="The card cannot be accessed because the maximum number of PIN entry attempts has been reached."; var L_SCARD_W_EOF="The end of the smart card file has been reached."; var L_SCARD_W_CANCELLED_BY_USER="The action was cancelled by the user."; var L_SCARD_W_CARD_NOT_AUTHENTICATED="No PIN was presented to the smart card.";
<%If "Enterprise"=sServerType Then%> ; var L_TemplateLoadErrNoneFound_ErrorMessage="No certificate templates could be found. You do not have permission to request a certificate from this CA, or an error occurred while accessing the Active Directory."; var L_TemplateLoadErrUnexpected_ErrorMessage="\"An unexpected error (\"+sErrorNumber+\") occurred while getting the certificate template list.\""; var L_TemplateCert_Text="sRealName+\" Certificate\""; <%End If%>
// IE is not ready until XEnroll has been loaded var g_bOkToSubmit=false; var g_bSubmitPending=false;
// some constants defined in wincrypt.h: var CRYPT_EXPORTABLE=1; var CRYPT_USER_PROTECTED=2; var CRYPT_MACHINE_KEYSET=0x20; var AT_KEYEXCHANGE=1; var AT_SIGNATURE=2; var CERT_SYSTEM_STORE_LOCATION_SHIFT=16; var CERT_SYSTEM_STORE_LOCAL_MACHINE_ID=2; var CERT_SYSTEM_STORE_LOCAL_MACHINE=CERT_SYSTEM_STORE_LOCAL_MACHINE_ID << CERT_SYSTEM_STORE_LOCATION_SHIFT; var ALG_CLASS_ANY=0 var ALG_CLASS_SIGNATURE=1<<13; var ALG_CLASS_HASH=4<<13; var PROV_DSS=3; var PROV_DSS_DH=13; var PROV_DH_SCHANNEL=18;
// convenience constants, for readability var KEY_USAGE_EXCH=0; var KEY_USAGE_SIG=1; var KEY_USAGE_BOTH=2;
var XEKL_KEYSIZE_MIN=1; var XEKL_KEYSIZE_MAX=2; var XEKL_KEYSIZE_INC=3; var XEKL_KEYSIZE_DEFAULT=4; var XEKL_KEYSPEC_KEYX=1; var XEKL_KEYSPEC_SIG=2;
// defaults var KEY_LEN_MIN_DEFAULT=384; var KEY_LEN_MAX_DEFAULT=16384; var KEY_LEN_MY_DEFAULT=1024; var KEY_LEN_INC_DEFAULT=8;
// for key size var g_nCurKeySizeMax; var g_nCurKeySizeMin; var g_nCurKeySizeDefault; var g_nCurKeySizeInc; var g_bCSPUpdate;
var g_nCurTemplateKeySizeMin = 0; //init to 0
var XECR_PKCS10_V2_0=1; var XECR_PKCS7=2; var XECR_CMC=3;
var XECT_EXTENSION_V1=1; var XECT_EXTENSION_V2=2;
//================================================================ // INITIALIZATION ROUTINES
function removeV2KATemplate() { var CT_FLAG_ALLOW_PRIVATE_KEY_ARCHIVAL=0x00000001; //downlevel machines, no V2 templates with KA var nTemplateCount = document.UIForm.lbCertTemplate.length; var n, sTemplate, sCTEOID; for (n = nTemplateCount - 1; n > -1 ; --n) { sTemplate = document.UIForm.lbCertTemplate.options[n].value; sCTEOID = getTemplateStringInfo(CTINFO_INDEX_EXTOID, sTemplate); var lFlags=getTemplateValueInfo(CTINFO_INDEX_PRIVATEKEYFLAG, sTemplate); if ("" != sCTEOID && 0x0 != (lFlags & CT_FLAG_ALLOW_PRIVATE_KEY_ARCHIVAL)) { //v2 template with KA document.UIForm.lbCertTemplate.options.remove(n); } } }
//---------------------------------------------------------------- // This contains the functions we want executed immediately after load completes function postLoad() { // Load an XEnroll object into the page loadXEnroll("postLoadPhase2()"); handleSaveReq(); handleCMCFormat(); <%If "Enterprise"=sServerType Then%> if (!isClientAbleToCreateCMC()) { //downlevel machines removeV2KATemplate(); } <%End If%> } function postLoadPhase2() { // continued from above var nResult;
// get the CSP list nResult=GetCSPList(); if (0!=nResult) { handleLoadError(nResult, L_CspLoadErrNoneFound_ErrorMessage, L_CspLoadErrUnexpected_ErrorMessage); return; }
<%If "StandAlone"<>sServerType And 0<>nWriteTemplateResult Then%> handleLoadError(<%=nWriteTemplateResult%>, L_TemplateLoadErrNoneFound_ErrorMessage, L_TemplateLoadErrUnexpected_ErrorMessage); return; <%End If%>
// Now we're ready to go g_bOkToSubmit=true;
<%If "Enterprise"=sServerType Then%> handleTemplateChange(); <%Else%> handleCSPChange(); <%End If%> // dynamic styles are not preserved so // make sure dynamic UI is updated after 'back' handleKeyGen(); handleMarkExport(); handleExportKeys(); <%If "StandAlone"=sServerType Then%> handleUsageOID(false); <%End If%> }
//---------------------------------------------------------------- // handle errors from GetCSPList() and GetTemplateList() function handleLoadError(nResult, sNoneFound, sUnexpected) { if (-1==nResult) { alert(sNoneFound); } else { var sErrorNumber="0x"+toHex(nResult); alert(eval(sUnexpected)); } disableAllControls(); }
//================================================================ // PAGE MANAGEMENT ROUTINES
<%If "StandAlone"=sServerType Then%> //---------------------------------------------------------------- // handle the appearance of the text box when 'other...' is selected function handleUsageOID(bFocus) { if ("**"==document.UIForm.lbUsageOID.options[document.UIForm.lbUsageOID.selectedIndex].value) { spnEKUOther1.style.display=''; spnEKUOther2.style.display=''; if (bFocus) { document.UIForm.lbUsageOID.blur(); document.UIForm.tbEKUOther.select(); document.UIForm.tbEKUOther.focus(); } } else { spnEKUOther1.style.display='none'; spnEKUOther2.style.display='none'; } } <%End If%>
<%If "Enterprise"=sServerType Then%> //----------------------------------------------------------------
function getTemplateValueInfo(nIndex, sTemplate) { var sValue=getTemplateStringInfo(nIndex, sTemplate); return parseInt(sValue); }
// handle a change in the current template function isDNNeeded() { var sValue=getTemplateStringInfo(CTINFO_INDEX_OFFLINE, null); if ("O"==sValue) { //offline template needs DN return true; }
//check template subject flag var lSubjectFlag = getTemplateValueInfo(CTINFO_INDEX_SUBJECTFLAG, null); var CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT=0x00000001; return (0x0 != (lSubjectFlag & CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT)); }
function isTemplateKeyArchival() { var CT_FLAG_ALLOW_PRIVATE_KEY_ARCHIVAL=0x00000001; var lFlags=getTemplateValueInfo(CTINFO_INDEX_PRIVATEKEYFLAG, null); return (0x0 != (lFlags & CT_FLAG_ALLOW_PRIVATE_KEY_ARCHIVAL)); }
function isSMimeCapabilities() { var CT_FLAG_INCLUDE_SYMMETRIC_ALGORITHMS=0x00000001; var lFlags=getTemplateValueInfo(CTINFO_INDEX_ENROLLFLAG, null); return (0x0 != (lFlags & CT_FLAG_INCLUDE_SYMMETRIC_ALGORITHMS)); }
function getTemplateMinKeySize() { var lKeyFlags = getTemplateValueInfo(CTINFO_INDEX_KEYFLAG, null); return (lKeyFlags & 0xFFFF0000) >> 16; }
function updateCSPList() { //get csp list separated from template data var sCSPList = getTemplateStringInfo(CTINFO_INDEX_CSPLIST, null); if ("" != sCSPList) { updateCSPListFromStrings(sCSPList); } else { //remove current csps from list //strange reasons this remove code can't be in GetCSPList var n; var nCSP = document.UIForm.lbCSP.length; for (n = 0; n < nCSP-1; ++n) { document.UIForm.lbCSP.remove(0); } GetCSPList(); } }
//---------------------------------------------------------------- // handle a change in the current template function handleTemplateChange() { if (false==isDNNeeded()) { spnIDInfo.style.display="none"; } else { spnIDInfo.style.display=""; }
//update csp list from the template updateCSPList(); handleCSPChange();
//handle key spec var lKeySpec = getTemplateValueInfo(CTINFO_INDEX_KEYSPEC, null); var fDisabled = true; if ((0x0 != (AT_KEYEXCHANGE & lKeySpec)) && (0x0 != (AT_SIGNATURE & lKeySpec)) ) { document.UIForm.rbKeyUsage[KEY_USAGE_BOTH].checked=true; } else if (0x0 != (AT_KEYEXCHANGE & lKeySpec)) { document.UIForm.rbKeyUsage[KEY_USAGE_EXCH].checked=true; } else if (0x0 != (AT_SIGNATURE & lKeySpec)) { document.UIForm.rbKeyUsage[KEY_USAGE_SIG].checked=true; } else { document.UIForm.rbKeyUsage[KEY_USAGE_BOTH].checked=true; fDisabled = false; } document.UIForm.rbKeyUsage[KEY_USAGE_BOTH].disabled=fDisabled; document.UIForm.rbKeyUsage[KEY_USAGE_EXCH].disabled=fDisabled; document.UIForm.rbKeyUsage[KEY_USAGE_SIG].disabled=fDisabled;
//update exportable control var lPrivateKeyFlags = getTemplateValueInfo(CTINFO_INDEX_PRIVATEKEYFLAG, null); var CT_FLAG_EXPORTABLE_KEY = 0x10; document.UIForm.cbMarkKeyExportable.checked = (0x0 != (lPrivateKeyFlags & CT_FLAG_EXPORTABLE_KEY)); handleMarkExport();
//update template min key size g_nCurTemplateKeySizeMin = getTemplateMinKeySize();
//update key size handleKeyUsageChange(false);
//update CMC related handleCMCFormat();
var lRASignatures = getTemplateValueInfo(CTINFO_INDEX_RASIGNATURE, null); var fSave = 0 < lRASignatures; //enforce save to file, can't submit if signing document.UIForm.cbSaveRequest.checked = fSave; document.UIForm.cbSaveRequest.disabled = fSave; handleSaveReq();
} <%End If%>
//---------------------------------------------------------------- // handle a change in the current CSP function handleCSPChange() {
if (0 == document.UIForm.lbCSP.length) { //no csp, disable submit button document.UIForm.btnSubmit.disabled = true; return; } else { document.UIForm.btnSubmit.disabled = false; } var nCSPIndex=document.UIForm.lbCSP.selectedIndex; XEnroll.ProviderName=document.UIForm.lbCSP.options[nCSPIndex].text; var nProvType=document.UIForm.lbCSP.options[nCSPIndex].value; XEnroll.ProviderType=nProvType; <%If "Enterprise"=sServerType Then%> var nTemplateKeySpec = getTemplateValueInfo(CTINFO_INDEX_KEYSPEC, null); <%End If%>
// update the key spec options. If we support both, default to key exchange var nSupportedKeyUsages=XEnroll.GetSupportedKeySpec(); if (0==nSupportedKeyUsages) { nSupportedKeyUsages=AT_SIGNATURE | AT_KEYEXCHANGE; } if (PROV_DSS==nProvType || PROV_DSS_DH==nProvType || PROV_DH_SCHANNEL==nProvType) { nSupportedKeyUsages=AT_SIGNATURE; }
<%If "Enterprise"=sServerType Then%> if (0==nTemplateKeySpec) { nTemplateKeySpec=AT_SIGNATURE | AT_KEYEXCHANGE; } nSupportedKeyUsages = nTemplateKeySpec & nSupportedKeyUsages; <%End If%>
if (0 == nSupportedKeyUsages) { spnBadCSPForKeySpecMsg.innerHTML=eval(L_CSPNotSupportTemplateKeySpec_Message); trBadCSPForKeySpec.style.display=""; } else { trBadCSPForKeySpec.style.display="none"; }
if (nSupportedKeyUsages&AT_SIGNATURE) { spnKeyUsageSignature.style.display=""; document.UIForm.rbKeyUsage[KEY_USAGE_SIG].checked=true; } else { spnKeyUsageSignature.style.display="none"; }
if (nSupportedKeyUsages&AT_KEYEXCHANGE) { spnKeyUsageKeyExchange.style.display=""; document.UIForm.rbKeyUsage[KEY_USAGE_EXCH].checked=true; } else { spnKeyUsageKeyExchange.style.display="none"; }
if ((AT_SIGNATURE|AT_KEYEXCHANGE)==nSupportedKeyUsages) { spnKeyUsageBoth.style.display=""; document.UIForm.rbKeyUsage[KEY_USAGE_BOTH].checked=true; } else { spnKeyUsageBoth.style.display="none"; }
handleKeyUsageChange(true); UpdateHashAlgList(nProvType); }
//---------------------------------------------------------------- // two cases invoke handleKeyUsageChange: // 1) csp selection change // 2) exchange vs. signature change function handleKeyUsageChange(bCSPChange) { // get the min, max, and default length from the CSP var bExchange=document.UIForm.rbKeyUsage[KEY_USAGE_EXCH].checked || document.UIForm.rbKeyUsage[KEY_USAGE_BOTH].checked ;
g_nCurKeySizeMax=MyGetKeyLen(XEKL_KEYSIZE_MAX, bExchange); g_nCurKeySizeMin=MyGetKeyLen(XEKL_KEYSIZE_MIN, bExchange); <%If "Enterprise"=sServerType Then%> if (0 != g_nCurTemplateKeySizeMin) { g_nCurKeySizeMin=Math.max(g_nCurKeySizeMin, g_nCurTemplateKeySizeMin); } <%End If%> g_nCurKeySizeDefault=MyGetKeyLen(XEKL_KEYSIZE_DEFAULT, bExchange); g_nCurKeySizeInc=MyGetKeyLen(XEKL_KEYSIZE_INC, bExchange);
// set to default lenth if ("0"==document.UIForm.tbKeySize.value || true == bCSPChange) { //"0" likely init load or typed in, not bad go default // or csp changed, set to default length document.UIForm.tbKeySize.value = g_nCurKeySizeDefault; }
// show the min and max spnKeySizeMin.innerText=g_nCurKeySizeMin; spnKeySizeMax.innerText=g_nCurKeySizeMax;
// keep the key size in bounds var nKeySize=parseInt(document.UIForm.tbKeySize.value); if (isNaN(nKeySize) || nKeySize>g_nCurKeySizeMax) { document.UIForm.tbKeySize.value=g_nCurKeySizeMax; } else if (nKeySize<g_nCurKeySizeMin) { //> document.UIForm.tbKeySize.value=g_nCurKeySizeMin; }
// update list of valid common key sizes var nPowerSize=128; var sCommonKeys=""; while (nPowerSize<g_nCurKeySizeMin) { //> nPowerSize*=2; } while (nPowerSize<=g_nCurKeySizeMax) { sCommonKeys+=getKeySizeLinkHtmlString(nPowerSize)+" "; nPowerSize*=2; } spnKeySizeCommon.innerHTML=sCommonKeys; handleKeySizeChange(); }
//---------------------------------------------------------------- function getKeySizeLinkHtmlString(nKeySize) { return "<Span tabindex=0 Style=\"cursor:hand; color:#0000FF; text-decoration:underline;\"" +" OnContextMenu=\"return false;\"" +" OnMouseOver=\"window.status='"+eval(L_SetKeySize_Message)+"';return true;\"" +" OnMouseOut=\"window.status='';return true;\"" +" OnMouseUp=\"window.status='"+eval(L_SetKeySize_Message)+"';return true;\"" +" OnKeyDown=\"if (13==event.keyCode) {document.UIForm.tbKeySize.value='"+nKeySize+"';blur();return false;} else if (9==event.keyCode) {return true;};return false;\"" +" OnClick=\"document.UIForm.tbKeySize.value='"+nKeySize+"';blur();return false;\">" +nKeySize+"</Span>"; }
//---------------------------------------------------------------- // morphing routine function handleSaveReq() { if (document.UIForm.cbSaveRequest.checked) { spnSaveRequest.style.display=''; document.UIForm.btnSubmit.style.display='none'; document.UIForm.btnSave.style.display=''; spnSubmitAttrLable.style.display='none'; spnSubmitAttrBox.style.display='none'; } else { spnSaveRequest.style.display='none'; document.UIForm.btnSubmit.style.display=''; document.UIForm.btnSave.style.display='none'; spnSubmitAttrLable.style.display=''; spnSubmitAttrBox.style.display=''; } }
//---------------------------------------------------------------- // morphing routine function handleMarkExport() { <%If bEnableExportKeyToFile Then%> if (document.UIForm.cbMarkKeyExportable.checked) { spnMarkKeyExportable.style.display=''; } else { spnMarkKeyExportable.style.display='none'; } <%End If%> }
//---------------------------------------------------------------- // morphing routine function handleExportKeys() { <%If bEnableExportKeyToFile Then%> if (document.UIForm.cbExportKeys.checked) { spnExportKeys.style.display=''; } else { spnExportKeys.style.display='none'; } <%End If%> }
//---------------------------------------------------------------- // morphing routine function handleKeyGen() { if (document.UIForm.rbKeyGen[0].checked) { // create new keyset trGenContName.style.display=''; trGenContNameSpc.style.display=''; trKeyGenWarn.style.display='none';
handleGenContName(); handleStrongKeyAndLMStore();
trMarkExport.style.display=''; trMarkExportSpc.style.display=''; } else { // Use existing key set trGenContName.style.display='none'; trGenContNameSpc.style.display='none'; trKeyGenWarn.style.display='';
handleGenContName(); handleStrongKeyAndLMStore();
document.UIForm.cbMarkKeyExportable.checked=false; trMarkExport.style.display='none'; trMarkExportSpc.style.display='none'; } }
//---------------------------------------------------------------- // morphing routine function handleGenContName() { if (document.UIForm.rbGenContName[0].checked && document.UIForm.rbKeyGen[0].checked) { trContName.style.display='none'; trContNameSpc.style.display='none'; } else { trContName.style.display=''; trContNameSpc.style.display=''; } }
//---------------------------------------------------------------- // morphing routine function handleSetContainer() { if (document.UIForm.cbSetContainer.checked) { spnNewContainer.style.display=''; } else { spnNewContainer.style.display='none'; } }
//---------------------------------------------------------------- // morphing routine function handleKeySizeChange() { var sKeySize = document.UIForm.tbKeySize.value; if (0 == sKeySize.indexOf("0")) { //first digit is 0, wipe it out document.UIForm.tbKeySize.value = ""; return; } var nKeySize=parseInt(sKeySize); if (isNaN(nKeySize)) { nKeySize=0; } if (nKeySize>2048) { trKeySizeWarn.style.display=''; } else { trKeySizeWarn.style.display='none'; } if (nKeySize<g_nCurKeySizeMin || nKeySize>g_nCurKeySizeMax || 0!=nKeySize%g_nCurKeySizeInc) { // clamp the current key size to be within the range var nCloseBelow=nKeySize; if (nCloseBelow<g_nCurKeySizeMin) { //> nCloseBelow=g_nCurKeySizeMin; } else if (nCloseBelow>g_nCurKeySizeMax) { nCloseBelow=g_nCurKeySizeMax; } var nCloseAbove=nCloseBelow; // find closest values above and below nCloseBelow-=nCloseBelow%g_nCurKeySizeInc; nCloseAbove+=(g_nCurKeySizeInc-nCloseAbove%g_nCurKeySizeInc)%g_nCurKeySizeInc; var sCloseAbove=getKeySizeLinkHtmlString(nCloseAbove); var sCloseBelow=getKeySizeLinkHtmlString(nCloseBelow); if (g_nCurKeySizeMax < g_nCurTemplateKeySizeMin) { spnKeySizeBadMsg.innerHTML=eval(L_WarningTemplateKeySize_Message); } else if (nCloseAbove==nCloseBelow) { spnKeySizeBadMsg.innerHTML=eval(L_RecommendOneKeySize_Message); } else { spnKeySizeBadMsg.innerHTML=eval(L_RecommendTwoKeySizes_Message); } trKeySizeBad.style.display=""; trKeySizeBadSpc.style.display=""; } else { trKeySizeBad.style.display="none"; trKeySizeBadSpc.style.display="none"; } }
//---------------------------------------------------------------- // morphing routine function handleStrongKeyAndLMStore() { if (document.UIForm.cbStrongKey.checked && document.UIForm.rbKeyGen[0].checked) { trLMStoreSpc.style.display='none'; trLMStore.style.display='none'; document.UIForm.cbLocalMachineStore.checked=false; } else { trLMStoreSpc.style.display=''; trLMStore.style.display=''; }
if (document.UIForm.cbLocalMachineStore.checked || !document.UIForm.rbKeyGen[0].checked) { trStrongKeySpc.style.display='none'; trStrongKey.style.display='none'; document.UIForm.cbStrongKey.checked=false; } else { trStrongKeySpc.style.display=''; trStrongKey.style.display=''; } } //---------------------------------------------------------------- // handle CMC Format function handleCMCFormat() { if (isClientAbleToCreateCMC()) { <%If "Enterprise"=sServerType Then%> //change request format controls if (isTemplateKeyArchival()) { //enforce CMC document.UIForm.rbRequestFormat[0].disabled=true; document.UIForm.rbRequestFormat[0].checked=true; document.UIForm.rbRequestFormat[1].disabled=true; } else { document.UIForm.rbRequestFormat[0].disabled=false; document.UIForm.rbRequestFormat[1].disabled=false; } <%End If%> } else { //no cmc, disable it, only pkcs10 document.UIForm.rbRequestFormat[0].disabled=true; document.UIForm.rbRequestFormat[1].disabled=true; document.UIForm.rbRequestFormat[1].checked=true; } }
//================================================================ // SUBMIT ROUTINES
//---------------------------------------------------------------- // determine what to do when the submit button is pressed function goNext() { if (false==g_bOkToSubmit) { alert(L_StillLoading_ErrorMessage); } else if (true==g_bSubmitPending) { // ignore, because we are already prcessing a request. } else { SubmitRequest(); } } //---------------------------------------------------------------- // check for invalid characters and empty strings function isValidIA5String(sSource) { var nIndex; for (nIndex=sSource.length-1; nIndex>=0; nIndex--) { if (sSource.charCodeAt(nIndex)>127) { // NOTE: this is better, but not compatible with old browsers. return false; } }; return true; }
//---------------------------------------------------------------- // check for invalid characters function isValidCountryField(tbCountry) { tbCountry.value=tbCountry.value.toUpperCase(); var sSource=tbCountry.value; var nIndex, ch; if (0!=sSource.length && 2!=sSource.length) { return false; } for (nIndex=sSource.length-1; nIndex>=0; nIndex--) { ch=sSource.charAt(nIndex) if (ch<"A" || ch>"Z") { return false; } }; return true; }
//---------------------------------------------------------------- // check for invalid characters in an OID function isValidOid(sSource) { var nIndex, ch; if (0==sSource.length) { return true; } for (nIndex=sSource.length-1; nIndex>=0; nIndex--) { ch=sSource.charAt(nIndex) if (ch!="." && ch!="," && (ch<"0" || ch>"9")) { return false; } } return true; }
//---------------------------------------------------------------- // set a label to normal style function markLabelNormal(spn) { spn.style.color="#000000"; spn.style.fontWeight='normal'; }
//---------------------------------------------------------------- // set a label to error state function markLabelError(spn) { spn.style.color='#FF0000'; spn.style.fontWeight='bold'; }
//---------------------------------------------------------------- // check that the form has data in it function validateRequest() { markLabelNormal(spnNameLabel); markLabelNormal(spnEmailLabel); markLabelNormal(spnCompanyLabel); markLabelNormal(spnDepartmentLabel); markLabelNormal(spnCityLabel); markLabelNormal(spnStateLabel); markLabelNormal(spnCountryLabel); var bOK=true;
<%If "Enterprise"=sServerType Then%> if (true==isDNNeeded()) { <%End If%> var fldFocusMe=null; if (false==isValidCountryField(document.UIForm.tbCountry)) { bOK=false; fldFocusMe=document.UIForm.tbCountry; markLabelError(spnCountryLabel); } // document.UIForm.tbState.value OK // document.UIForm.tbLocality.value OK // document.UIForm.tbOrgUnit.value OK // document.UIForm.tbOrg.value OK if (false==isValidIA5String(document.UIForm.tbEmail.value)) { bOK=false; fldFocusMe=document.UIForm.tbEmail; markLabelError(spnEmailLabel); } // document.UIForm.tbCommonName.value OK
if (false==bOK) { spnFixTxt.style.display=''; window.scrollTo(0,0); fldFocusMe.focus(); } <%If "Enterprise"=sServerType Then%> } // <- End if offline template <%End If%>
<%If "StandAlone"=sServerType Then%> // Check the OID field if (true==bOK) { if ("**"==document.UIForm.lbUsageOID.options[document.UIForm.lbUsageOID.selectedIndex].value && false==isValidOid(document.UIForm.tbEKUOther.value)) { alert(L_BadOid_ErrorMessage); document.UIForm.tbEKUOther.focus(); bOK=false; } } <%End If%>
// Check the keysize field if (true==bOK) { var nKeySize=parseInt(document.UIForm.tbKeySize.value); var sMessage; if (isNaN(nKeySize)) { sMessage=L_KeySizeNotNumber_ErrorMessage; bOK=false; } else if (g_nCurTemplateKeySizeMin > g_nCurKeySizeMax) { sMessage=eval(L_TemplateKeySizeTooBig_ErrorMessage); bOK = false; } else if (nKeySize < g_nCurKeySizeMin || nKeySize > g_nCurKeySizeMax || 0!=nKeySize%g_nCurKeySizeInc) { sMessage=eval(L_KeySizeBadNumber_ErrorMessage); bOK=false; } if (false==bOK) { alert (sMessage); document.UIForm.tbKeySize.focus(); } }
// Check the container name if (true==bOK) { if (document.UIForm.rbKeyGen[1].checked || (document.UIForm.rbKeyGen[0].checked && document.UIForm.rbGenContName[1].checked)) { if (""==document.UIForm.tbContainerName.value) { bOK=false; alert(L_NoCntnrName_ErrorMessage); document.UIForm.tbContainerName.focus(); } } }
<%If bEnableExportKeyToFile Then%> // Check the exported private key file name if (true==bOK) { if (document.UIForm.rbKeyGen[0].checked && document.UIForm.cbMarkKeyExportable.checked && document.UIForm.cbExportKeys.checked) { if (""==document.UIForm.tbExportKeyFile.value) { bOK=false; alert(L_NoExportFileName_ErrorMessage); document.UIForm.tbExportKeyFile.focus(); } } } <%End If%>
// Check the saved-request file name if (true==bOK) { if (document.UIForm.cbSaveRequest.checked) { if (""==document.UIForm.tbSaveReqFile.value) { bOK=false; alert(L_NoSaveReqFileName_ErrorMessage); document.UIForm.tbSaveReqFile.focus(); } } }
return bOK; }
//---------------------------------------------------------------- function SubmitRequest() { g_bSubmitPending=true;
// check that the form is filled in spnErrorTxt.style.display='none'; spnFixTxt.style.display='none'; if (false==validateRequest()) { g_bSubmitPending=false; return; }
// show a nice message since request creation can take a while ShowTransientMessage(L_Generating_Message);
// Make the message show up on the screen, // then continue with 'SubmitRequest': // Pause 10 mS before executing phase 2, // so screen will have time to repaint. setTimeout("SubmitRequestPhase2();", 10); } function SubmitRequestPhase2() { // continued from above
<%If "StandAlone"=sServerType Then%> // // Stand-Alone Options //
// set the extended key usage and certificate request 'friendly type' var nUsageIndex=document.UIForm.lbUsageOID.selectedIndex; var sCertUsage; if ("**"==document.UIForm.lbUsageOID.options[nUsageIndex].value) { sCertUsage=document.UIForm.tbEKUOther.value; document.SubmittedData.FriendlyType.value=eval(L_UserEKUCert_Text); } else { sCertUsage=document.UIForm.lbUsageOID.options[nUsageIndex].value; document.SubmittedData.FriendlyType.value=document.UIForm.lbUsageOID.options[nUsageIndex].text; }
<%Else 'Enterprise%> // // Enterprise Options //
// get cert template info var lCTEVer = XECT_EXTENSION_V1; var lCTEMajor = 0; var bCTEfMinor = false; var lCTEMinor = 0; var sRealName = getTemplateStringInfo(CTINFO_INDEX_REALNAME, null); var sCTEOID = getTemplateStringInfo(CTINFO_INDEX_EXTOID, null); if ("" == sCTEOID) { //must v1 template, get template name sCTEOID = sRealName; } else { // v2 template lCTEVer = XECT_EXTENSION_V2; lCTEMajor = getTemplateValueInfo(CTINFO_INDEX_EXTMAJ, null); bCTEfMinor = getTemplateValueInfo(CTINFO_INDEX_EXTFMIN, null); lCTEMinor = getTemplateValueInfo(CTINFO_INDEX_EXTMIN, null); } // set the cert template vbAddCertTypeToRequestEx(lCTEVer, sCTEOID, lCTEMajor, bCTEfMinor, lCTEMinor); document.SubmittedData.FriendlyType.value=eval(L_TemplateCert_Text);
var sCertUsage=""; // ignored
<%End If 'StandAlone or Enterprise%> // // Common //
// set the identifying info var sDistinguishedName=""; if (""!=document.UIForm.tbCountry.value) { sDistinguishedName+="C=\""+document.UIForm.tbCountry.value.replace(/"/g, "\"\"") +"\";"; } if (""!=document.UIForm.tbState.value) { sDistinguishedName+="S=\""+document.UIForm.tbState.value.replace(/"/g, "\"\"") +"\";"; } if (""!=document.UIForm.tbLocality.value) { sDistinguishedName+="L=\""+document.UIForm.tbLocality.value.replace(/"/g, "\"\"") +"\";"; } if (""!=document.UIForm.tbOrg.value) { sDistinguishedName+="O=\""+document.UIForm.tbOrg.value.replace(/"/g, "\"\"") +"\";"; } if (""!=document.UIForm.tbOrgUnit.value) { sDistinguishedName+="OU=\""+document.UIForm.tbOrgUnit.value.replace(/"/g, "\"\"") +"\";"; } if (""!=document.UIForm.tbEmail.value) { sDistinguishedName+="E=\""+document.UIForm.tbEmail.value.replace(/"/g, "\"\"") +"\";"; } if (""!=document.UIForm.tbCommonName.value) { sDistinguishedName+="CN=\""+document.UIForm.tbCommonName.value.replace(/"/g, "\"\"")+"\";"; } <%If "Enterprise"=sServerType Then%> if (false==isDNNeeded()) { sDistinguishedName=""; } <%End If%>
// append the local date to the type document.SubmittedData.FriendlyType.value+=" ("+(new Date()).toLocaleString()+")";
// // Key Options subheading: //
// set the 'SaveCert' flag to install the cert instead of saving document.SubmittedData.SaveCert.value="no"; // set the CSP var nCSPIndex=document.UIForm.lbCSP.selectedIndex; XEnroll.ProviderName=document.UIForm.lbCSP.options[nCSPIndex].text; XEnroll.ProviderType=document.UIForm.lbCSP.options[nCSPIndex].value;
// set the key size (the upper 16 bits of GenKeyFlags) // note: this value has already been validated var nKeySize=parseInt(document.UIForm.tbKeySize.value); XEnroll.GenKeyFlags=nKeySize<<16;
// set the KeyUsage if (document.UIForm.rbKeyUsage[KEY_USAGE_EXCH].checked) { XEnroll.KeySpec=AT_KEYEXCHANGE; XEnroll.LimitExchangeKeyToEncipherment=true; } else if (document.UIForm.rbKeyUsage[KEY_USAGE_SIG].checked) { XEnroll.KeySpec=AT_SIGNATURE; XEnroll.LimitExchangeKeyToEncipherment=false; } else { // KEY_USAGE_BOTH XEnroll.KeySpec=AT_KEYEXCHANGE; XEnroll.LimitExchangeKeyToEncipherment=false; }
// set the 'use existing key set' flag if (document.UIForm.rbKeyGen[0].checked) { XEnroll.UseExistingKeySet=false; if (document.UIForm.rbGenContName[1].checked) { XEnroll.ContainerName=document.UIForm.tbContainerName.value; }
// set 'Strong private key protection' // note: upper 16 bits already set as key size if (document.UIForm.cbStrongKey.checked) { XEnroll.GenKeyFlags|=CRYPT_USER_PROTECTED; }
// mark the keys as exportable if (document.UIForm.cbMarkKeyExportable.checked) { XEnroll.GenKeyFlags|=CRYPT_EXPORTABLE;
<%If bEnableExportKeyToFile Then%> // set the key export file (.pvk) and save the cert instead of installing if (document.UIForm.cbExportKeys.checked) { XEnroll.PVKFileName=document.UIForm.tbExportKeyFile.value; document.SubmittedData.SaveCert.value="yes"; } <%End If%> }
} else { // set the 'use existing key set' flag XEnroll.UseExistingKeySet=true; XEnroll.ContainerName=document.UIForm.tbContainerName.value; }
// place the keys in the local machine store if (document.UIForm.cbLocalMachineStore.checked) {
// the keys attached to the dummy request cert go in the local machine store XEnroll.RequestStoreFlags=CERT_SYSTEM_STORE_LOCAL_MACHINE;
// used in CryptAcquireContext XEnroll.ProviderFlags=CRYPT_MACHINE_KEYSET;
// the keys attached to the final cert also go in the local machine store document.SubmittedData.TargetStoreFlags.value=CERT_SYSTEM_STORE_LOCAL_MACHINE; } else {
// the keys attached to the final cert also go in the user store document.SubmittedData.TargetStoreFlags.value=0; // 0=Use default (=user store) }
var dwCreateRequestFlag = XECR_CMC; if (document.UIForm.rbRequestFormat[1].checked) { dwCreateRequestFlag = XECR_PKCS10_V2_0; }
<%If "Enterprise"=sServerType Then%> //SMIME capabilities XEnroll.EnableSMIMECapabilities = isSMimeCapabilities();
//Key archival if (isTemplateKeyArchival()) { var nResult = SetPrivateKeyArchiveCertificate(); //call VB if (0 != nResult) { handleError(nResult); return; } } <%End If%>
if ("" != document.UIForm.tbFriendlyName.value) { //set friendly name property var CERT_FRIENDLY_NAME_PROP_ID=11; var XECP_STRING_PROPERTY=1; XEnroll.addBlobPropertyToCertificate(CERT_FRIENDLY_NAME_PROP_ID, XECP_STRING_PROPERTY, document.UIForm.tbFriendlyName.value); }
// // Additional Options subheading: //
// set the hash algorithm var nHashIndex=document.UIForm.lbHashAlgorithm.selectedIndex; XEnroll.HashAlgID=document.UIForm.lbHashAlgorithm.options[nHashIndex].value;
// set any extra attributes var sAttrib=document.UIForm.taAttrib.value; if (sAttrib.lastIndexOf("\r\n")!=sAttrib.length-2 && sAttrib.length>0) { sAttrib=sAttrib+"\r\n"; }
// for interop debug purposes sAttrib+="UserAgent:<%=Request.ServerVariables("HTTP_USER_AGENT")%>\r\n";
document.SubmittedData.CertAttrib.value=sAttrib;
// we are submitting a new request document.SubmittedData.Mode.value='newreq';
// // Create the request //
var nResult; if (document.UIForm.cbSaveRequest.checked) {
// build and save the certificate request var sSaveReqFile=document.UIForm.tbSaveReqFile.value; nResult=CreateAndSaveRequest(dwCreateRequestFlag, sDistinguishedName, sCertUsage, sSaveReqFile); // ask VB to do it, since it can handle errors
} else { // build the certificate request nResult=CreateRequest(dwCreateRequestFlag, sDistinguishedName, sCertUsage); // ask VB to do it, since it can handle errors } if (0 == nResult) { //always get thumbprint in case of pending document.SubmittedData.ThumbPrint.value=XEnroll.ThumbPrint; }
// hide the message box HideTransientMessage();
// reset XEnroll so the user can select a different CSP, etc. XEnroll.reset(); // however, make sure it still matches the UI. XEnroll.ProviderName=document.UIForm.lbCSP.options[nCSPIndex].text; XEnroll.ProviderType=document.UIForm.lbCSP.options[nCSPIndex].value;
// deal with an error if there was one if (0!=nResult) { g_bSubmitPending=false; if (document.UIForm.cbSaveRequest.checked && 0==(0x800704c7^nResult)) { //cancelled nResult=0; return; } handleError(nResult); return; }
// check for special "no submit" case if (document.UIForm.cbSaveRequest.checked) {
// just inform the user that it went OK, but don't submit alert(L_RequestSaved_Message); g_bSubmitPending=false;
} else {
// put up a new wait message ShowTransientMessage(L_Waiting_Message);
// Submit the cert request and move forward in the wizard document.SubmittedData.submit(); } }
//---------------------------------------------------------------- function handleError(nResult) { var sSugCause=L_SugCauseNone_ErrorMessage; var sErrorName=L_ErrNameUnknown_ErrorMessage; // analyze the error - funny use of XOR ('^') because obvious choice '==' doesn't work if (0==(0x80090008^nResult)) { sErrorName="NTE_BAD_ALGID"; sSugCause=L_SugCauseBadSetting2_ErrorMessage; } else if (0==(0x80090016^nResult)) { sErrorName="NTE_BAD_KEYSET"; if (document.UIForm.rbKeyGen[0].checked) { sSugCause=L_SugCauseBadCSP_ErrorMessage; } else { sSugCause=L_SugCauseBadKeyContainer_ErrorMessage; } } else if (0==(0x80090019^nResult)) { sErrorName="NTE_KEYSET_NOT_DEF"; sSugCause=L_SugCauseBadCSP_ErrorMessage; } else if (0==(0x80090020^nResult)) { sErrorName="NTE_FAIL"; sSugCause=L_SugCauseBadCSP_ErrorMessage; } else if (0==(0x80090009^nResult)) { sErrorName="NTE_BAD_FLAGS"; sSugCause=L_SugCauseBadSetting2_ErrorMessage; } else if (0==(0x8009000F^nResult)) { sErrorName="NTE_EXISTS"; sSugCause=L_SugCauseExistKeyContainer_ErrorMessage; } else if (0==(0x80092002^nResult)) { sErrorName="CRYPT_E_BAD_ENCODE"; //sSugCause=""; } else if (0==(0x80092022^nResult)) { sErrorName="CRYPT_E_INVALID_IA5_STRING"; sSugCause=L_SugCauseBadChar_ErrorMessage; } else if (0==(0x80092023^nResult)) { sErrorName="CRYPT_E_INVALID_X500_STRING"; sSugCause=L_SugCauseBadChar_ErrorMessage; } else if (0==(0x80070003^nResult)) { sErrorName="ERROR_PATH_NOT_FOUND"; sSugCause=L_SugCauseBadFileName_ErrorMessage; } else if (0==(0x80070103^nResult)) { sErrorName="ERROR_NO_MORE_ITEMS"; sSugCause=L_SugCauseBadHash_ErrorMessage; } else if (0==(0x8007007B^nResult)) { sErrorName="ERROR_INVALID_NAME"; sSugCause=L_SugCauseBadFileName_ErrorMessage; } else if (0==(0x80070015^nResult)) { sErrorName="ERROR_NOT_READY"; sSugCause=L_SugCauseBadDrive_ErrorMessage; } else if (0==(0x8007007F^nResult)) { sErrorName="ERROR_PROC_NOT_FOUND"; sSugCause=L_DownLevelClients_ErrorMessage; } else if (0==(0x80100006^nResult)) { sErrorName = "SCARD_E_NO_MEMORY"; sSugCause = L_SCARD_E_NO_MEMORY_MSG; } else if (0==(0x80100007^nResult)) { sErrorName = "SCARD_F_WAITED_TOO_LONG"; sSugCause = L_SCARD_F_WAITED_TOO_LONG; } else if (0==(0x80100008^nResult)) { sErrorName = "SCARD_E_INSUFFICIENT_BUFFER"; sSugCause = L_SCARD_E_INSUFFICIENT_BUFFER; } else if (0==(0x80100009^nResult)) { sErrorName = "SCARD_E_UNKNOWN_READER"; sSugCause = L_SCARD_E_UNKNOWN_READER; } else if (0==(0x8010000C^nResult)) { sErrorName = "SCARD_E_NO_SMARTCARD"; sSugCause = L_SCARD_E_NO_SMARTCARD; } else if (0==(0x8010000D^nResult)) { sErrorName = "SCARD_E_UNKNOWN_CARD"; sSugCause = L_SCARD_E_UNKNOWN_CARD; } else if (0==(0x80100010^nResult)) { sErrorName = "SCARD_E_NOT_READY"; sSugCause = L_SCARD_E_NOT_READY; } else if (0==(0x80100013^nResult)) { sErrorName = "SCARD_F_COMM_ERROR"; sSugCause = L_SCARD_F_COMM_ERROR; } else if (0==(0x8010001D^nResult)) { sErrorName = "SCARD_E_NO_SERVICE"; sSugCause = L_SCARD_E_NO_SERVICE; } else if (0==(0x8010001E^nResult)) { sErrorName = "SCARD_E_SERVICE_STOPPED"; sSugCause = L_SCARD_E_SERVICE_STOPPED; } else if (0==(0x8010002E^nResult)) { sErrorName = "SCARD_E_NO_READERS_AVAILABLE"; sSugCause = L_SCARD_E_NO_READERS_AVAILABLE; } else if (0==(0x8010002F^nResult)) { sErrorName = "SCARD_E_COMM_DATA_LOST"; sSugCause = L_SCARD_E_COMM_DATA_LOST; } else if (0==(0x80100030^nResult)) { sErrorName = "SCARD_E_NO_KEY_CONTAINER"; sSugCause = L_SCARD_E_NO_KEY_CONTAINER; } else if (0==(0x80100067^nResult)) { sErrorName = "SCARD_W_UNPOWERED_CARD"; sSugCause = L_SCARD_W_UNPOWERED_CARD; } else if (0==(0x80100069^nResult)) { sErrorName = "SCARD_W_REMOVED_CARD"; sSugCause = L_SCARD_W_REMOVED_CARD; } else if (0==(0x8010006B^nResult)) { sErrorName = "SCARD_W_WRONG_CHV"; sSugCause = L_SCARD_W_WRONG_CHV; } else if (0==(0x8010006C^nResult)) { sErrorName = "SCARD_W_CHV_BLOCKED"; sSugCause = L_SCARD_W_CHV_BLOCKED; } else if (0==(0x8010006D^nResult)) { sErrorName = "SCARD_W_EOF"; sSugCause = L_SCARD_W_EOF; } else if (0==(0x8010006E^nResult)) { sErrorName = "SCARD_W_CANCELLED_BY_USER"; sSugCause = L_SCARD_W_CANCELLED_BY_USER; } else if (0==(0x8010006F^nResult)) { sErrorName = "SCARD_W_CARD_NOT_AUTHENTICATED"; sSugCause = L_SCARD_W_CARD_NOT_AUTHENTICATED; } else if (0==(0xFFFFFFFF^nResult)) { sErrorName=L_ErrNameNoFileName_ErrorMessage; sSugCause=L_SugCauseNoFileName_ErrorMessage; } else if (0==(0x8000FFFF^nResult)) { sErrorName="E_UNEXPECTED"; } else if (0==(0x00000046^nResult)) { sErrorName=L_ErrNamePermissionDenied_ErrorMessage; if (document.UIForm.cbSaveRequest.checked) { sSugCause=L_SugCausePermissionToWrite_ErrorMessage; } else { sSugCause=L_SugCausePermissionToWrite_ErrorMessage; } } // modify the document text and appearance to show the error message spnErrorNum.innerText="0x"+toHex(nResult)+" - "+sErrorName; spnErrorMsg.innerText=sSugCause; spnFixTxt.style.display='none'; spnErrorTxt.style.display='';
// back to the top so the messages show window.scrollTo(0,0); }
</Script> <Script Language="VBScript"> ' The current CA exchange certificate Public sCAExchangeCert sCAExchange="" <%=sCAExchangeCert%>
'----------------------------------------------------------------- ' call XEnroll to create a request, since javascript has no error handling Function CreateRequest(dwCreateRequestFlag, sDistinguishedName, sCertUsage) On Error Resume Next document.SubmittedData.CertRequest.value= _ XEnroll.CreateRequest(dwCreateRequestFlag, sDistinguishedName, sCertUsage) CreateRequest=Err.Number End Function
'----------------------------------------------------------------- ' call XEnroll to create and save a request, since javascript has no error handling Function CreateAndSaveRequest(dwCreateRequestFlag, sDistinguishedName, sCertUsage, sSaveReqFile) On Error Resume Next XEnroll.createFileRequest dwCreateRequestFlag, sDistinguishedName, sCertUsage, sSaveReqFile CreateAndSaveRequest=Err.Number End Function
'---------------------------------------------------------------- ' handle a change in the current CSP, since javascript has no error handling Sub UpdateHashAlgList(nProvType) On Error Resume Next Dim nIndex, nAlgID, oElem
' clear the list While document.UIForm.lbHashAlgorithm.length>0 document.UIForm.lbHashAlgorithm.options.remove(0) Wend
' retrieve the list from XEnroll nIndex=0 Do ' get the next AlgID nAlgID=XEnroll.EnumAlgs(nIndex, ALG_CLASS_HASH) If 0<>Err.Number Then ' no more algs Err.Clear Exit Do End If
' get the corresponding name and create an option in the list box sName=XEnroll.GetAlgName(nAlgID) If "MAC"<>sName And "HMAC"<>sName And "SSL3 SHAMD5"<>sName And "MD5"<>sName Or "MAC"<>sName And "HMAC"<>sName And "SSL3 SHAMD5"<>sName And 3<>nProvType Then 'skip some one we know don't work Set oElem=document.createElement("Option") oElem.text=sName oElem.value=nAlgID document.UIForm.lbHashAlgorithm.options.add(oElem) End If nIndex=nIndex+1
Loop ' <- End alg enumeration loop
' make sure the first one is selectd document.UIForm.lbHashAlgorithm.selectedIndex=0
End Sub
'---------------------------------------------------------------- ' call XEnroll to get the key length, since javascript has no error handling Function MyGetKeyLen(nSizeSpec, bExchange) On Error Resume Next Dim nKeySpec If True=bExchange Then nKeySpec=XEKL_KEYSPEC_KEYX Else nKeySpec=XEKL_KEYSPEC_SIG End If MyGetKeyLen=XEnroll.GetKeyLenEx(nSizeSpec, nKeySpec) If 0<>Err.Number Then If XEKL_KEYSIZE_MIN=nSizeSpec Then MyGetKeyLen=KEY_LEN_MIN_DEFAULT ElseIf XEKL_KEYSIZE_MAX=nSizeSpec Then MyGetKeyLen=KEY_LEN_MAX_DEFAULT ElseIf XEKL_KEYSIZE_DEFAULT=nSizeSpec Then MyGetKeyLen=KEY_LEN_MY_DEFAULT 'try 1024 Else 'assume XEKL_KEYSIZE_INC=nSizeSpec MyGetKeyLen=KEY_LEN_INC_DEFAULT End If End If If XEKL_KEYSIZE_INC=nSizeSpec And 0=MyGetKeyLen Then MyGetKeyLen=KEY_LEN_INC_DEFAULT End If End Function
'---------------------------------------------------- ' set a certificate for key archive Function SetPrivateKeyArchiveCertificate() On Error Resume Next
XEnroll.PrivateKeyArchiveCertificate=sCAExchange SetPrivateKeyArchiveCertificate = Err.Number End Function
'---------------------------------------------------- ' set request template extension Function vbAddCertTypeToRequestEx(lCTEVer, sCTEOID, lCTEMajor, bCTEfMinor, lCTEMinor) On Error Resume Next
XEnroll.addCertTypeToRequestEx lCTEVer, sCTEOID, lCTEMajor, bCTEfMinor, lCTEMinor If 0 <> Err.Number Then 'possible on downlevel not supporting v2 encoding, change to v1 XEnroll.addCertTypeToRequestEx XECT_EXTENSION_V1, sCTEOID, lCTEMajor, bCTEfMinor, lCTEMinor End If vbAddCertTypeToRequestEx=Err.Number End Function
</Script>
<%End If 'bFailed%>
</Body> </HTML>
|