Certificati digitali e permessi NTFS
Mente si stanno tenendo le ultime sessioni della WPC mi trovo sul treno che mi riporta a casa dove mi stavo interrogando sulle cause per le quali una delle demo che avevo preparato per la sessione non ha funzionato.
Si trattava della demo a cui tenevo di più, quella dove mostravo l'utilizzo del service broker per mettere in comunicazione 2 istanze di SQL Server, su macchine differenti, facendo uso di certificati digitali.
Così come nel database mirroring, in assenza di un dominio l'unico modo per autenticare una istanza nei confronti dell'altra è attraverso un certificato digitale, sia esso prodotto da una CA esterna che auto-generato da SQL Server (o attraverso l'utiity makecert.exe).
Nel momento cruciale, quando si è trattato di importare il certificato nella seconda delle 2 istanze (nella prima era andato tutto ok), al comando
CREATE CERTIFICATE ArielTRANCert
FROM FILE = 'C:\WPC2007\Cert\ArielTRANcert.cer'
WITH PRIVATE KEY ( FILE = 'C:\WPC2007\Cert\ArielTRANcert.pvk' ,
DECRYPTION BY PASSWORD = 'PrivateKey' )
ACTIVE FOR BEGIN_DIALOG = ON;
GO
ho ottenuto un bel messaggio di errore
Msg 15208, Level 16, State 1, Line 1
The certificate, asymmetric key, or private key file does not exist or has invalid format.
Il primo pensiero è andato alla possibilità che avessi sbagliato il percorso dove si trovava il certificato o la sua private key, ma così non era. La seconda ipotesi è stata quella che il certificato fosse scaduto; l'ultima prova della demo l'avevo fatta ieri pomeriggio e tutto era andato come doveva ma non potevo escludere che la legge di Murphy ci avesse messo del suo facendo scadere il certificato tra ieri sera e questa mattina. Ma non era neanche così perchè mi ricordavo di aver specificato una "expiry date" molto lontana nel tempo ed infatti le proprietà del certificato mi confermavano che sarebbe scaduto nel 2040 (ed in questo ero stato molto previdente... :-) ).
Che cosa poteva essere? Seppur non del tutto convinto pensavo che potesse essersi danneggiato il file del certificato o quello della sua private key ma Per motivi di tempo ho deciso di soprassedere scusandomi con chi aveva avuto la pazienza di ascoltarmi fino a quel momento. Sono quindi andato avanti con le altre demo ma sempre con un angolo della mia testa a rimuginare in background sulle possibili cause.
Pochi minuti fa l'illuminazione. Mi sono ricordato che ieri sera, dopo l'ultima prova delle demo, ho riallineato tutti i file presenti sul mio portatile con quelli presenti sulle 2 virtual machine; con questa operazione sono stati resettati i permessi NTFS presenti sulla cartella di destinazione ed ereditati i nuovi dalla cartella parent. Lo stesso è avvenuto, ovviamente, per la cartella, sull'altra virtual machine, contenente i certificati relativi all'istanza sulla quale tutto è andato liscio ma la differenza sta nel fatto che mentre quest'ultima veniva eseguita nel contesto di LocalSystem (lo so, dico sempre di non utilizzarlo, ma qui si trattava di una demo... :-) ), l'altra istanza veniva eseguita come Network Service (è il default per SQL Express). Sarebbe stato sufficiente riassegnare i permessi NTFS per far girare il tutto correttamente oppure, come facevo le altre volte, non copiare l'intera cartella, ma allineare solo i file relativi ai certificati.
Bene, mi dispiace per la demo fallita, ma sono cose che possono succedere nel corso di una sessione dove il tempo è solitamente tiranno ed ancora di più questa volta dove le sessioni erano di 60 minuti. Decisamente pochi per presentare efficacemente argomenti come questo...
Bye