Cryptographie en c#
Pour ceux qui s'intéressent à la cryptographie, j'ai créé le projet esignpdf dans codeplex. eSignPdf permet de signer un document pdf ou de valider les signatures d'un document pdf.
Le code utilise les composants iTextSharp et BouncyCastle pour la partie crypto.
Le msi est utilisable tel que si vous devez signer numériquement un document pdf (nécessite un certificat).
Tout savoir sur l'injection SQL et le cross site scripting avec des exemples
C'est ici dans l'excellentissime article de Bryian Tan .
A lire pour se rendre compte des méthodes de piratage des sites Web et imaginer les mesures de protection.
Eviter les erreurs de certificats sur des appels https en .NET
Lorsque nous développons des applications qui font appel à des liens externes en https, nous n'avons pas en général les certificats cibles de production.
Il faut donc passer par des certificats auto signés ou des certificats gratuits (cacert). Il peut y avoir des problèmes car les certificats auto signés ne sont pas reconnus en dehors de la machine où ils ont été créés et une exception peut être générée s'il n'y a pas de correspondance entre le nom du certificat et le nom complet de l'url accédée...
Heureusement, il est possible de désactiver, en c#, les mécanismes de vérification au niveau du protocole SSL et des certificats.
Il suffit de dériver une classe de ICertificatePolicy :
public class MyPolicy: ICertificatePolicy
{
public bool
{
return true;
}
}
et d'appeler cette policy par défaut :
System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
Tous les appels System.Net (proxy client WS, WCF ou HttpWebRequest) utiliseront cette policy.
Il est important de préciser qu'il ne faut pas mettre en place cette astuce en production car elle entraîne la désactivation des mécanismes de sécurité Windows qui protègent contre certaines attaques (le phishing).
Appeler un service Web externe via un proxy avec authentification
L'appel de services Web externes à l'entreprise nécessite toujours de réaliser l'appel à travers un proxy. Ce proxy demande une authentification,de type Windows, s'il s'agit d'un Proxy ISA par exemple. S'il faut également passer un token, alors cela se complique quelque peu.
Ci-dessous, un exemple de code qui fonctionne bien dans tous les cas et qui permet de passer au proxy le token Windows du process en cours ce qui évite le stockage de données sensibles dans les fichiers de configuration :
// Création d'une instance WebProxy
IWebProxy proxy = new WebProxy(http://urlduproxy:portduproxy);
// Passe les credentials du cache au proxy
proxy.Credentials = System.Net.
CredentialCache.DefaultCredentials;
// prépare la requête
HttpWebRequest
myRequest =
(
HttpWebRequest)WebRequest.Create(http://urlduservice);
//affecte le proxy
myRequest.Proxy = proxy;
Et voilà !