Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Supporto alla mutua autenticazione #2

Closed
svdigital-development opened this issue Mar 22, 2021 · 0 comments · Fixed by #3
Closed

Supporto alla mutua autenticazione #2

svdigital-development opened this issue Mar 22, 2021 · 0 comments · Fixed by #3
Labels
enhancement New feature or request
Milestone

Comments

@svdigital-development
Copy link
Member

Aggiungere il supporto alla mutua autenticazione con Certificato.

Le nuove specifiche delle API Open Banking di Intesa Sanpaolo richiedono l'utilizzo di un Certificato precedentemente emesso tramite canale sicuro (webapp) per effettuare le singole chiamate.

Tutte le chiamate, sia in ambiente "live" che "sandbox", sono state duplicate al fine di supportare sia la chiamata normale attuale (senza mutua autenticazione) sia la versione con mutua autenticazione.

Le chiamate sono state duplicate in modo da deprecare le attuali senza eliminarle all'improvviso.

Quindi per il momento dev'essere possibile supportare entrambe le possibilità, a livello di client.

Implementazione

Per implementare la mutua autenticazione è sufficiente:

  • Accettare il Certificato SSL da usare
  • Accettare la passphrase di quel Certificato
  • Aggiungere tali informazioni alla richiesta cURL (che viene effettuata tramite https://github.com/guzzle/guzzle)

Dettagli Certificato SSL

La webapp fornisce il Certificato SSL in formato .p12. La passphrase viene invece fornita all'interno di un normale file txt.

Per passare un Certificato .p12 a Guzzle è sufficiente fare così:

$response = $this->HttpClient->request( $method, $url, [
	RequestOptions::CERT => [
		'/path/to/certificate.p12',
		'MY_PASSPHRASE',
	],
	// ...
	// ...

Tuttavia, Guzzle non supporta ancora i certificati PKCS#12-encoded:

guzzle/guzzle#2413

La PR è "Merged", ma la Milestone non è ancora chiusa:

https://github.com/guzzle/guzzle/milestone/15

Sarebbe necessario attendere l'uscita della 7.3.0 (e supportarla come versione minima) oppure modificare con l'uso di un Certificato decodificato "normale" e poi fare una successiva release per supportare anche il formato PKCS#12-encoded.

Lo stesso codice sopra riportato può essere trasformato come segue in caso di coppia Certificato+private key plain:

$response = $this->HttpClient->request( $method, $url, [
	RequestOptions::CERT => [
		'/path/to/certificate.pem', // or ".crt"
		'MY_PASSPHRASE',
	],
	RequestOptions::SSL_KEY => [
		'/path/to/certificate.key',
		'MY_PASSPHRASE',
	],
	// ...
	// ...

Per trasformare un certificato *.p12 in due file .pem (o crt) e .key (chiave privata) lanciare i seguenti comandi.

Per generare il certificato:

openssl pkcs12 -in /path/to/certificate.p12 -out /path/to/certificate.pem -clcerts -nokeys

e per generare la chiave privata:

openssl pkcs12 -in /path/to/certificate.p12 -out /path/to/certificate.key -nocerts -nodes

Entrambi i comandi chiederanno l'inserimento della passphrase, ovviamente.

Chiaramente è auspicabile, non appena possibile, usare il formato p12.

URL

Oltre a passare il Certificato SSL come sopra indicato, è necessario usare URL differenti in caso di mutua autenticazione.

Tutte le rotte sono uguali con la sola differenza seguente:

$this->ApiBaseUri = sprintf( '%s/%s/v1', $this->BaseUri, $this->Live ? 'twa/live' : 'twa/sandbox' );

anzichè (attuale):

$this->ApiBaseUri = sprintf( '%s/%s/v1', $this->BaseUri, $this->Live ? 'live' : 'sandbox' );

Come abilitare Mutual Authentication

Se possibile, evitare di aggiungere altri parametri al costruttore.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
1 participant