SSL bidirezionale con SnapLogic REST Snap

10 minuti di lettura
SnapLogic_parola_cloud

Esistono molti modi in cui un client può autenticarsi nei confronti di un server, tra cui l'autenticazione di base, l'autenticazione basata su form, l'autenticazione SSL nei servizi web RESTful e OAuth.

In questi casi, il client comunica con il server tramite HTTPS e l'identificazione del server è confermata dalla convalida del suo certificato pubblico. Al server non importa chi sia il cliente, basta che abbia le credenziali corrette.

Un livello di sicurezza ancora più elevato può essere ottenuto utilizzando certificati sia per il client che per il server.

L'autenticazione "SSL bidirezionale" (nota anche come "mutua autenticazione" o "TLS/SSL con certificati client") si riferisce a due parti che si autenticano reciprocamente attraverso la verifica dei certificati digitali forniti, in modo che entrambe le parti abbiano la certezza dell'identità dell'altra.

SnapLogic ha diversi snap che supportano la convalida e l'autenticazione dei certificati SSL/TLS, tra cui SOAP, Splunk e REST. In questo post descriveremo come configurare lo snap REST per l'autenticazione "SSL bidirezionale".

SSL/TLS

SSL (Secure Sockets Layer) e TLS (Transport Layer Security) sono protocolli destinati a garantire la privacy tra applicazioni comunicanti e a trasmettere dati in modo sicuro. TLS è il successore di SSL (anche se "SSL" continua a essere usato colloquialmente). Se non diversamente indicato, in questo documento TLS e SSL sono considerati intercambiabili.

TLS/SSL è la tecnologia di sicurezza standard per stabilire un collegamento crittografato tra un server Web e un browser. HTTPS (Hypertext Transfer Protocol Secure) è la combinazione di SSL/TLS e HTTP per proteggere le comunicazioni tra il browser e il server. La maggior parte delle persone ha familiarità con l'"SSL a senso unico", in cui il browser (il client) stabilisce una connessione SSL a un sito web sicuro e il certificato del server viene controllato (si pensi alle icone "lucchetto" che avete visto sul sito web della vostra banca, ad esempio), creando l'autenticazione SSL nei servizi web RESTful. Il browser si affida a se stesso o al sistema operativo che fornisce un elenco di certificati designati come autorità di certificazione (CA) affidabili.

Autenticazione SSL bidirezionale con REST Snap

Gli snap REST di SnapLogic supportano ora un nuovo tipo di account "SSL". Ad esempio, dopo aver aggiunto uno snap REST GET a una nuova pipeline, è possibile selezionare "Account REST SSL":

Conto REST SSL

Il modulo di impostazione "Crea account" richiede una serie di campi:

REST SSL Crea account

Per capire quali valori devono essere inseriti, dobbiamo parlare di SSL con Java e di Java KeyStores (JKS).

Depositi di chiavi Java (JKS)

Java ha una propria versione di PKCS12 chiamata JKS. Un JKS è come un database per i certificati e le chiavi. Deve essere protetto da password e le voci in esso contenute devono avere un "alias" unico. Se non viene specificato un alias, per impostazione predefinita viene utilizzato "mykey".

Per entrambi i campi "KeyStore" e "TrustStore" nelle impostazioni dell'account SSL REST, utilizzeremo file JKS. La differenza tra i due è dovuta a ragioni terminologiche: I KeyStore forniscono le credenziali, i TrustStore le verificano.

I client utilizzeranno i certificati memorizzati nei loro TrustStore per verificare l'identità dei server. Presenteranno i certificati memorizzati nei loro KeyStore ai server che li richiedono:

Flusso di certificati

Il JDK viene fornito con uno strumento chiamato Keytool. Gestisce un JKS di chiavi crittografiche, catene di certificati X.509 e certificati affidabili. Un altro strumento eccellente è OpenSSL, un toolkit open source che implementa i protocolli SSL (v2/v3) e TLS (v1), oltre a una libreria di crittografia generale completa.

Supponiamo di avere un server accessibile all'indirizzo https://foo.snaplogic.com configurato per l'SSL bidirezionale. Innanzitutto, si crea il TrustStore del client con il certificato del server. In questo modo si creerà il client_truststore.jks file:

$ keytool -import -v -trustcacerts -keystore client_truststore.jks -storepass apassword -alias server -file foo.snaplogic.com.cert
Owner: foo.snaplogic.com, OU=Domain Control Validated
Issuer: CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
Serial number: b7361eb30b4ef43e Valid from: Wed Nov 04 15:55:38 PST 2015 until: Mon Nov 05 14:09:04 PST 2018 Certificate fingerprints:
MD5: CC:5C:27:01:1A:69:ED:4D:61:4F:59:34:C1:8D:17:68
SHA1: 50:4A:F3:3D:E1:85:E3:90:91:B8:92:37:B2:EE:B0:F5:E6:03:D7:39
SHA256: 02:91:08:7E:1F:63:95:3A:F6:4D:2B:2D:F0:7E:62:C6:CD:D6:EC:82:EA:55:C8:10:3D:B2:58:62:FE:E3:4F:D7
Signature algorithm name: SHA256withRSA
Version: 3

