但原本用Postman卻都可以正常回應, 最後發現是 SSL 憑證過期的問題
因為原本是走 http, 後來改成 https 後沒有注意 SSL 過期的問題
[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate
但要接的server是用NGINX架的, 而我比較常用Apache
把設定SSL遇到的問題記錄下來
Apache會有三個檔案設定
SSLCertificateFile /etc/httpd/ssl/server.cer
SSLCertificateKeyFile /etc/httpd/ssl/server.key
SSLCertificateChainFile /etc/httpd/ssl/uca.cer
Nginx只有兩個
ssl_certificate /etc/nginx/ssl/server.cer;
ssl_certificate_key /etc/nginx/ssl/server.key;
從瀏覽器測也是正常的, 原本以為照這樣設定就可以了
但實際用Postman去呼叫時還是無法驗證, AWS api gateway 也是無法驗證
結果是因爲是沒有把中間憑證 SSLCertificateChainFile 設定到Nginx的關係, 不過找不到如何設定Nginx中間憑證的寫法
最後才發現這一篇: https://blog.steven266.de/include-a-certificate-chain-file-in-nginx-6dca9acdcbb6
需要把 SSLCertificateFile 跟 SSLCertificateChainFile 合在一起
cat server.cer uca.cer > bundle.crt
再把ssl_certificate改成產生好的檔案
ssl_certificate bundle.crt
最後再 reload 或 restart Nginx即可
留言 (0)
張貼留言