RalphTrimble
TVWBB Diamond Member
I've upgraded two of my HM's and everything went perfect. One V4.0 with rPi B and another v4.2 with rPi B.
Pushed out new snapshots for both Pi and Pi2/3 which finally enables HTTPS for the web server as well as some other minor fixes.
Custom firmware download
Raw images
Only thing I have left of my list is to include the RT5370 wifi driver. The rtl8192cu driver does not support AP mode any more so this new firmware will be a step backward for those who use Edimax adapters in AP mode. Client mode works just fine, as well as the Pi3 wifi in either mode. The RT5370 should also work in both modes but I haven't tested yet.
ok, let's start to verify
Verifying:home.capnbry.net
d='home.capnbry.net'
keyauthorization='qvMTH0Z0bcNxsjMl0RnMLmoyPcrsD2W0C4-9oMZaDDE.qLYOXPtWGfIQ8lJeyx3Jb9TfnOkq-hL3m4w7TS32cXc'
uri='https://acme-v01.api.letsencrypt.org/acme/challenge/AvfcSmdiYCPXhgURyBctvtsKxMLZWxRDpZMbAMSxKZc/967785988'
_currentRoot='no'
Standalone mode server
ncaddr
startserver: 8119
Le_HTTPPort='80'
Le_Listen_V4
Le_Listen_V6
_NC='nc -c -l '
serverproc='9736'
url='https://acme-v01.api.letsencrypt.org/acme/challenge/AvfcSmdiYCPXhgURyBctvtsKxMLZWxRDpZMbAMSxKZc/967785988'
payload='{"resource": "challenge", "keyAuthorization": "qvMTH0Z0bcNxsjMl0RnMLmoyPcrsD2W0C4-9oMZaDDE.qLYOXPtWGfIQ8lJeyx3Jb9TfnOkq-hL3m4w7TS32cXc"}'
POST
url='https://acme-v01.api.letsencrypt.org/acme/challenge/AvfcSmdiYCPXhgURyBctvtsKxMLZWxRDpZMbAMSxKZc/967785988'
_CURL='curl -L --silent --dump-header /etc/acme/http.header '
_ret='0'
code='202'
sleep 2 secs to verify
checking
GET
url='https://acme-v01.api.letsencrypt.org/acme/challenge/AvfcSmdiYCPXhgURyBctvtsKxMLZWxRDpZMbAMSxKZc/967785988'
timeout
_CURL='curl -L --silent --dump-header /etc/acme/http.header '
ret='0'
Pending
sleep 2 secs to verify
checking
GET
url='https://acme-v01.api.letsencrypt.org/acme/challenge/AvfcSmdiYCPXhgURyBctvtsKxMLZWxRDpZMbAMSxKZc/967785988'
timeout
_CURL='curl -L --silent --dump-header /etc/acme/http.header '
ret='0'
home.capnbry.net:Verify error:Could not connect to home.capnbry.net
Debug: get token url.
GET
url='http://home.capnbry.net/.well-known/acme-challenge/qvMTH0Z0bcNxsjMl0RnMLmoyPcrsD2W0C4-9oMZaDDE'
timeout='1'
_CURL='curl -L --silent --dump-header /etc/acme/http.header --connect-timeout 1'
Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 7
ret='7'
Skip for removelevel:
pid='9736'
No need to restore nginx, skip.
_clearupdns
Dns not added, skip.
_on_issue_err
Please add '--debug' or '--log' to check more details.
See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
url='https://acme-v01.api.letsencrypt.org/acme/challenge/AvfcSmdiYCPXhgURyBctvtsKxMLZWxRDpZMbAMSxKZc/967785988'
payload='{"resource": "challenge", "keyAuthorization": "qvMTH0Z0bcNxsjMl0RnMLmoyPcrsD2W0C4-9oMZaDDE.qLYOXPtWGfIQ8lJeyx3Jb9TfnOkq-hL3m4w7TS32cXc"}'
POST
url='https://acme-v01.api.letsencrypt.org/acme/challenge/AvfcSmdiYCPXhgURyBctvtsKxMLZWxRDpZMbAMSxKZc/967785988'
_CURL='curl -L --silent --dump-header /etc/acme/http.header '
_ret='0'
code='400'
root@HM42:/opt/acme# ./acme.sh --debug --issue -d heatermeter.zerofox.ca -w /www/ --key-file /etc/uhttpd.key --fullchain-file /etc/uhttpd.crt --reloadcmd "/etc/init.d/uhttpd restart"
[Wed Apr 5 14:32:05 EDT 2017] Lets find script dir.
[Wed Apr 5 14:32:05 EDT 2017] _SCRIPT_='./acme.sh'
[Wed Apr 5 14:32:05 EDT 2017] _script='/opt/acme/acme.sh'
[Wed Apr 5 14:32:05 EDT 2017] _script_home='/opt/acme'
[Wed Apr 5 14:32:05 EDT 2017] Using default home:/root/.acme.sh
[Wed Apr 5 14:32:05 EDT 2017] Using config home:/root/.acme.sh
https://github.com/Neilpang/acme.sh
v2.6.8
[Wed Apr 5 14:32:05 EDT 2017] Using api:
[Wed Apr 5 14:32:05 EDT 2017] Using config home:/root/.acme.sh
[Wed Apr 5 14:32:05 EDT 2017] DOMAIN_PATH='/root/.acme.sh/heatermeter.zerofox.ca'
[Wed Apr 5 14:32:05 EDT 2017] _on_before_issue
[Wed Apr 5 14:32:05 EDT 2017] Le_LocalAddress
[Wed Apr 5 14:32:05 EDT 2017] Check for domain='heatermeter.zerofox.ca'
[Wed Apr 5 14:32:05 EDT 2017] _currentRoot='/www/'
[Wed Apr 5 14:32:05 EDT 2017] config file is empty, can not read CA_KEY_HASH
[Wed Apr 5 14:32:05 EDT 2017] Using config home:/root/.acme.sh
[Wed Apr 5 14:32:05 EDT 2017] Use default length 2048
[Wed Apr 5 14:32:05 EDT 2017] length='2048'
[Wed Apr 5 14:32:05 EDT 2017] Using config home:/root/.acme.sh
[Wed Apr 5 14:32:05 EDT 2017] Use length 2048
[Wed Apr 5 14:32:05 EDT 2017] Using RSA: 2048
[Wed Apr 5 14:32:09 EDT 2017] RSA key
[Wed Apr 5 14:32:16 EDT 2017] AGREEMENT
[Wed Apr 5 14:32:16 EDT 2017] Registering account
[Wed Apr 5 14:32:16 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/new-reg'
[Wed Apr 5 14:32:16 EDT 2017] payload='{"resource": "new-reg", "agreement": ""}'
[Wed Apr 5 14:32:16 EDT 2017] GET
[Wed Apr 5 14:32:16 EDT 2017] url='https://acme-v01.api.letsencrypt.org/directory'
[Wed Apr 5 14:32:16 EDT 2017] timeout
[Wed Apr 5 14:32:16 EDT 2017] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header '
[Wed Apr 5 14:32:17 EDT 2017] ret='0'
[Wed Apr 5 14:32:17 EDT 2017] POST
[Wed Apr 5 14:32:17 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/new-reg'
[Wed Apr 5 14:32:17 EDT 2017] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header '
[Wed Apr 5 14:32:18 EDT 2017] _ret='0'
[Wed Apr 5 14:32:18 EDT 2017] code='201'
[Wed Apr 5 14:32:18 EDT 2017] Registered
[Wed Apr 5 14:32:18 EDT 2017] _accUri='https://acme-v01.api.letsencrypt.org/acme/reg/11969113'
[Wed Apr 5 14:32:18 EDT 2017] _tos='https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf'
[Wed Apr 5 14:32:18 EDT 2017] AGREEMENT='https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf'
[Wed Apr 5 14:32:18 EDT 2017] Update tos: https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf
[Wed Apr 5 14:32:18 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/reg/11969113'
[Wed Apr 5 14:32:18 EDT 2017] payload='{"resource": "reg", "agreement": "https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf"}'
[Wed Apr 5 14:32:18 EDT 2017] POST
[Wed Apr 5 14:32:18 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/reg/11969113'
[Wed Apr 5 14:32:19 EDT 2017] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header '
[Wed Apr 5 14:32:20 EDT 2017] _ret='0'
[Wed Apr 5 14:32:20 EDT 2017] code='202'
[Wed Apr 5 14:32:20 EDT 2017] Update success.
[Wed Apr 5 14:32:20 EDT 2017] Calc CA_KEY_HASH='36eQrIZ8QNHUtvsqb3RRFzH9g3N+8FebRBb9k5yNCFw='
[Wed Apr 5 14:32:20 EDT 2017] ACCOUNT_THUMBPRINT='X-Mk5PB4riXnxOzK2ZUwjVVvdLXdJ8w2wPqFiU3j49k'
[Wed Apr 5 14:32:20 EDT 2017] Read key length:
[Wed Apr 5 14:32:20 EDT 2017] Creating domain key
[Wed Apr 5 14:32:20 EDT 2017] Use DEFAULT_DOMAIN_KEY_LENGTH=2048
[Wed Apr 5 14:32:20 EDT 2017] Using config home:/root/.acme.sh
[Wed Apr 5 14:32:20 EDT 2017] Use length 2048
[Wed Apr 5 14:32:20 EDT 2017] Using RSA: 2048
/BEGIN
[Wed Apr 5 14:32:20 EDT 2017] Use DEFAULT_DOMAIN_KEY_LENGTH=2048
[Wed Apr 5 14:32:20 EDT 2017] Using config home:/root/.acme.sh
[Wed Apr 5 14:32:20 EDT 2017] Use length 2048
[Wed Apr 5 14:32:20 EDT 2017] Using RSA: 2048
[Wed Apr 5 14:32:29 EDT 2017] _createcsr
[Wed Apr 5 14:32:29 EDT 2017] Single domain='heatermeter.zerofox.ca'
[Wed Apr 5 14:32:30 EDT 2017] Getting domain auth token for each domain
[Wed Apr 5 14:32:30 EDT 2017] Getting webroot for domain='heatermeter.zerofox.ca'
[Wed Apr 5 14:32:30 EDT 2017] _w='/www/'
[Wed Apr 5 14:32:30 EDT 2017] _currentRoot='/www/'
[Wed Apr 5 14:32:30 EDT 2017] Getting new-authz for domain='heatermeter.zerofox.ca'
[Wed Apr 5 14:32:30 EDT 2017] Try new-authz for the 0 time.
[Wed Apr 5 14:32:30 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/new-authz'
[Wed Apr 5 14:32:30 EDT 2017] payload='{"resource": "new-authz", "identifier": {"type": "dns", "value": "heatermeter.zerofox.ca"}}'
[Wed Apr 5 14:32:30 EDT 2017] POST
[Wed Apr 5 14:32:30 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/new-authz'
[Wed Apr 5 14:32:30 EDT 2017] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header '
[Wed Apr 5 14:32:31 EDT 2017] _ret='0'
[Wed Apr 5 14:32:31 EDT 2017] code='201'
[Wed Apr 5 14:32:31 EDT 2017] The new-authz request is ok.
[Wed Apr 5 14:32:32 EDT 2017] entry='"type":"http-01","status":"pending","uri":"https://acme-v01.api.letsencrypt.org/acme/challenge/","token":""'
[Wed Apr 5 14:32:32 EDT 2017] token=''
[Wed Apr 5 14:32:32 EDT 2017] uri='https://acme-v01.api.letsencrypt.org/acme/challenge//968200465'
[Wed Apr 5 14:32:32 EDT 2017] keyauthorization=''
[Wed Apr 5 14:32:32 EDT 2017] dvlist='heatermeter.zerofox.ca##https://acme-v01.api.letsencrypt.org/acme/challenge//#http-01#/www/'
[Wed Apr 5 14:32:32 EDT 2017] vlist='heatermeter.zerofox.ca##https://acme-v01.api.letsencrypt.org/acme/challenge//#http-01#/www/,'
[Wed Apr 5 14:32:32 EDT 2017] ok, let's start to verify
[Wed Apr 5 14:32:32 EDT 2017] Verifying:heatermeter.zerofox.ca
[Wed Apr 5 14:32:32 EDT 2017] d='heatermeter.zerofox.ca'
[Wed Apr 5 14:32:32 EDT 2017] keyauthorization=''
[Wed Apr 5 14:32:32 EDT 2017] uri='https://acme-v01.api.letsencrypt.org/acme/challenge//'
[Wed Apr 5 14:32:32 EDT 2017] _currentRoot='/www/'
[Wed Apr 5 14:32:32 EDT 2017] wellknown_path='/www//.well-known/acme-challenge'
[Wed Apr 5 14:32:32 EDT 2017] writing token: to /www//.well-known/acme-challenge/
[Wed Apr 5 14:32:32 EDT 2017] not changing owner/group of webroot
[Wed Apr 5 14:32:32 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/challenge/'
[Wed Apr 5 14:32:32 EDT 2017] payload='{"resource": "challenge", "keyAuthorization": ""}'
[Wed Apr 5 14:32:32 EDT 2017] POST
[Wed Apr 5 14:32:32 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/challenge/'
[Wed Apr 5 14:32:32 EDT 2017] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header '
[Wed Apr 5 14:32:33 EDT 2017] _ret='0'
[Wed Apr 5 14:32:33 EDT 2017] code='202'
[Wed Apr 5 14:32:33 EDT 2017] sleep 2 secs to verify
[Wed Apr 5 14:32:35 EDT 2017] checking
[Wed Apr 5 14:32:35 EDT 2017] GET
[Wed Apr 5 14:32:35 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/challenge/2LnQZYVYOJwrGNuy9qZapN7KBYqpiDnzUnxpxTjOCvA/968200465'
[Wed Apr 5 14:32:35 EDT 2017] timeout
[Wed Apr 5 14:32:36 EDT 2017] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header '
[Wed Apr 5 14:32:36 EDT 2017] ret='0'
[Wed Apr 5 14:32:36 EDT 2017] Success
[Wed Apr 5 14:32:36 EDT 2017] pid
[Wed Apr 5 14:32:36 EDT 2017] Debugging, skip removing: /www//.well-known/acme-challenge/w_YOGzCDkZBEuv2YTK8ZYowJYIN-PB8APaQ3qDtJuMA
[Wed Apr 5 14:32:36 EDT 2017] pid
[Wed Apr 5 14:32:36 EDT 2017] No need to restore nginx, skip.
[Wed Apr 5 14:32:36 EDT 2017] _clearupdns
[Wed Apr 5 14:32:36 EDT 2017] Dns not added, skip.
[Wed Apr 5 14:32:36 EDT 2017] Verify finished, start to sign.
[Wed Apr 5 14:32:36 EDT 2017] i='2'
[Wed Apr 5 14:32:36 EDT 2017] j='15'
[Wed Apr 5 14:32:36 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/new-cert'
[Wed Apr 5 14:32:36 EDT 2017] payload='{"resource": "new-cert", "csr": "..."}'
[Wed Apr 5 14:32:37 EDT 2017] POST
[Wed Apr 5 14:32:37 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/new-cert'
[Wed Apr 5 14:32:37 EDT 2017] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header '
[Wed Apr 5 14:32:38 EDT 2017] _ret='0'
[Wed Apr 5 14:32:38 EDT 2017] code='201'
[Wed Apr 5 14:32:38 EDT 2017] Le_LinkCert='https://acme-v01.api.letsencrypt.org/acme/cert/030f5cbcc9a4c4b9b63448713f8c958054a9'
[Wed Apr 5 14:32:38 EDT 2017] Cert success.
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
[Wed Apr 5 14:32:38 EDT 2017] Your cert is in /root/.acme.sh/heatermeter.zerofox.ca/heatermeter.zerofox.ca.cer
[Wed Apr 5 14:32:38 EDT 2017] Your cert key is in /root/.acme.sh/heatermeter.zerofox.ca/heatermeter.zerofox.ca.key
[Wed Apr 5 14:32:38 EDT 2017] Le_LinkIssuer='https://acme-v01.api.letsencrypt.org/acme/issuer-cert'
[Wed Apr 5 14:32:38 EDT 2017] _link_issuer_retry='0'
[Wed Apr 5 14:32:38 EDT 2017] GET
[Wed Apr 5 14:32:38 EDT 2017] url='https://acme-v01.api.letsencrypt.org/acme/issuer-cert'
[Wed Apr 5 14:32:38 EDT 2017] timeout
[Wed Apr 5 14:32:38 EDT 2017] _CURL='curl -L --silent --dump-header /root/.acme.sh/http.header '
[Wed Apr 5 14:32:39 EDT 2017] ret='0'
[Wed Apr 5 14:32:39 EDT 2017] The intermediate CA cert is in /root/.acme.sh/heatermeter.zerofox.ca/ca.cer
[Wed Apr 5 14:32:39 EDT 2017] And the full chain certs is there: /root/.acme.sh/heatermeter.zerofox.ca/fullchain.cer
[Wed Apr 5 14:32:39 EDT 2017] _on_issue_success
[Wed Apr 5 14:32:39 EDT 2017] Installing key to:/etc/uhttpd.key
[Wed Apr 5 14:32:39 EDT 2017] Installing full chain to:/etc/uhttpd.crt
[Wed Apr 5 14:32:39 EDT 2017] Run reload cmd: /etc/init.d/uhttpd restart
[Wed Apr 5 14:32:40 EDT 2017] Reload success
root@HM42:/opt/acme# openssl s_client -showcerts -connect localhost:443 </dev/null | grep CN
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = heatermeter.zerofox.ca
verify return:1
0 s:/CN=heatermeter.zerofox.ca
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
DONE
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
subject=/CN=heatermeter.zerofox.ca
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
Actually I have full-on netcat installed. There is a package for luci that has a nice config page for it and does all the dirty work of setting up cron to keep the certificate up to date, and it uses full GNU nc. Taking a longer look at the acme.sh, it does include the -p when it calls netcat and if I put a delay in acme.sh, I can connect to it and I get data back. However, the data is not in the right format to be an HTTP response. What that tells me is that the busybox printf doesn't work in the way that acme.sh expects. If I edit the LEDE wrapper script and change it from standalone to -w /www it worked perfectly the first time. Very strange that they set it to --standalone, require full GNU netcat, and modify the uhttpd configuration to stop it from listening on port 80. Seems like a lot of hoops to jump through for no reason.It seems that the busybox version of netcat needs a "NC_SERVER" option set to compile in the server functionality, which would allow -l (listen) to work. This will be required for it to run in standalone mode.
Probably need to add "BUSYBOX_CONFIG_NC_SERVER=y" to diffconfig.BCM2708
root@HM42:/opt/acme# ./acme.sh --tls --issue -d heatermeter.zerofox.ca --key-file /etc/uhttpd.key --fullchain-file /etc/uhttpd.crt --test --pre-hook "/etc/init.d/uhttpd stop" --reloadcmd "/etc/init.d/uhttpd start"
[Thu Apr 6 09:01:48 EDT 2017] Using stage api:https://acme-staging.api.letsencrypt.org
[Thu Apr 6 09:01:48 EDT 2017] Run pre hook:'/etc/init.d/uhttpd stop'
[Thu Apr 6 09:01:48 EDT 2017] Standalone tls mode.
[Thu Apr 6 09:02:04 EDT 2017] Registering account
[Thu Apr 6 09:02:05 EDT 2017] Registered
[Thu Apr 6 09:02:07 EDT 2017] Update success.
[Thu Apr 6 09:02:07 EDT 2017] ACCOUNT_THUMBPRINT='cB2bnPz1FeF4cQibluICjy_ofGGVhgeMYKr5aNnprS0'
[Thu Apr 6 09:02:07 EDT 2017] Creating domain key
[Thu Apr 6 09:02:11 EDT 2017] Single domain='heatermeter.zerofox.ca'
[Thu Apr 6 09:02:12 EDT 2017] Getting domain auth token for each domain
[Thu Apr 6 09:02:12 EDT 2017] Getting webroot for domain='heatermeter.zerofox.ca'
[Thu Apr 6 09:02:12 EDT 2017] Getting new-authz for domain='heatermeter.zerofox.ca'
[Thu Apr 6 09:02:13 EDT 2017] The new-authz request is ok.
[Thu Apr 6 09:02:13 EDT 2017] Verifying:heatermeter.zerofox.ca
[Thu Apr 6 09:02:13 EDT 2017] Starting tls server.
[Thu Apr 6 09:02:29 EDT 2017] Multi domain='DNS:21a17d44bd04705b05e8163a8a3dbb21.825cb7c8f742be44948acdbb08d5937a.acme.invalid'
[Thu Apr 6 09:02:34 EDT 2017] Success
[Thu Apr 6 09:02:34 EDT 2017] Verify finished, start to sign.
[Thu Apr 6 09:02:36 EDT 2017] Cert success.
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
[Thu Apr 6 09:02:36 EDT 2017] Your cert is in /root/.acme.sh/heatermeter.zerofox.ca/heatermeter.zerofox.ca.cer
[Thu Apr 6 09:02:36 EDT 2017] Your cert key is in /root/.acme.sh/heatermeter.zerofox.ca/heatermeter.zerofox.ca.key
[Thu Apr 6 09:02:37 EDT 2017] The intermediate CA cert is in /root/.acme.sh/heatermeter.zerofox.ca/ca.cer
[Thu Apr 6 09:02:37 EDT 2017] And the full chain certs is there: /root/.acme.sh/heatermeter.zerofox.ca/fullchain.cer
[Thu Apr 6 09:02:37 EDT 2017] Installing key to:/etc/uhttpd.key
[Thu Apr 6 09:02:37 EDT 2017] Installing full chain to:/etc/uhttpd.crt
[Thu Apr 6 09:02:37 EDT 2017] Run reload cmd: /etc/init.d/uhttpd start
[Thu Apr 6 09:02:37 EDT 2017] Reload success
I'm not entirely sure I see the benefit of having this integrated though. Sure it is better than a self-signed certificate but to get this to work you have to poke a hole in your firewall to direct port 80 to HeaterMeter and leave it open all the time so it can recreate the certificate when needed. I feel like this is a bigger security risk than running with a self-signed certificate. It does add another package to maintain which I am less than thrilled about. It does not do anything about ISPs collecting your data because we have SSL already which should be sufficient for those purposes. So the question is if it is worth it.
I have to agree, being a security conscience IT guy, I'd rather not have ports left open on my network just for the connivence of not having my browser bug me about self signed certs. Plus some users might already be using port 80/443 for other things.
just my 2 cents
Steve_M: Does --tls work even if the uhttpd has a self-signed certificate? Just curious.