[WCF] Problema di autenticazione con certificati

martedì 09 febbraio 2010 - 17.24

berto1982 Profilo | Newbie

Ciao a tutti,
ho realizzato un Web Service con autenticazione tramite certificati. I certificati sul server su cui faccio il deploy sono in LOCAL_MACHINE\MY. Se non eseguo l'applicazione come administrator (cosa che mi inquieta non poco) non riesco ad accedere alla chieve pubblica del certificato del servizio.
Ho provato ad assegnare i diritti sia da mmc direttamente sul certificato che con WinHttpCertCfg.exe ma non cambia niente resta l'errore che non riesce ad accedere alla chiave. Esiste una soluzione?
Grazie
Massimo

tonyexpo Profilo | Senior Member

ciao

i certificati che utilizzi per autenticazione dovresti metterli in localuser/My
altrimenti l'utente dell'apppool che esegue il servizio dovrebbe essere appunto un amministratore del sistema, cosa che garantirebbe il massimo del rischio e il minimo della sicurezza


come utente, utilizzane uno applicativo con pochi diritti (User semplice)
quando installi i servizi nel suo utente, lancia da comando
runas: <username> mmc
vai su Add Snap-in e poi certificati.
li vai in Personal


ciao

Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos

berto1982 Profilo | Newbie

Ciao,
niente da fare ho messo il certificato con chiave private in CURRENTUSER\PERSONAL (Per il server) e CURRENTUSER\THRUSTED PEOPLE (Per il client) di un utente creato sul server (Utente normale) ho configurato l'application pool della web application per eseguire come quell'utente. Ottengo sempre il messaggio:

The certificate 'CN=AuthService' must have a private key that is capable of key exchange. The process must have access rights for the private key.

Ho provato anche ad assegnare all'utente il ruole Administrators (tanto per provare) e da lo stesso errore...

Se metto i certificati in CURRENTUSER\PERSONAL (Per il server) e CURRENTUSER\THRUSTED PEOPLE (Per il client) dell'utente Administrator e configuro l'application pool per eseguire come Administrator tutto fuziona.
A questo punto mi sorge un dubbio, ma esiste una policy da settare per permettere all'utente di accedere alle private key all'interno del proprio store certificate?
Hai qualche idea??
Grazie mille
Massimo


AGGIORNAMENTO:
Ho risolto.. Nell'application Pool non avevo messo a Yes il Load User Profile... Senza non funzia!

Grazie Ancora

tonyexpo Profilo | Senior Member

esatto ;)

se non carichi il profilo nell'apppool non riesce a tirarsi su la chiave privata del certificato e quindi a crittare il messaggio

ciao
Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos

berto1982 Profilo | Newbie

Ti chiedo un'altra cosa... Volevo far passare il traffico su HTTPS. Il server web usa un certificato valido (ottenuto da un CA) ho configurato in modo da usare TransportWithMessageCredential e sistemato le cose nella configurazione in modo da usare HTTPS per il trasporto. Quando mi collego con il client mi dice:

Unhandled Exception: System.ServiceModel.Security.SecurityNegotiationException: Could not establish trust relationship for the SSL/TLS secure channel with authority 'XXX'. ---> System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

La domanda è questa... posso usare un certificato per il servizio per crittare il messaggio (come ho fatto fino ad ora) e usarne un'altro per HTTPS/SSL??

Grazie
Massimo

tonyexpo Profilo | Senior Member

Ciao, scusa il ritardo ;)

x l'errore verifica di aver inserito tra i certificati Trust e la relativa CA tra le Trust Roots sul sistema client
e verifica anche che non sia attiva la revoca dei certificati se usi un certificato di test, altrimenti sarà sempre invalidato


x la questione dei due certificati: non è possibile di default perchè la configurazione del certificato server è unica per l'HTTPS e per l'autenticazione, altrimenti puoi creare un custo binding che utilizza 2 diversi certificati

ciao

Antonio Esposito
MCTS, MCP

http://blogs.dotnethell.it/espositos
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5