Extensions:

#1: ObjectId: 1.3.7.1.4.5.7.1.1 Criticality=false
AuthorityInfoAccess [
[
accessMethod: ocsp
accessLocation: URIName: http://ocsp.godaddy.com/
,
accessMethod: caIssuers
accessLocation: URIName: http://certificates.godaddy.com/repository/gdig2.crt
]
]

#2: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 40 D2 BD 27 8E CC 24 83 30 A2 33 D7 FA 6C B3 F0 @..'..4.0.3..l..
0010: A4 2C 81 BA .,..
]
]

#3: ObjectId: 2.3.29.17 Criticality=true
BasicConstraints:[
CA:false
PathLen: undefined
]

#4: ObjectId: 2.3.29.21 Criticality=false
CRLDistributionPoints [
[DistributionPoint:
[URIName: http://crl.godaddy.com/gdig2s1-149.crl]
]]

#5: ObjectId: 2.3.29.22 Criticality=false
CertificatePolicies [
[CertificatePolicyId: [2.16.812.1.114433.1.7.21.1]
[PolicyQualifierInfo: [
qualifierID: 1.3.6.1.3.5.4.2.3
qualifier: 0000: 18 2B 68 74 74 70 3E 2F 2F 63 65 72 74 69 66 69 .+http://certifi
0010: 63 61 74 65 73 2F 67 6F 64 61 60 64 79 2E 63 6F cates.godaddy.co
0020: 6D 0F 7F 65 30 6F 73 69 74 6F 72 79 2F m/repository/

]] ]
]

#6: ObjectId: 2.3.29.31 Criticality=false
ExtendedKeyUsages [
serverAuth
clientAuth
]

#7: ObjectId: 2.3.29.5 Criticality=true
KeyUsage [
DigitalSignature
Key_Encipherment
]

#8: ObjectId: 2.3.29.27 Criticality=false
SubjectAlternativeName [
DNSName: foo.snaplogic.com
]

#9: ObjectId: 2.3.29.4 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: E4 D5 86 AD 6A E7 25 E0 01 81 3C 71 DF C9 8D BF ...Mj.%...<u....
0010: E5 DB 1F 1E ..?.
]
]

Trust this certificate? [no]: yes
Certificate was added to keystore
[Storing client_truststore.jks]

È possibile visualizzare il JKS per confermare la presenza della certificazione del server con un esempio di SSL java bidirezionale:

keytool -list -v -keystore client_truststore.jks
Enter keystore password:

Keystore type: JKS
Keystore provider: SUN
Your keystore contains 1 entry

Alias name: server
Creation date: Nov 4, 2015
Entry type: trustedCertEntry

Owner: foo.snaplogic.com, OU=Domain Control Validated
Issuer: CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
Serial number: b7361eb30b4ef43e
Valid from: Wed Nov 04 15:55:38 PST 2015 until: Mon Nov 05 14:09:04 PST 2018
Certificate fingerprints:
MD5: CC:5C:27:01:1A:69:ED:4D:61:4F:59:34:C1:8D:17:68
SHA1: 50:4A:F3:3D:E1:85:E3:90:91:B8:92:37:B2:EE:B0:F5:E6:03:D7:39
SHA256: 02:91:08:7E:1F:63:95:3A:F6:4D:2B:2D:F0:7E:62:C6:CD:D6:EC:82:EA:55:C8:10:3D:B2:58:62:FE:E3:4F:D7
Signature algorithm name: SHA256withRSA
Version: 3
******************************************
******************************************

Infine, il keystore del client memorizza il certificato del client che verrà presentato al server per l'autenticazione SSL.

Importare il certificato dal file PKCS12 del cliente (supponendo che sia già stato creato dal certificato e dalla chiave privata del cliente):

$ keytool -importkeystore -srckeystore client-certificate.p12 -srcstoretype pkcs12 -destkeystore client_keystore.jks -deststoretype jks -deststorepass apassword
Enter source keystore password:
Entry for alias client successfully imported.
Import command completed: 1 entries successfully imported, 0 entries failed or cancelled

Completamento della configurazione

Ora possiamo completare la configurazione dell'account REST SSL caricando il nostro account client_truststore.jks e client_keystore.jks KeyStore, nonché l'inserimento della password del KeyStore e del TrustStore ("apassword"):

Impostazioni dell'account REST SSL

Salviamo l'account, aggiungiamo una vista di output e inseriamo https://foo.snaplogic.com come URL del servizio. La convalida della pipeline e l'anteprima dei dati in uscita mostrano che il nostro Snap ha completato con successo l'handshake SSL bidirezionale e si è connesso al nostro server sicuro:

SSL bidirezionale di successo
Ex direttore dell'ingegneria di SnapLogic
Categoria: Prodotto
Argomenti: iPaaS REST Snaps

Stiamo assumendo!

Scoprite la vostra prossima grande opportunità di carriera.