Come posso risolvere i problemi relativi alla catena di certificati e ai certificati autofirmati per Amazon API Gateway con domini personalizzati e TLS reciproco abilitato?

Ultimo aggiornamento: 01-11-2022

Sto utilizzando l'autenticazione reciproca TLS (Transport Layer Security) con Amazon API Gateway con un nome di dominio personalizzato. Ricevo errori relativi alla catena di certificati o ai certificati autofirmati. Come risolvere questo problema?

Breve descrizione

Risoluzione

Per un elenco di messaggi di errore specifici durante il richiamo dell'API Amazon API Gateway, esegui un comando curl simile al seguente:

$ curl -v https://mtls.example.info/test-apigw-mtls --key self-signed.key --cert self-signed.pem:"example"

Errori del client

«curl: (58) impossibile caricare il certificato del client PEM, errore OpenSSL errore:02001002:libreria di sistema:fopen:Nessun file o directory di questo tipo, (nessuna chiave trovata, passphrase errata o formato di file errato?»

Questo errore indica che il file PEM ha un nome, una posizione o un formato di file errati. Ad esempio, il formato del file del certificato archiviato localmente è .crt, ma il file .pem è stato utilizzato nella richiesta API. Per risolvere questo problema, assicurati che il certificato del client locale abbia il formato e il nome corretti.

«curl: (6) impossibile risolvere l'host: mtls.example.info»

Il client non è stato in grado di risolvere il nome di dominio. Assicurati che il nome di dominio e la configurazione siano corretti.

«url: (58) schannel: impossibile importare il file di certificazione self-signed.pem, l'ultimo errore è 0x80092002»

Questo errore indica un problema con il file .pem del client locale. Assicurati che il file .pem includa il nome e il formato corretti.

«curl: (58) impossibile impostare il file della chiave privata: 'self-signed.key' tipo PEM»

Questo errore indica un problema con il file del client locale. Assicurati che la chiave privata fornita nella richiesta HTTP sia presente e corretta.

Errori del server

Accesso negato. Motivo: certificato autofirmato.

Verifica che il certificato client autofirmato nella richiesta API non sia alterato o danneggiato.

I seguenti elementi devono corrispondere esattamente:

  • Il modulo della chiave privata (private.key) utilizzato per firmare il certificato autofirmato all'interno del truststore in Amazon S3 (bundle.crt o bundle.pem).
  • Il modulo dal certificato del client passato nella richiesta API (client.crt).

Per confrontare i due moduli, esegui i comandi OpenSSL seguenti:

$ openssl rsa -noout -modulus -in private.key
$ openssl x509 -noout -modulus -in bundle.crt
$ openssl x509 -noout -modulus -in client.crt

Nota: per produrre un valore hash più breve per un confronto più semplice, è possibile utilizzare PIPE per inviare il modulo di output in una funzione hash crittografica. Ad esempio: openssl sha1.

$ openssl [operation] -noout -modulus -in [data] | openssl sha1

Esempi di output del comando validi:

2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb

Per confermare l'integrità dei dati, verifica che non sia stata apportata alcuna modifica al loro contenuto durante l'esecuzione del comando diff:

$ diff client.crt bundle.crt