Les composants côté client
The client-side components
La page de requête
Pour mettre en oeuvre la page de requête du certificat, on peut utiliser deux
pages distinctes pour couvrir les deux navigateurs principaux. Le choix qui
a été fait ici, est celui d'une page unique. En effet, les deux pages ne
différeraient que sur deux points :
- le script de récupération des données (dans le cas où ces données
sont saisies dans un formulaire)
- la présence d'un contrôle Active-X pour Internet Explorer (ignoré
par Netscape), ou d'une balise <KeyGen> pour Netscape (dont Internet Explorer
ne tient aucun compte)
Les différents composants de la page de requête sont donc :
- l a balise <KeyGen> que l'on peut camoufler dans une balise
<DIV>,
- le contrôle Active-X,
- le formulaire de requête que l'on peut personnaliser avec
des <INPUT> du type hidden,
- le script de contrôle des données, d'invocation de
l'Active-X et d'envoi du formulaire.
La balise <KeyGen> s'utilise comme suit. Attention à bien l'insérer
à l'intérieur du formulaire :
<div style="visibility: hidden;">
<KEYGEN NAME="SPKAC" CHALLENGE="CpbsVUeXIQzFmZz">
</div>
<script>
document.GenReqForm.SPKAC.selectedIndex = 1;
</script>
|
Le contrôle Active-X s'insère n'importe tout dans le body en
utilisant le code ci-dessous :
<object
classid="clsid:43F8F289-7A20-11D0-8F06-00C04FC295E1"
codebase="Xenroll.dll"
id="Enroll">
</object>
|
Le formulaire de requête est le suivant. Tout ou partie de ce formulaire
peut être basculé en <INPUT> de type hidden. Attention,
la balise <KeyGen> doit y être insérée.
<form method="POST" name="GenReqForm">
<input name="NOM" value="">
<input name="PRENOM" value="">
<input name="emailAddress" value="">
<input name="organizationalUnitName" value="">
<input name="organizationName" value="">
<input name="localityName" value="">
<input name="stateOrProvinceName" value="">
<input name="countryName" value="">
<input type="hidden" name="REQENTRY">
</form>
|
Le script suivant permet de contrôler les données éventuellement
saisies, d'invoquer le contrôle Active-X et d'envoyer le formulaire.
N.B. : Il est compatible IE 5+ et NS7.
<script language="JavaScript" type='text/javascript'>
<!--
var all = document.all;
var elbyid = document.getElementById;
var opera = window.opera;
var ie4 = (all && !elbyid && !opera) ? true : false;
var ns4 = document.layers? true : false;
var ie5 = (all && elbyid && !opera) ? true : false;
var ns6 = (!all && elbyid )? true : false;
var ns = ns4 || ns6;
var ie = ie4 || ie5;
// Action du formulaire
var formaction= "GenCertServlet";
function GenReq ()
{
szName = "";
test = true;
// Récupération des données
if (ie) {
Nom = document.all.NOM.value;
Prenom = document.all.PRENOM.value;
Country = document.all.countryName.value;
State = document.all.stateOrProvinceName.value;
Locality = document.all.localityName.value;
Orga = document.all.organizationName.value;
Email = document.all.emailAddress.value;
OrgaUnit = document.all.organizationalUnitName.value;
}
if (ns) {
Nom = document.GenReqForm.NOM.value;
Prenom = document.GenReqForm.PRENOM.value;
Country = document.GenReqForm.countryName.value;
State = document.GenReqForm.stateOrProvinceName.value;
Locality = document.GenReqForm.localityName.value;
Orga = document.GenReqForm.organizationName.value;
Email = document.GenReqForm.emailAddress.value;
OrgaUnit = document.GenReqForm.organizationalUnitName.value;
}
// Vérification des données
if (Nom == "")
{
strAlert = strAlert + "Saisissez votre nom.\n";
test = false;
}
if (Prenom == "")
{
strAlert = strAlert + "Saisissez votre prénom.\n";
test = false;
}
if ((Nom != "")&&(Prenom != ""))
{
szName = "CN=" + Nom + " " + Prenom + strCert;
}
szName = szName + ", C=" + Country;
szName = szName + ", ST=" + State;
szName = szName + ", L=" + Locality;
szName = szName + ", O=" + Orga;
if (Email == "")
{
strMail = "Saisissez votre adresse e-mail.\n";
strAlert = strAlert + strMail;
test = false;
}
else
{
szName = szName + ", Email=" + Email;
}
// Traitement des données
if (test) {
if (!ns) {
keysize = 1024;
flags = 1;
keyflags = (flags + (keysize*65536));
Enroll.RequestStoreFlags = "&H10000";
Enroll.GenKeyFlags = keyflags;
Enroll.KeySpec = 1;
szData = Enroll.createPKCS10(szName, "");
document.GenReqForm.REQENTRY.value = szData;
document.GenReqForm.action = formaction;
document.GenReqForm.submit();
} else {
document.GenReqForm.action = formaction;
document.GenReqForm.submit();
}
} else {
alert(strAlert);
}
}
//-->
|
La page d'installation sous Internet Explorer
Cette page est spécifique à Internet Explorer. Elle utilise le même
contrôle Active-X que la page de requête. Il est rappelé pour
mémoire dans une version de codebase légèrement différente.
Les différents composants de cette page sont :
- le contrôle Active-X,
- le bouton qui déclenche l'installation du certificat,
- le script qui procède à l'installation dans Internet Explorer.
Le premier composant est donc le contrôle Active-X.
<object
classid="clsid:43F8F289-7A20-11D0-8F06-00C04FC295E1"
CODEBASE="/CertControl/xenroll.cab#Version=5,131,2090,1"
id=IControl>
</object>
|
Le second composant de cette page est le bouton qui permet d'installer le
certificat.
<img src='/img/installer_cert.gif'
style="cursor: hand;"
name="Certificate"
onClick="Download()">
|
Pour finir, le dernier comosant est le script qui invoque le contrôle Active-X.
<script language='VBSCRIPT'>
sub Download()
Dim result, Message
On Error Resume Next
szPKCS7 = "Insérer ici la chaîne"
szPKCS7 = szPKCS7 + "cryptée contenue dans le certificat"
if ("" = "WriteCertToCSP") then
IControl.WriteCertToCSP = TRUE
end if
if "1.3.6.1.5.5.7.3.2" = "1.3.6.1.5.5.7.3.8" _
or "1.3.6.1.5.5.7.3.2" = "1.3.6.1.5.5.7.3.3" then
SPCFile = InputBox("Save the SPC file as:", "XENROLL")
IControl.SPCFileName = SPCFile
elseif "" = "SaveCertificate" then
SPCFile = InputBox("Save the Certificate as:", "XENROLL")
IControl.SPCFileName = SPCFile
end if
IControl.AcceptPKCS7(szPKCS7)
If err.Number = 0 Then
Message = "Certificat installé!"
result = MsgBox (Message, 64, "Serveur de Certificat")
window.location = "URL en cas de succès"
Else
Message = "Certificat non installé:" & vbcrlf & vbcrlf
Message = Message & "Erreur: " & Hex(err)
result = MsgBox (Message, 48, "XENROLL")
window.location = "URL en cas d'échec"
End If
end sub
</script>
|
La page d'installation sous Netscape
Cette page est spécifique à Netscape. La procédure lancée
par le bouton d'installation procède en deux étapes :
- d'abord, elle ouvre un popup avec un écran d'attente et un
script qui ferme la fenêtre après quelques secondes,
- puis, elle fixe la valeur de la propriété top.location.href
à l'URL d'une servlet qui envoie le certificat en pièce
jointe dans son flux de sortie ; cette servlet est détaillée
dans le chapitre des composants côté serveur,
|