2017-05-02 4 views
0

Chrome 58 deprecates certificats auto-signés qui omettent le nom du sujet alternatif (SAN). J'utilise Mono.Security.X509 X509CertificateBuilder() pour créer un certificat pour un service Windows OWIN sur « localhost », qui permet au navigateur de communiquer avec un scanner TWAIN. Le certificat définit actuellement uniquement le nom commun de manière à ce qu'il ne soit pas suffisant pour Chrome 58.Comment définir X509 SubjectAltName (SAN) en utilisant Mono.Security?

Quelle est la méthode correcte pour créer un certificat auto-signé qui permet à Chrome de communiquer avec le service OWIN sur localhost, à l'aide de Mono.Security.X509 ?

RSA subjectKey = new RSACryptoServiceProvider(2048); 

    X509CertificateBuilder cb = new X509CertificateBuilder(3); 
    cb.SerialNumber = GenerateSerialNumber(); 
    cb.IssuerName = "CN=localhost"; 
    cb.NotBefore = notBefore; 
    cb.NotAfter = notAfter; 
    cb.SubjectName = "CN=localhost"; 
    cb.SubjectPublicKey = subjectKey; 
    cb.Hash = "SHA256"; 

    byte[] rawcert = cb.Sign(subjectKey); 
    PKCS12 p12 = new PKCS12(); 
    p12.Password = password; 

    Hashtable attributes = GetAttributes(); 
    p12.AddCertificate(new X509Certificate(rawcert), attributes); 
    p12.AddPkcs8ShroudedKeyBag(subjectKey, attributes); 

    return p12.GetBytes(); 
+0

Je sauvagement devinai cet ajout « var san = new SubjectAltNameExtension (nouvelle chaîne [0], nouvelle chaîne [1] { "DNS: localhost"}, nouvelle chaîne [1] { "IP: 127.0.0.1"}, nouvelle chaîne [1] { "URI: https: // localhost"}); cb.Extensions.Add (san); ' qui provoque l'erreur _System.FormatException: chaîne d'entrée n'était pas dans un format correct._ – Hintz

Répondre