Générer son propre certificat SSL pour IIS

Voici un petit tutoriel pour générer un certificat SSL Self Signed (auto signé) pour IIS. Ceci permet d’exposer un site web sur le port 443 avec un certificat SSL gratuit.

A noter que les navigateurs internet signaleront que le certificat n’a pas été signé par une autorité reconnue mais c’est la seule façon de ne pas dépenser une fortune dans un véritable certificat SSL signé par VeriSign ou une autre entité proposant ce type de service.

ETAPE 1 : Télécharger et installer le Resource Kit Tools de IIS

Disponible ici pour ISS 6.
Suivez simplement les étapes d’installation : next, next, next…

ETAPE 2 : Lancer SelfSSL

Allez dans le menu démarrer, puis IIS Resources, SelfSSL, SelfSSL. Cela va lancer une fenêtre Command Shell.

ETAPE 3 : Générer votre certificat

Tappez la ligne de commande suivante

C:\Program Files\IIS Resources\SelfSSL>selfssl.exe /N:CN=MYMACHINENAME /K:1024 /V:10950 /S:1 /P:443

K = 1024 : La clé sera sur 1024 bits
V = 1095 : Le certificat sera valide pour 1095 jours (30 ans !)
S = 1 : Le certificat sera appliqué sur le site IIS portant l’ID = 1
P = 443 : Le port utilisé sera le port 443 (recommandé)

ETAPE 4 : C’est terminé

Allez sur votre site avec votre navigateur préféré
https://monserveur/ et vous constaterez que votre certificat SSL est bien appliqué

Site web IIS derrière un reverse Proxy Apache

Prenez un site IIS quelconque, mettez un reverse proxy Apache (Apache 2.2 sur Debian dans mon cas) et obtenez des erreurs aléatoires code 502 correspondant à des erreurs proxy (proxy error).

Globalement, cela va fonctionner, mais vous obtiendrez des erreurs aléatoires 502, de temps en temps mais bien trop souvent pour que cela soit acceptable !

Je ne saurai malheureusement pas en mesure de vous expliquer pourquoi, mais je suis en mesure de vous dire comment résoudre ce problème.

Il suffit d’ajouter 2 lignes dans votre configuration apache :

SetEnv force-proxy-request-1.0 1 SetEnv proxy-nokeepalive 1 

Note importante : Vous devrez mettre ces deux lignes à l’endroit adéquat de votre configuration Apache. Par exemple juste après la directive ProxyRequest.

Recharger votre configuration Apache (reload ou restart du service Apache) et le tour est joué, plus d’erreur 503 avec votre site IIS et votre serveur Reverse Proxy Apache.

Generation de certification PFX pour publier un add-in Office 2007

Vous venez de réaliser que le fichier PFX généré par Visual Studio 2008 lors de la publication de vos add-in Office 2007 (Publish avec Click Once) expirait très (trop) rapidement. Pas de problème vous dites vous, je vais me générer un petit fichier PFX des familles qui me permettra d’avoir un certificat qui expire en 2050.

Et google vous amène sur cette page… elle est pas belle la vie !

ETAPE 1 : Petite leçon de vie

Un fichier PFX (Personnal Information Exchange) contient un clé publique et une clé privée qui permet à notre ami Visual Studio 2008 de garantir la sécurité et l’intégrité de votre application (un add-in pour Office 2007 dans notre cas).

ETAPE 2 : Génération de la clé publique et de la clé privée

makecert.exe -sv MyPrivateKey.pvk -n “CN=EfelantGuru” MyPublicKey.cer

L’option -e permet de préciser la date de fin de validiter. Mais je vous laisse un peu chercher dans la documentation MSDN les options qui vous conviennent.

Note : l’outil en ligne de commande makecert est disponible dans le SDK de Windows
Windows Server 2003 SDK
Windows Server 2008 SDK

ETAPE 3 : Création du PFX

