Centos 6 TLS with Lets Encrypt CA cert - why does OpenSSL check return code 19 (native certificate in the chain)?

Do you know why the use of Let Encrypt certificate for TLS will lead to a client failure at the SSL confirmation point with error 19 (the certificate in the chain will configure itself)? I am developing a C application that uses Mosquitto libraries to open a connection (and cannot shake hands), but to simplify this issue I'm going to demonstrate the problem with the mosquitto_sub command (which we know works).

I use Centos 6.2 with the ability to encrypt certificates for my site without any problems (because they are free, automated and open). Now I want to use the same certificate issued by Let Encrypt to protect the TLS connection between my server and any remote client. TLS is used to connect to the Mosquitto MQTT broker on port 8881. mosquitto.conf on my server contains:

...
user mosquitto
listener 8883 example.com
cafile /etc/mosquitto/certs/chain-ca.pem  # These 3 from Let Encrypt
certfile /etc/mosquitto/certs/cert.pem
keyfile /etc/mosquitto/certs/privkey.pem
require_certificate false
...

I have several network interfaces on my CentOS server, and my domain "example.com" is resolved using the dig command for the eth0: 1 IP interface:

[root@spiff mosquitto]# dig example.com

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6_8.2 <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 804
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0

;; QUESTION SECTION:
;example.com.             IN      A

;; ANSWER SECTION:
example.com.      300     IN      A       158.234.234.24

;; AUTHORITY SECTION:
example.com.      300     IN      NS      dns0.ns.co.uk.
example.com.      300     IN      NS      dns1.ns.co.uk.

;; Query time: 41 msec
;; SERVER: 151.236.220.5#535(11.226.220.5)
;; WHEN: Sun Oct 30 19:21:07 2016
;; MSG SIZE  rcvd: 101

, , example.com, Let Encrypt, CN, DNS IP- , Mosquitto, OpenSSL .

.

Google, (, ), CA ( ), example.com, , , CA, example.com, , - cafile [-cert-cert.crt], . , TLS - .

Centos 6.2 ( , - mosquitto_sub) . :

 mosquitto_sub -h example.com -p 8883 -t test -u mr-user -P P@55W0rD --cafile /etc/pki/tls/certs/lets-encrypt-x3-cross-signed.pem -d
 Error: A TLS error occurred

Mosquitto errno , s_client openSSL:

[root@spiff certs]# openssl s_client -connect example.com:8883 -CAfile lets-encrypt-x3-cross-signed.pem
 CONNECTED(00000003)
 depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
 verify error:num=19:self signed certificate in certificate chain
 verify return:0
 ---
 Certificate chain
 0 s:/CN=www.example.com
    i:/C=US/O=Let Encrypt/CN=Let Encrypt Authority X3
    1 s:/C=US/O=Let Encrypt/CN=Let Encrypt Authority X3
    i:/O=Digital Signature Trust Co./CN=DST Root CA X3
    2 s:/O=Digital Signature Trust Co./CN=DST Root CA X3
    i:/O=Digital Signature Trust Co./CN=DST Root CA X3
 ---
 Server certificate
 -----BEGIN CERTIFICATE-----
 MIIFDjCCA/agAwIBAgISA12o6mO9oS364BF5UVgSAD7TMA0GCSqGSIb3DQEBCwUA
 [... lines removed for brevity ...]
 A+q6hf00nJJsEvGmhVzQG5zAn6ojcWgT3EhurPien7Y16+kIS5tdz9xbeCgLTOrJ
 BXA=
 -----END CERTIFICATE-----
subject=/CN=www.example.com
 issuer=/C=US/O=Let Encrypt/CN=Let Encrypt Authority X3
 ---
 No client certificate CA names sent
 Server Temp Key: ECDH, prime256v1, 256 bits
 ---
 SSL handshake has read 3999 bytes and written 373 bytes
 ---
 New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
 Server public key is 2048 bit
 Secure Renegotiation IS supported
 Compression: NONE
 Expansion: NONE
 SSL-Session:
   Protocol  : TLSv1.2
   Cipher    : ECDHE-RSA-AES256-GCM-SHA384
   Session-ID:   E8D32590BAB26FF5811D39D775B3F455CAC3E8747866FA251DDA2032FA88E349
   Session-ID-ctx:
   Master-Key:       1B45DF54D11BC44D96AEAC940291B4D3BBAE56D6431E746873DC4F15DC1219F02019F4D903CAA6E8B23AF83CE291F4A6
   Key-Arg   : None
   Krb5 Principal: None
   PSK identity: None
   PSK identity hint: None
   TLS session ticket lifetime hint: 300 (seconds)
   TLS session ticket:
   0000 - d9 fb 28 9f c9 7c ba b3-26 ff dd 75 53 d1 12 65   ..(..|..&..uS..e
   0010 - 91 76 91 2b f8 a2 b4 4b-0a e2 97 eb ce 8e a1 af   .v.+...K........
   [ ... lines ommitted for brevity ... ]
   00a0 - 71 c3 a9 f3 16 c4 04 17-d1 e8 b0 75 e8 80 e9 fb   q..........u....

   Start Time: 1477857075
   Timeout   : 300 (sec)
   Verify return code: 19 (self signed certificate in certificate chain)
   ---

Verify , ? - , , , OpenSSL /etc/pki/tls , Let Encrypt, , , OpenSSL? , /etc/pki , Let Encrypt? let-encrypt-x3-cross-signed.pem Let Encrypt Chain of Trust, ?

+4

Source: https://habr.com/ru/post/1659353/


All Articles