This knowledge was brought to you by Guru.
What does one do, when API website does not provide full SSL certificate chain?
This info is for default docker installed XIBO on Debian 10.
When trying to create new Data Set obtained from some https API, I have stumbled upon this error:
Unable to reach Forecast API: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
The fun part was that all modern browsers had no problems with connection, as they contained missing chain elements.
Trying with curl from varius machines yield:
* ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: none CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (OUT), TLS alert, unknown CA (560): * SSL certificate problem: unable to get local issuer certificate * Closing connection 0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.haxx.se/docs/sslcerts.html curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.
So we needed a little bit of shell fu to complete the chain.
On the host machine, obtain the missing parts of the certificate chain, in my case it was GoDaddy certificate, so I used those.
Everything in this folder with crt suffix will be included in system when we run
wget https://ssl-ccp.godaddy.com/repository/gdroot-g2.crt wget https://ssl-ccp.godaddy.com/repository/gdig2.crt.pem
Rename all files to use
mv gdig2.crt.pem gdig2.crt
Update the system certificates (basically this updates
Unfortunatly, fixing the hosts certificate chain is not enough, we need to do the same thing inside docker container.
Copy the same files to the docker container:
docker cp gdroot-g2.crt xibo_cms-web_1:/usr/local/share/ca-certificates/ docker cp gdig2.crt xibo_cms-web_1:/usr/local/share/ca-certificates/
Drop to docker container shell:
docker exec -it xibo_cms-web_1 bash
Update certificates of docker container:
Exit docker container:
Finally restart the container:
docker restart xibo_cms-web_1