2016-03-08 24 views
16

Nei campioni di server di identità troviamo il codice come questo nel Startup.csCome dovrei generare il certificato di firma Identity Server

var certFile = env.ApplicationBasePath + "\\idsrv3test.pfx"; 

var signingCertificate = new X509Certificate2(certFile, "idsrv3test"); 

Come potrei fare per sostituire questo per scenari di produzione?

risposta

8

Prendi un cert dedicato - attraverso l'infrastruttura PKI o auto-generare uno:

http://brockallen.com/2015/06/01/makecert-and-creating-ssl-or-signing-certificates/

importare la chiave accoppiare nell'archivio certificati di Windows e caricarlo da lì in fase di runtime.

Per aumentare la sicurezza, alcune persone distribuiscono le chiavi su un dispositivo dedicato (chiamato HSM) o su una macchina dedicata (ad esempio dietro un firewall). Lo ITokenSigningService consente di spostare la firma del token effettivo su quella macchina separata.

12

Per la cronaca, il codice proposto nell'immagine pubblicato da Russ:

options.SigningCertificate = LoadCertificate(); 

public X509Certificate2 LoadCertificate() 
{ 
    string thumbPrint = "104A19DB7AEA7B438F553461D8155C65BBD6E2C0"; 
    // Starting with the .NET Framework 4.6, X509Store implements IDisposable. 
    // On older .NET, store.Close should be called. 
    using (var store = new X509Store(StoreName.My, StoreLocation.LocalMachine)) 
    { 
     store.Open(OpenFlags.ReadOnly); 
     var certCollection = store.Certificates.Find(X509FindType.FindByThumbprint, thumbPrint, validOnly: false); 
     if (certCollection.Count == 0) 
      throw new Exception("No certificate found containing the specified thumbprint."); 

     return certCollection[0]; 
    } 
} 
+1

in In. 4.6 'X509Store' che implementa' IDisposable' quindi non è necessario 'store.Close()'. Maggiori dettagli qui http://stackoverflow.com/questions/18475558/what-is-the-implication-of-not-using-x509store-close-method – Kuncevic

+0

@Kuncevic: grazie, ho aggiornato l'esempio. –

0

Recentemente ho deciso di rinnovare il mio processo di firma emissione di token. Se stai utilizzando Windows 10, puoi utilizzare il fantastico cmdlet di PowerShell chiamato New-SelfSignedCertificate.

Ecco il mio esempio di utilizzo:

New-SelfSignedCertificate -Type Custom 
-Subject "CN=TokenSigningForIdServer" 
-TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3") 
-KeyUsage DigitalSignature 
-KeyAlgorithm RSA 
-KeyLength 2048 
-CertStoreLocation "Cert:\LocalMachine\My" 

Assicurarsi si esegue il comando come un amministratore. È possibile ottenere i dettagli del certificato aprendo certlm.msc. Dovrebbe essere memorizzato sotto Personal \ Certificates.

La maggior parte dei flag dovrebbe essere ovvia, a parte il -TextExtention. Specifica che il campo Utilizzo chiave Enhaced è impostato sul valore "Code Signing". È possibile giocare con l'algoritmo utilizzato, la lunghezza della chiave, persino aggiungere estensioni facendo riferimento alla seguente pagina documentation.