我正在使用具有自定網域名稱的 Amazon API Gateway 進行相互 Transport Layer Security (TLS) 身分驗證。我收到憑證鏈或自我簽署憑證錯誤。我該如何對此錯誤進行疑難排解?
簡短描述
在開始之前,請確保您已經:
解決方案
如需叫用 Amazon API Gateway API 時的特定錯誤訊息清單,請執行類似下列內容的 curl 命令:
$ curl -v https://mtls.example.info/test-apigw-mtls --key self-signed.key --cert self-signed.pem:"example"
用戶端錯誤
"curl: (58) could not load PEM client certificate, OpenSSL error error:02001002:system library:fopen:No such file or directory, (no key found, wrong pass phrase, or wrong file format? (curl:(58) 無法載入 PEM 用戶端憑證,OpenSSL 錯誤,錯誤:02001002:系統程式庫:fopen:沒有這類的文件或目錄,(找不到金鑰,錯誤的密碼片語或錯誤的檔案格式?)"
此錯誤表示 PEM 檔案的名稱、位置或檔案格式錯誤。例如,儲存在本機的憑證檔案格式為 .crt,但是在 API 請求中改用了 .pem 檔案。若要解決此問題,請確定本機用戶端憑證具有正確的格式和名稱。
"curl: (6) Could not resolve host: mtls.example.info (curl:(6) 無法解析主機:mtls.example.info)"
用戶端無法解析網域名稱。請確定網域名稱和組態正確無誤。
"url: (58) schannel: Failed to import cert file self-signed.pem, last error is 0x80092002 (url:(58) schannel:無法匯入憑證檔案自我簽署的 .pem,上一個錯誤是 0x80092002)"
此錯誤表示本機用戶端 .pem 檔案發生問題。請確定 .pem 檔案包含正確的名稱和格式。
"curl: (58) unable to set private key file: 'self-signed.key' type PEM (curl:(58) 無法設定私有金鑰檔案:'self-signed.key' 類型 PEM)"
此錯誤表示本機用戶端檔案發生問題。請確定 HTTP 請求中提供的私有金鑰未遺失且正確。
伺服器錯誤
"Access denied.Reason: self-signed certificate. (存取遭拒。原因:自我簽署憑證。)"
確認 API 請求中的自我簽署用戶端憑證未遭更改或損毀。
下列項目必須完全符合:
- 用於在 Amazon S3 中簽署信任庫內自我簽署憑證 (bundle.crt 或 bundle.pem) 的私有金鑰 (private.key) 模量。
- 在 API 請求中 (client.crt) 所傳遞用戶端憑證的模量。
若要比較這兩個模量,請執行下列 OpenSSL 命令:
$ openssl rsa -noout -modulus -in private.key
$ openssl x509 -noout -modulus -in bundle.crt
$ openssl x509 -noout -modulus -in client.crt
注意:若要產生更短的雜湊值,方便比較,您可以使用 PIPE 傳送輸出模量至加密雜湊函數。例如:openssl sha1。
$ openssl [operation] -noout -modulus -in [data] | openssl sha1
有效命令輸出範例:
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
2143831a73a8bb28467860df18550c696c03fbcb
若要確認資料完整性,請執行以下 diff 命令,確認沒有修改任何內容等級資料:
$ diff client.crt bundle.crt
相關資訊
為 Amazon API Gateway 引入相互 TLS 身分驗證
如何對來自需相互 TLS 的 API Gateway 自訂網域名稱的 HTTP 403 禁止錯誤,進行疑難排解?