Information regarding TLS connection and certificates - c++

I am new to this TLS connection , certificates area.
I have certificates and private key to make connection with server;i am trying it with openssl. I am confused if i have to encrypt private key before sending to the server or use directly? Also,do i have to encrypt all the messages further with this private key?
I have 2 certificates;which api in openssl take 2 certificates for handshake?

Related

Self-signed certificate installation on client side

Let's imagine we have the server with self-signed certificate and the client which want to connect to the server. Client don't have the certificate from server installed on it's store.
Is it correct that client can fetch the certificate from server, add it to it's own certificate store (after user confirmation) and have secured connection?
I am asking because I don't want to spread the sertificate to all clients by some way.
I just want them to be able to download certificate from server during first connection attempt and use it, if user confirm it's trustable.

Amazon S3 migrating service certificates to Amazon Trust Services

I have websites that link directly to images stores on S3 using HTTPS.
For example:
<img src="https://s3.amazonaws.com/MyBucket/FolderInBucket/ImageFileName.png" />
I wanted to know if I need to change anything so my images on my website will still be accessible after the migration.
Source information link.
You won't have to do anything on your end, the certificate swap is handled by AWS. Whether this has an impact on your application depends on your clients, because this change relates to how they do the certificate verification.
The process is roughly like this:
The client makes a request to S3, asking for encrypted communication
S3 sends back a certificate, that contains the public key for the initial key exchange using asymmetric encryption.
The client verifies the digital signature of the certificate, that means:
The certificate is cryptographically signed by a certificate authority (there are intermediate certificate authorities that form a chain of trust, but we're going to ignore these for simplicity.)
This signature means the certificate authority guarantees this certificate to be valid
The signature is trusted, if the certificate authority is trusted. Each client has a list of trusted root certificates in a local trust store, which the client trusts to guarantee the authenticity of certificates
If the new CA is in the local trust store everything is fine, if it isn't there will be an error
Afterwards the client will check, if the certificate in question has been revoked. If yes, the connection is terminated, if not it trusts the certificate and the included public key
The client generates a session key and encrypts it with the public key from the certificate.
The encrypted session key is sent to the server and the server can decrypt it using its private key
Now both partners have the session key and can exchange symmetrically encrypted messages using that session key.
So the main question is: Do your clients have the new CA in their trust store?
The answer is: most likely yes
You can have your clients test this by accessing the URL in the post you linked to, which already uses the new certificate:
https://s3-ats-migration-test.s3.eu-west-3.amazonaws.com/test.jpg
If they see this picture, everything is fine:
You can also do this in the background on your website and check if HTTP 200 is returned when requesting the URL. If that's not the case, inform the client there may be problems in the future.

Tomcat - WebService - without Trust Store

We have a Webservice Application running on Tomcat.
This is SSL secured. We need to share our public key to every client trying to access our web services. Is it possible to disable the trust certificate verification ?
By default, all TLS clients should verify the servers to which they are connecting. Any other default behavior would be dangerous.
The client is the party performing the verification in a one-way TLS handshake (that is, when there is no client-authentication being performed where the client also presents a certificate to the server).
There are only two ways to avoid distributing your server's certificate to all possible clients:
Get your server's certificate signed by a trusted Certificate Authority (CA)
Modify all possible clients to ignore any problems with your certificate (such as not trusting it)
These days, with free domain certificates available from e.g. Let's Encrypt, it's silly not to use a certificate signed by a legitimate CA.

AWS Certificate Manager - How to download public key?

I created an SSL Certificate using AWS Certificate manager to use on our EB Load Balancer.
We have a device that needs the public certificate to communicate over HTTPS. I know AWS holds the private key, is it possible to download the public key?
The AWS ACM does not provide an API to download the public key of an ACM SSL certificate.
However, once you have your ACM certificate setup on an ELB or CloudFront, the public key will be served when you connect to it via HTTPS. From there, you may be able to save the public key.
Try using OpenSSL to get and save the key:
openssl s_client -connect the.host.name:443 | openssl x509 -pubkey -noout
Source: https://security.stackexchange.com/questions/16085/how-to-get-public-key-of-a-secure-webpage

WCF client SOAP webservice p7b certificate private key

I have a WCF client with customBinding and mtomSOAPMessage Soap11. I got a certificate in P7B format from CA which was requested using a CSR generated using OpenSSL. I see this p7b certificate doesn't have a private key linked.
How do I point my WCF configuration to this certificate for signing messages with private key?