I am trying to interface a Wemos with a mongoDB stitch using HTTPS with fingerprint authentication, and I meet the problem in the title. I am successfully running a similar interface with mLab, another database service from the same provider.
To reproduce my problem, start from the HTTPSRequest example in ESP8266WiFi, and replace
const char* host = "api.github.com"; const int httpsPort = 443; // Use web browser to view and copy // SHA1 fingerprint of the certificate const char fingerprint[] PROGMEM = "5F F1 60 31 09 04 3E F2 90 D2 B0 8A 50 38 04 E8 37 9F BC 76";
with
const char* host = "eu-west-1.aws.webhooks.mongodb-stitch.com"; const int httpsPort = 443; // Use web browser to view and copy // SHA1 fingerprint of the certificate const char fingerprint[] PROGMEM = "73 5D 6B A2 F7 ED 7C 72 74 AC A3 F5 67 F0 56 6B 68 3B 4B 47";
Adding the following lines just before the "connection failed" printout around line 60 we have some debugging info. The output on Serial is the following:
...
WiFi connected
IP address:
192.168.113.133
connecting to eu-west-1.aws.webhooks.mongodb-stitch.com
Using fingerprint '73 5D 6B A2 F7 ED 7C 72 74 AC A3 F5 67 F0 56 6B 68 3B 4B 47'
Chain could not be linked to a trust anchor.
connection failed
Replacing the ''fingerprint()'' method with ''setInsecure()'' everything works fine with no errors.
Inspecting the SSL protocol with
openssl s_client -connect <host>:443 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin
when is eu-west-1.aws.webhooks.mongodb-stitch.com I obtain (only the chain"):
Certificate chain
0 s:/C=US/ST=New York/L=New York/O=MongoDB, Inc./CN=*.mongodb.com
i:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
1 s:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
With the mLab server api.mlab.com (which does not exhibit the problem) the chain is similar:
Certificate chain
0 s:/C=US/ST=California/L=San Francisco/O=ObjectLabs Corporation/CN=api.mlab.com
i:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
1 s:/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert Global Root CA
My suspect is that either the library or the certificate are not exactly compliant. I started asking you.
Thank you for your attention.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4