Lunghe ore di lotta con la creazioni di certificati e la configurazione del server per fare parlare un token issuer e dei servizi WCF. Un piccolo riassunto per i malcapitati che si trovassero in situazioni simili
- Creazione dei certificati
Un certificato è ottenibile o facendo richiesta a una certification authority (CA)o creandolo con il tool make cert. Il certificato fai da te è vivamente sconsigliato per applicazioni da portare in produzione ma va bene per i propri esperimenti di sviluppo. Per creare dei certificati per lo scambio di informazione solitamente si utilizza il formato pkcs#12 che si "manifesta" in un file con estensione .pfx.
Sia con il makecert che con la cert. auth. di windows 2003 non si riesce ad ottenere un file di certificato in quel formato (se qualcuno sa indicarmi la via gli sarò grato per avermi fatto rispamiare un passaggio :) ) Quello che si ottiene è un file di certificato .cer e una chiave privata memorizzata su un file (di solito con estensione .pvk)
Per ottenere un certificato da una CA basta fare una richiesta di certificato nell'apposito form web che i server CA mettono a disposizione e aspettare che qualcuno approvi la richiesta e vi fornisca il file di certificato approvato.
Per generare un certificato in proprio utilizzando il make cert possiamo fare come segue e volendo fare le cose per bene ci generiamo anche una CA casereccia che garantisca il certificato :
makecert -pe -n "CN=TempCA" -r -a sha1 -sky signature -sv TempCA.pvk TempCA.cer
Il risultato dell'operazione saranno i due file .cer e .pvk
Ok, a questo punto generiamo il nostro certificato per il servizio WCF firmato dalla prestigiosissima TempCA appena creata :)
Makecert -pe -ic TempCA.cer -iv TempCA.pvk -iky signature -sky exchange -eku 1.3.6.1.5.5.7.3.1 -sp "Microsoft RSA SChannel Cryptographic Provider" -n "CN=SVCWCFCER" -sy 12 -sv svc_cert.pvk svc_cert.cer
i parametri -ic e -iv si riferiscono ai file della CA che abbiamo ottenuto nel primo passo, particolarmente importante è il parametro -sky exchange che sottolinea l'uso della chiave per effettuare encryption.
Adesso per potere sfruttare il nostro certificato ci serve il famoso file .pfx, rilanciamoci a riga di comando per ottenerlo
pvk2pfx -pvk svc_cert.pvk -spc svc_cert.cer -pfx svc_cert.pfx
Abbiamo cosi ottenuto il nostro svc_cert.pfx pronto per l'uso. Il tool pvk2pfx lo potete trovare anche nell'sdk di vista..
2. Importazione nello store della localMachine
Adesso non resta che configurare la macchina che andrà ad utilizzare il certificato, per fare questo:
- aprite la mmc di windows e aggiungete lo sna p in certificati relativi al local computer (ovvero lo store di sistema "localMachine" )
- per prima cosa importate il certificato della CA(il nostro file tempCA.cer) nello store delle Trusted Certification Authorities
- Nella cartella local computer\Personal (che corrisponde allo store localMachine\my) importate il certificato svc_cert.pfx
Se l'operazione al secondo punto fallisce dandovi l'errore : "An internal error occurred. This can be either the user profile is not accessible or the private key that you are importing might require a cryptographic service provider that is not installed on your system"
In questo caso probabilmente avete qualcosa che non va nella configurazione dell'accesso alla cartella "....\Documents and settings\All Users\Application Data\Microsoft\Crypto\RSA" in questo caso date un'occhiata a questo articolo che vi spiega come rimediare.
Un consiglio non installate il certificato dal wizard che viene fuori dal doppio click sul file .pfx perchè solitamente vi installa il certificato nello store dell'utente corrente e anche se poi lo spostate tramite console nello store della localmachine la chiave privata fa giri strani e poi ci si incasina con le autorizzazioni di accesso sulla chiave..
A questo punto per concludere il tutto (in base all'utilizzo di cui avete bisogno )basta specificare il certificato nel webconfig (o appconfig) e fornire all'utente con cui gira l'host del servizio che utilizzerà il certificato le autorizzazioni di accesso alla chiave privata del nostro "CN=SVCWCFCER" , la maniera più semplice e consigliata per farlo è utilizzare il tool di WSE 3, altrimenti andate nella famosa cartella "\Documents and settings\All Users\Application Data\Microsoft\Crypto\RSA" e cercate di capire qual'è la chiave che vi interessa (probabilmente la più recente della cartella ;) )
PS
Per chi non volesse crearsi una CA per il certificato può in alternativa creare un certificato self signed e importarlo sia nella localmachine\my che nella trusted root CAs. Il comando per generare il certificato in questione è questo :
Makecert -pe -r -sky exchange -eku 1.3.6.1.5.5.7.3.1 -sp "Microsoft RSA SChannel Cryptographic Provider" -n "CN=SVCWCFCER" -sy 12 -sv svc_cert.pvk svc_cert.cer