Thank you for the info, they are very helpful! I get it working basicaly 
following your advice one-by-one.
I am testing to query from a Prometheus DB, so I am setting up a local test 
environment. I will switch to querying a remote Promethues DB in the future.
For the record, This is what I have changed:
1. use https scheme in the config file
2. use example.com.crt as ca_file
3. removed insecure_skip_verify
4. regenerated the cert with SubjectAltName
openssl req -x509 -newkey rsa:4096 -nodes -keyout example.com.key -out 
example.com.crt -subj /commonName=example.com/ -addext 
"subjectAltName=DNS:example.com, DNS:localhost"

On Tuesday, May 24, 2022 at 7:10:01 PM UTC+8 Brian Candler wrote:

> Please don't paste graphical screenshots: they are hard to read, and it's 
> impossible to copy-paste them to make corrections.
>
> First thing is, you're scraping port 9090 but you haven't told it to use 
> HTTPS. You need setting "scheme: https 
> <https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config>"
>  
> in the scrape job.
>
> Secondly, you've set up TLS wrongly, although it may work given that you 
> have "insecure_skip_verify: true".
>
> - At the *server* side you need tls_server_config with cert_file and 
> key_file, which is as you have it.
> - At the *client* side (which in this case is prometheus making an 
> outbound scrape connection to itself), you don't want cert_file or 
> key_file; you need ca_file.  This points to the certificate file of the 
> certificate authority which signed the example.com.crt certificate.  If 
> this is a self-signed certificate, then this is the same certificate, i.e.  
> "ca_file: example.com.crt"
>
> Thirdly, you're connecting to the host using name "localhost", but this 
> will only verify successfully if the certificate contains "localhost" as 
> one of its SubjectAltNames.  You should connect using whatever name you 
> signed for the certificate.  Or, you can use the "server_name: ..." setting 
> in tls_config to say what name to expect in the certificate presented by 
> the server.  Again, "insecure_skip_verify" will probably skip this check.
>
> (But of course, really you don't want to use "insecure_skip_verify". Why 
> are you deploying TLS at all, if you're doing it in an insecure way?)
>
> Fourthly, you didn't show how you generated the certificates.  With modern 
> versions of Go (and hence recent versions of Prometheus), the certificate 
> CommonName is ignored.  The server *must* have a certificate with at least 
> one SubjectAltName.  So if you followed an out-of-date how-to for signing 
> certificates, you probably made a bad certificate.
>
> This is what I use:
>
> mkdir /etc/prometheus/ssl
> cd /etc/prometheus/ssl
> openssl genpkey -genparam -algorithm EC -pkeyopt ec_paramgen_curve:P-256 
> -out p-256.param
> openssl req -x509 -newkey ec:p-256.param -keyout prometheus_key.pem -out 
> prometheus_cert.pem -days 29220 -nodes -subj /commonName=*prometheus*/ 
> -addext "subjectAltName=DNS:*prometheus*"
>
> In "/commonName=*prometheus*/" and "DNS:*prometheus*", replace 
> "prometheus" with the hostname you want in the certificate. "localhost" 
> would work, but apart from self-scraping, normally your clients are 
> connecting to the prometheus server using some real fully-qualified domain 
> name not "localhost", so you should use that FQDN.
>
> On Tuesday, 24 May 2022 at 11:33:43 UTC+1 [email protected] wrote:
>
>> Hi,
>>
>> I don't know how TLS certs work on Windows, but you should at least be 
>> able to see the exact scrape error on the /targets page of your Prometheus 
>> server - what does it say?
>>
>> Cheers,
>> Julius
>>
>> On Tue, May 24, 2022 at 11:57 AM Hank Huang <[email protected]> wrote:
>>
>>> Hi all!
>>>
>>> So I setup Prometheus to monitor itself.
>>> Now I want to test with https, so I followed the doc and generated 
>>> example.com.crt and example.com.key, and referenced them in the config file 
>>> and web config file.
>>> I also double clicked on the example.com.crt to install the cert onto my 
>>> machine.
>>> Then I launch the Prometheus with the two config files:
>>> .\prometheus.exe --config.file=prometheus.yml --web.config.file=web.yml
>>>
>>> When I query "up" from Prometheus, it's always 0, the response status is 
>>> 200 though. Also there's a "TLS handshake error" in the console.
>>> I think maybe it's because I didn't install the cert correctly. Any 
>>> insight is appreciated.
>>>
>>> [image: Screenshot 2022-05-24 173210.png]
>>>
>>> [image: Screenshot 2022-05-24 173734.png]
>>>
>>>
>>> config file (prometheus.yml):
>>> [image: Screenshot 2022-05-24 161738.png]
>>>
>>> web config file (web.yml):
>>> [image: Screenshot 2022-05-24 161825.png]
>>>
>>>
>>> syntax wise looks fine:
>>> [image: Screenshot 2022-05-24 162119.png]
>>> [image: Screenshot 2022-05-24 162158.png]
>>>
>>>
>>>
>>>
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Prometheus Users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/prometheus-users/51ceb9ba-58e0-4149-b199-e49f21661b1cn%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/prometheus-users/51ceb9ba-58e0-4149-b199-e49f21661b1cn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>
>>
>> -- 
>> Julius Volz
>> PromLabs - promlabs.com
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Prometheus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/prometheus-users/f1bf5afb-094f-4442-8b37-b2c9d179ba25n%40googlegroups.com.

Reply via email to