pvk2pfx.exe -pvk MyPrivateKey.pvk -spc MyPublicKey.cer -pfx MyPFX.pfx -po votre_mot_de_passe

Note : L’outil en ligne de command pvk2pfx est également disponible dans le SDK de Windows Server.

ETAPE 4 : Ajout dans Visual Studio 2008

Un petit clic droit dans Visual Studio sur votre projet, puis proprerties, vous permettra de préciser le certificat ainsi généré à ClickOnce dans l’onglet “Signing”. Vous voilà prêt à balancer votre Add-in dans la face du monde entier.

Le tour est joué, presque trop facile !

Un petit article intéressant pour ceux qui veulent en savoir plus sur le sujet : http://msdn.microsoft.com/en-us/library/bb172338(VS.85).aspx

Les droits d’auteur qui vont bien (merci Maxime) :
http://blogs.msdn.com/maximelamure/archive/2007/01/24/create-your-own-pfx-file-for-clickonce.aspx

Convertir un objet Image (ou Bitmap) en objet IPictureDisp

Ne vous méprenez pas, il est parfois très utile de pouvoir faire simplement ce type de conversion. J’ai rencontré ce problème lors de la réalisation d’un Add-in pour Outlook 2007 avec Visual Studio 2008 alors que je souhaitais ajouter une image à un CommandBarButton (bouton dans Outlook 2007).

L’opération semble simple en théorie. Dans la pratique vous serez confronté à une difficulté de taille : Être capable de créer un objet IPictureDisp contenant votre image.

Voici comment procéder pour ajouter une image (icône) à votre CommandBarButton.

ETAPE 1 : Ajout d’une image dans votre projet

Ajouter votre image à vos ressources dans Visual Studio 2008. Il suffit pour cela de cliquer sur le répertoire Properties dans votre projet Visual Studio, puis de cliquer sur Ressources et d’ajouter votre image.

ETAPE 2 : Ajouter la classe permettant de convertir vos images au format IPictureDisp

Ajouter une nouvelle classe à votre projet que vous appellerez AxHostConverter. Pour réaliser cela, il suffit faire clique droit dans VS 2008, puis Add New Item, Class…

Le code de cette classe sera le suivant :

class AxHostConverter : AxHost

{

    private AxHostConverter() : base(“”) { }

    static public stdole.IPictureDisp ImageToPictureDisp(Image image)

    {

        return (stdole.IPictureDisp)GetIPictureDispFromPicture(image);

    }

    static public Image PictureDispToImage(stdole.IPictureDisp pictureDisp)

    {

        return GetPictureFromIPicture(pictureDisp);

    }

}

Explications : Cette classe permettra de réaliser la conversion d’un objet Image (ou Bitmap puisque ce dernier hérite du premier !). L’explication technique (en version courte est simple) tient dans le fait que la classe AxHost permet de réaliser cette conversion via deux méthodes statiques. le problème est que ces méthodes ne sont pas accessible (protected) et qu’il est nécessaire d’encapsuler ces méthodes dans une classe de notre fabrication que nous exposerons publiquement afin de pouvoir les utiliser librement.

ETAPE 3 : Ajout d’une image à votre bouton

Via le code, juste après avoir créé votre bouton, vous pouvez faire un appel du type :

myCommandBarButton.Picture = AxHostConverter.ImageToPictureDisp((Image)Properties.Resources.monImage);

 

Note : “myCommandBarButton” devra être remplacé par le nom de votre bouton. “monImage” sera le nom de votre image dans les Ressources de votre projet Visual Studio. vous noterez également la conversion de la ressource Bitmap en objet Image afin de respecter la type d’entrée. Bitmap héritant de Image, cela ne pose aucun problème.

Conclusion :

Tout ça pour ça me direz vous. Et bien oui, mais parfois, une petite lutte acharnée permet de faire de belles choses.

Dans un prochain billet, je tâcherais d’expliquer comment gérer la transperence sur votre nouveau bouton ainsi créé.