First, get your access working with curl.
(1) Does the remote server have a certificate which is signed by (a) a public CA, (b) a private CA, or (c) self-signed? In cases (b) and (c) you'll find that curl rejects the connection.
If so, find out the CA which signed the cert, and you should be able to pass this as the "--cacert" option to curl. Once that works, it becomes the "ca_file" option to prometheus.
(2) Does the server require you as the client to provide a certificate to authenticate? If so, the server operator will tell you what you need to provide. If it's a private CA, they'll most likely provide you with the private key and the certificate
For curl pass these as the --key and --cert options. When this is working, these become key_file and cert_file options to prometheus.
If as you said it works with random certs that you've generated, this most likely means that the server isn't doing any certificate authentication at all. In which case, you can drop the key_file and cert_file options altogether from prometheus.
For your second question: yes, any form of service discovery will work. You will either set the scheme "https" at the job level as you showed, or set the label __scheme__ in your rewriting rules.