180 lines
5.7 KiB
PHP
180 lines
5.7 KiB
PHP
<? /*
|
|
Copyright (C) 2004 by Duane Groth <duane_at_CAcert_dot_org>
|
|
|
|
This file is part of CAcert.
|
|
|
|
CAcert has been released under the CAcert Source License
|
|
which can be found included with these source files or can
|
|
be downloaded from the internet from the following address:
|
|
http://www.cacert.org/src-lic.php
|
|
|
|
CAcert is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
PARTICULAR PURPOSE. See the License for more details.
|
|
*/ ?>
|
|
<? if(strstr($_SESSION[_config][agent], "MSIE")) { ?>
|
|
<object classid="clsid:127698e4-e730-4e5c-a2b1-21490a70c8a1" codebase="/xenroll.cab#Version=5,131,3659,0" id="cec">
|
|
<?=_("You must enable ActiveX for this to work. On Vista you have to add this website to the list of trusted sites in the internet-settings.")?>
|
|
</object>
|
|
<form method="post" action="account.php" name="CertReqForm"><p>
|
|
<input type="hidden" name="session" value="UsedXenroll">
|
|
<?=_("Key Strength:")?> <select name="CspProvider"></select>
|
|
<input type="hidden" name="oldid" value="<?=$id?>">
|
|
<INPUT TYPE=HIDDEN NAME="CSR">
|
|
<input type="hidden" name="keytype" value="MS">
|
|
<input type="submit" name="GenReq" value="Create Certificate"><br>
|
|
</p></form>
|
|
<script type="text/vbscript" language="vbscript">
|
|
<!--
|
|
Function GetProviderList()
|
|
Dim CspList, cspIndex, ProviderName
|
|
On Error Resume Next
|
|
|
|
count = 0
|
|
base = 0
|
|
enhanced = 0
|
|
CspList = ""
|
|
ProviderName = ""
|
|
|
|
// Vista:
|
|
Set csps = CreateObject("X509Enrollment.CCspInformations")
|
|
If IsObject(csps) Then
|
|
csps.AddAvailableCsps()
|
|
Document.CertReqForm.keytype.value="VI"
|
|
For j = 0 to csps.Count-1
|
|
Set oOption = document.createElement("OPTION")
|
|
oOption.text = csps.ItemByIndex(j).Name
|
|
oOption.value = j
|
|
Document.CertReqForm.CspProvider.add(oOption)
|
|
Next
|
|
|
|
Else
|
|
|
|
// 2000,XP:
|
|
|
|
For ProvType = 0 to 13
|
|
cspIndex = 0
|
|
cec.ProviderType = ProvType
|
|
ProviderName = cec.enumProviders(cspIndex,0)
|
|
|
|
while ProviderName <> ""
|
|
Set oOption = document.createElement("OPTION")
|
|
oOption.text = ProviderName
|
|
oOption.value = ProvType
|
|
Document.CertReqForm.CspProvider.add(oOption)
|
|
if ProviderName = "Microsoft Base Cryptographic Provider v1.0" Then
|
|
base = count
|
|
end if
|
|
if ProviderName = "Microsoft Enhanced Cryptographic Provider v1.0" Then
|
|
enhanced = count
|
|
end if
|
|
cspIndex = cspIndex +1
|
|
ProviderName = ""
|
|
ProviderName = cec.enumProviders(cspIndex,0)
|
|
count = count + 1
|
|
wend
|
|
Next
|
|
Document.CertReqForm.CspProvider.selectedIndex = base
|
|
if enhanced then
|
|
Document.CertReqForm.CspProvider.selectedIndex = enhanced
|
|
end if
|
|
End If
|
|
End Function
|
|
|
|
Function CSR(keyflags)
|
|
CSR = ""
|
|
szName = ""
|
|
|
|
|
|
// Vista
|
|
if Document.CertReqForm.keytype.value="VI" Then
|
|
|
|
Dim g_objClassFactory
|
|
Dim obj
|
|
Dim objPrivateKey
|
|
Dim g_objRequest
|
|
Dim g_objRequestCMC
|
|
|
|
Set g_objClassFactory=CreateObject("X509Enrollment.CX509EnrollmentWebClassFactory")
|
|
Set obj=g_objClassFactory.CreateObject("X509Enrollment.CX509Enrollment")
|
|
Set objPrivateKey=g_objClassFactory.CreateObject("X509Enrollment.CX509PrivateKey")
|
|
Set objRequest=g_objClassFactory.CreateObject("X509Enrollment.CX509CertificateRequestPkcs10")
|
|
objPrivateKey.ProviderName = "Microsoft Enhanced RSA and AES Cryptographic Provider"
|
|
objPrivateKey.ProviderType = "24"
|
|
objPrivateKey.KeySpec = "1"
|
|
objRequest.InitializeFromPrivateKey 1, objPrivateKey, ""
|
|
// obj.Initialize(1)
|
|
obj.InitializeFromRequest(objRequest)
|
|
obj.CertificateDescription="Description"
|
|
obj.CertificateFriendlyName="FriendlyName"
|
|
CSR=obj.CreateRequest(1)
|
|
If len(CSR)<>0 Then Exit Function
|
|
Msgbox "<?=_("Error while generating the certificate-request. Please make sure that you have added this website to the list of trusted sites in the Internet-Options menu!")?>"
|
|
|
|
else
|
|
// XP
|
|
|
|
cec.HashAlgorithm = "MD5"
|
|
err.clear
|
|
On Error Resume Next
|
|
set options = document.all.CspProvider.options
|
|
index = options.selectedIndex
|
|
cec.providerName = options(index).text
|
|
tmpProviderType = options(index).value
|
|
cec.providerType = tmpProviderType
|
|
cec.KeySpec = 2
|
|
if tmpProviderType < 2 Then
|
|
cec.KeySpec = 1
|
|
end if
|
|
cec.GenKeyFlags = &h04000001 OR keyflags
|
|
CSR = cec.createPKCS10(szName, "1.3.6.1.5.5.7.3.2")
|
|
if len(CSR)<>0 then Exit Function
|
|
cec.GenKeyFlags = &h04000000 OR keyflags
|
|
CSR = cec.createPKCS10(szName, "1.3.6.1.5.5.7.3.2")
|
|
if len(CSR)<>0 then Exit Function
|
|
if cec.providerName = "Microsoft Enhanced Cryptographic Provider v1.0" Then
|
|
if MsgBox("<?=_("The 1024-bit key generation failed. Would you like to try 512 instead?")?>", vbOkCancel)=vbOk Then
|
|
cec.providerName = "Microsoft Base Cryptographic Provider v1.0"
|
|
else
|
|
Exit Function
|
|
end if
|
|
end if
|
|
cec.GenKeyFlags = 1 OR keyflags
|
|
CSR = cec.createPKCS10(szName, "1.3.6.1.5.5.7.3.2")
|
|
if len(CSR)<>0 then Exit Function
|
|
cec.GenKeyFlags = keyflags
|
|
CSR = cec.createPKCS10(szName, "1.3.6.1.5.5.7.3.2")
|
|
if len(CSR)<>0 then Exit Function
|
|
cec.GenKeyFlags = 0
|
|
CSR = cec.createPKCS10(szName, "1.3.6.1.5.5.7.3.2")
|
|
End if
|
|
End Function
|
|
|
|
Sub GenReq_OnClick
|
|
Dim TheForm
|
|
Set TheForm = Document.CertReqForm
|
|
err.clear
|
|
result = CSR(2)
|
|
if len(result)=0 Then
|
|
result = MsgBox("Unable to generate PKCS#10.", 0, "Alert")
|
|
Exit Sub
|
|
end if
|
|
TheForm.CSR.Value = result
|
|
TheForm.Submit
|
|
Exit Sub
|
|
End Sub
|
|
|
|
GetProviderList()
|
|
-->
|
|
</script>
|
|
<? } else { ?>
|
|
<p>
|
|
<form method="post" action="account.php">
|
|
<input type="hidden" name="keytype" value="NS">
|
|
<?=_("Keysize:")?> <keygen name="SPKAC" challenge="<?=make_hash()?>">
|
|
|
|
<input type="submit" name="submit" value="<?=_("Create Certificate Request")?>">
|
|
<input type="hidden" name="oldid" value="<?=$id?>">
|
|
</form>
|
|
</p>
|
|
<? } ?>
|