Sto lavorando a un servizio WCF che deve essere utilizzato da un client non sviluppato da me e non è .NET (probabilmente Java).Autenticazione SSL reciproca con WCF: no CertificateRequest e CertificateVerify nella fase di handshake
In ogni caso, il servizio deve supportare l'autenticazione SSL reciproca, dove sia il servizio che il client autenticano con certificati X.509 certificati al livello di trasporto. I certificati sono stati scambiati tra le parti in un momento precedente.
Il mio problema è che non riesco a ottenere la corretta configurazione di WCF in modo tale che l'autenticazione del certificato client funzioni correttamente. Quello che mi aspetto è che, come parte del handshake TLS, il server include anche un Certificate Request
, come si vede qui sotto:
A seguito di questo, il client dovrebbe rispondere con un `certificato Verificare' tra l'altro:
L'(ultimo) di configurazione del servizio è questo. Sto utilizzando un'associazione personalizzata, con la modalità di autenticazione impostata su MutualSslNegotiated
.
<bindings>
<customBinding>
<binding name="CarShareSecureHttpBindingCustom">
<textMessageEncoding messageVersion="Soap11" />
<security authenticationMode="MutualSslNegotiated"/>
<httpsTransport requireClientCertificate="true" />
</binding>
</customBinding>
</bindings>
...
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" httpHelpPageEnabled="false" />
<serviceCredentials>
<serviceCertificate findValue="..." storeLocation="LocalMachine" x509FindType="FindByIssuerName" storeName="My" />
<clientCertificate>
<certificate findValue="..." storeName="My" storeLocation="LocalMachine" x509FindType="FindByIssuerName"/>
</clientCertificate>
</serviceCredentials>
</behavior>
</serviceBehaviors>
Il Server Ciao parte della stretta di mano si presenta così per tutte le configurazioni di servizio che ho provato, senza CertificateRequest.
Altre cose che debbono essere indicati:
- Il servizio è self hosted e l'ascolto su una porta non predefinita (non 443). Il certificato SSL del server è stato associato a questa porta.
- Ho anche provato uno
basicHttpBinding
e unowsHttpBidning
con la modalità di sicurezza impostata suTransport
e l'autenticazione client impostata suCertificate
, senza risultati (gli stessi risultati effettivamente).
Qualsiasi idea sarebbe apprezzata.
hai cercato di abilitare WCF tracciare e vedere se ci sono errori dettagliate in là? – UserControl
@UserControl: Sì, la traccia è abilitata ma non ci sono purtroppo errori correlati. –
Wild shot - Qualche possibilità che ci siano alcuni certificati di root dalla catena di fiducia del cert del client mancante sul lato server? Cioè, hai il certificato del cliente, ma mancano alcuni certificati di root nella sua catena ...? –