Ciao, a tutti.
Sto riscontrando uno strano problema sull'utilizzo di Apache, SSL e certificati client.

Attualmente ho un Apache in cui nella cartella htdocs vi sono diverse applicazioni (sviluppate in html, php e javascript) che richiedono di essere gestite in https con controllo dei certificati (in alcuni casi solo il certificato server, in altri anche il certificato client).
Pertanto nel VirtualHost di apache relativo alla gestione dell'SSL sulla porta 443, nel ramo principale ho settato tutti i path relativi ai certificati che utilizzo e ho definito SSLVerifyClient none.
Ho poi definito delle <Location> relative alle varie applicazioni per ognuna delle quali ho specificato se settare none o require la SSLVerifyClient (e se viene settato require imposto anche a 10 la SSLVerifyDepth).
Inoltre in ogni Location setto poi un ProxyForward dato che, in produzione, l'architettura prevede di buttare le connessioni su un'altra macchina (il forward avviene su url in http sulla porta 80 e nell'ambiente di sviluppo forwardo sulla macchina stessa).

L'accesso ai siti che prevedono il controllo del certificato client avviene utilizzando delle carte e dei lettori NFC, l'accesso ai siti che prevedono solo il controllo del certificato server non utilizzano questi dispositivi.

Nelle pagine web faccio delle interrogazioni ad un DB effettuando chiamate Ajax con XMLHttpRequest a dei .php che a loro volta si connettono ad un database MySQL e tornano, come response, dei dati in formato JSon.

Di norma il tutto funziona.
Se effettuo delle connessioni alle applicazioni che non prevedono il controllo del certificato client non viene presentato il pop-up del certificato e non viene chiesto il PIN, cosa che invece avviene se accedo a siti che prevedono il controllo sul certificato client.
Una volta autenticato il recupero dati dal DB mediante chiamate Ajax a .php funziona.

C'è però un caso che mi sta dando problemi e non riesco a capire.
In una delle applicazioni io devo:
- posizionare una carta sul lettore ed effettuare l'autenticazione
- una volta dentro il sito, devo mettere sul lettore un'altra carta e recuperare dei dati (presenti sulla carta) tramite un ActiveX.
- Sulla base dei dati recuperati dalla seconda carta, devo effettuare un recupero dati dal database.

Ebbene in questo particolare caso il recupero dati fallisce.
Su IE9 la response alla chiamata Ajax torna null o "" (a naso scade un qualche timeout e non riesce neanche a connettersi alla pagina tant'è che non mi torna uno degli errori di connessione al DB che gestisco nel php).
Su IE10 mi da come errore un NetworkError 0x2F7D che, cercando su internet, ho l'impressione che sia legato alla sicurezza.

La cosa particolare è che, settando nella root del VirtualHost SSLVerifyClient require e SSLVerifyDepht 10 questo errore non si presenta più!

Il path della url che passo all'ajax è assoluta, quindi mi aspetto che passi nella Location relativa a quella cartella mentre, impressione mia, è come se, cambiando la carta, per qualche strano motivo la richiesta Ajax ignori la Location definita nel VirtualHost prendendo il settaggio della root del medesimo.

Vi è mai capitato qualcosa del genere? Avete qualche consiglio a riguardo?

Un'altra possibilità che mi è venuta in mente è quella di tenere SSLVerifyClient require nella root ma, in quel caso, questo settaggio prende il sopravvento su quello delle Location in cui è messo a none e quindi non mi funzionano gli altri siti, c'è qualche settaggio da impostare nelle location in modo da far scegliere il loro settaggio al posto di quello della root del VirtualHost anche quest'ultimo è più restrittivo?

Ciao e grazie a tutti
Sandro