Automatisation de la boîte de dialog Choisir un certificate numérique

J’utilise WatiN (2.0.10.928) avec C # et Visual Studio 2008 pour tester un site Web sécurisé SSL nécessitant un certificate. Lorsque vous accédez à la page d’accueil, une boîte de dialog “Choisissez un certificate numérique” s’affiche. Elle vous oblige à sélectionner un certificate valide, puis à cliquer sur le bouton “OK”.

Je cherche un moyen d’automatiser la sélection du certificate afin que, chaque fois qu’un nouveau test ou une nouvelle installation est exécuté (et que mon navigateur redémarre), je n’ai pas à interférer manuellement avec le test automatisé et à sélectionner le certificate. J’ai essayé d’utiliser diverses classes du gestionnaire de dialog WatiN et j’ai même envisagé d’utiliser l’API Win32 pour automatiser cette opération, mais je n’ai pas eu beaucoup de chance.

J’ai finalement trouvé une solution mais cela ajoute une autre dépendance à la solution (une bibliothèque tierce appelée AutoIT). Étant donné que cette solution n’est pas idéale mais qu’elle fonctionne et qu’elle est la meilleure que j’ai pu trouver, je la posterai et la marquerai comme solution, mais je cherche toujours une solution «prête à l’emploi» de WatiN plus compatible avec la rest de mon code et des assemblys de test.

Merci pour vos réponses!

    Dans ma situation, je possède exactement un certificate, je dois donc choisir l’un et l’unique existant de la liste. J’ai donc un simple DialogHandler pour cela. Il suffit de cliquer sur le bouton s’il peut gérer le dialog:

     public class CertificateChoosingHandler : BaseDialogHandler { public override bool HandleDialog(Window window) { new WinButton(1, window.Hwnd).Click(); return true; } public override bool CanHandleDialog(Window window) { return window.StyleInHex == "94C808CC"; } } 

    AFAIR cette solution ne fonctionnera pas sous Windows 7.

    EDIT: J’ai oublié quelque chose d’utile. Lorsque j’ai constaté que cette solution ne fonctionnait pas dans Windows 7, j’ai découvert une option très intéressante dans les options Internet IE, quelque part dans “Niveau personnalisé”: Ne demandez pas de sélection de certificate client si aucun certificate ou un seul certificate existe . J’ai donc ajouté mon site aux sites de confiance et aux parameters modifiés, et je n’ai plus besoin d’utiliser ce DialogHandler , mais vous pouvez toujours l’utiliser même si aucun dialog ne s’affiche. Si ce n’est pas clair, ce que j’ai écrit, voici comment activer la demande de certificate dans Internet Explorer pour afficher la boîte de dialog du certificate.

    La meilleure solution que j’ai pu trouver jusqu’à présent a été publiée ici: http://andrey-zhukov.blogspot.com/2009/10/recently-i-wanted-to-choose-digital.html

    Comme indiqué dans le post, il nécessite une référence à la bibliothèque AutoIT: http://www.autoitscript.com/autoit3/index.shtml

    J’ai pris le conseil de @ prostynick et je l’ai automatisé. Fondamentalement, si vous activez le paramètre ” Ne pas demander la sélection de certificate client lorsqu’il n’y a pas de certificate ou s’il n’y a qu’un certificate ” dans les parameters de sécurité IE, la boîte de dialog complète ne s’affiche pas (si vous ne possédez qu’un seul certificate, est).

    Nous devons donc simplement nous assurer que le paramètre est activé pour l’utilisateur avant d’initialiser votre object WebBrowser. Et comme ces parameters sont stockés dans le registre, nous pouvons le faire nous-mêmes, sans déranger l’utilisateur. Voici un code qui fait exactement cela:

     // What this does is changes this setting in Internet Explorer: // Tools -> Internet Options -> Security -> Custom Level -> // Don't prompt for client certificatee selection when no certificatees // or only one certificatee exists -> ENABLE // // If you're not convinced that we need this, please reset all the security // levels in IE to the default settings, comment out this code, and try to fetch // . // // If it finishes, great! Then leave it commented out. Otherwise, curse and accept // that we need this ugly hack OR that we need to instruct people to find & change // some unholy IE setting... RegistryKey stupidBrokenDefaultSetting = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3", true); stupidBrokenDefaultSetting.SetValue("1A04", "0", RegistryValueKind.DWord); 

    Je ne sais pas si cela fonctionne pour tout le monde, ou si vous avez besoin de droits d’administrateur ou de quelque chose du genre, mais cela fonctionne pour moi.