Accueil : Introduction au Framework .NET : Architecture d'une application .NET : Signature retardée
Signature retardée
Si une équipe de développement contient de nombreuses personnes et que l’ensemble de l’équipe possède le fichier .snk contenant la clé privée, il y a de forte chance que la sécurité soit compromise si un développeur diffuse la clé à une tierce personne. Le framework .NET prévoit donc un mécanisme de signature retardée qui permet de confier la clé privée à un nombre restreint de personnes.
Le fonctionnement est le suivant :
- Le fichier .snk contenant la paire de clé privée/publique est confié aux personnes de confiance
- Un nouveau fichier ne contenant que la clé publique est donné à l’ensemble de l’équipe de développement.
- Ce fichier est intégré à un assemblage lors de son développement et l’option /delaysign est précisée au compilateur.
- La vérification d’intégrité de l’assemblage en cours de développement est désactivée dans le registre du développeur.
- Lors de la phase de mise en production l’assemblage est re-signé avec le fichier contenant la paire de clé publique/privée.
La procédure ci-dessous illustre la manière d’utiliser le mécanisme de signature retardée.
- Lancez l’invite de commande Visual Studio 2008.
- Générez un fichier .snk contenant une paire de clé publique/privée dans un répertoire sûr en utilisant la commande ci-dessous :
C:\secret>sn -k entreprise.snk
Microsoft (R) .NET Framework Strong Name Utility Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
Paire de clés écrite dans entreprise.snk
- Générez un fichier de clé ne contenant que la clé publique comme ci-dessous :
C:\secret>sn -p entreprise.snk entreprise.clepublique.snk
Microsoft (R) .NET Framework Strong Name Utility Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
La clé publique est écrite dans entreprise.clepublique.snk
- Créez un projet de type Class Library et nommez-le DLLSignatureRetardee.
- Implémentez la classe de la DLL comme ci-dessous :
C#
using
System;
namespace
SignatureRetardeeAssembly
{
public class
Class1
{
public static
string Hello()
{
return "Hello
world";
}
}
}
VB.NET
Public Class Class1
Public Shared
Function Hello() As
String
Return "Hello
world"
End Function
End Class
- Cliquez droit sur le projet, puis sur Properties.
- Sélectionnez l’onglet Signing, puis cochez la case Sign the assembly.
- Dans la liste déroulante Choose a strong name key file, sélectionnez Browse puis le fichier entreprise.clepublique.snk.
- Cochez la case Delay sign only.
- Compiler la solution.
- Désactivez la vérification de l’intégrité de l’assemblage en utilisant la commande suivante:
C:\SignatureRetardee\DLLSignatureRetardee\bin\Debug>sn -Vr DLLSignatureRetardee.dll
Microsoft (R) .NET Framework Strong Name Utility Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
Ajout de l'entrée de vérification pour l'assembly 'DLLSignatureRetardee,6BAD046F
F6BAA415'
- Ajoutez une application Console à la solution et nommez-la TestSignatureDifferee.
- Cliquez droit sur le projet puis sélectionnez la commande Add reference.
- Sélectionnez l’onglet Project.
- Sélectionnez DLLSignatureDifferee puis cliquez sur le bouton OK.
- Implémentez l’application comme ci-dessous :
C#
using System;
namespace TestSignatureRetardee
{
class Program
{
static void
Main(string[] args)
{
Console.WriteLine(SignatureRetardeeAssembly.Class1.Hello());
}
}
}
VB.NET
Module Module1
Sub Main()
Console.WriteLine(DLLSignatureRetardee.Class1.Hello())
End Sub
End
Module
A ce stade, l’application fonctionne bien que la clé privée n’ait pas été utilisée par le compilateur puisque la vérification de l’assemblage a été désactivée.
- Pour re-signer la DLL lors de la mise en production, utilisez la commande ci-dessous :
C:\SignatureRetardee\DLLSignatureRetardee\bin\Debug>sn -R DLLSignatureRetardee.dll \secret\entreprise.snk
Microsoft (R) .NET Framework Strong Name Utility Version 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.
Assembly 'DLLSignatureRetardee.dll' signé à nouveau