Get Privatekey for AWS SSL - node.js

We are working on RedHat linux server with nodejs server.
While make my services ssl certified,
I got the SSL certificate from aws cli using ARN.
How could I get privatekey from aws ssl or how can I implement.

If you are using AWS Certificate Mananager (ACM) to generate the key pair and issue SSL certificates, you do not have access to the private key. The private key is managed entirely within the service.
See https://docs.aws.amazon.com/acm/latest/userguide/kms.html

Yes finally found the answer. while using load balancer for ssl certificate generation in AWS, we are no need to worry about ssl certificate things. the total things are handled by load balancer only.
what I did the wrong is, created load balancer for website in place classic load balancer for linux. Now it's working fine to me. No need to worry about ssl certificate while creating ssl certificate with load balancer in AWS
Thanks

Related

Understanding where generating fullchain.pem and privkey.pem fits into this cluster setup

I used this repo https://github.com/scarolan/vault-aws-cf to generate a HashiCorp Vault and HashiCorp Consul cluster for secrets management. During the setup, it was required that the vault AMI's needed certificates, in this case a fullchain.pem and privkey.pem
What is their purpose in this setup? I generated a managed certificate for https on Amazon Web Services but want to understand the AMI server requirements for the certificates.
those certs are used for your https listeners, for example here.
The AWS certificates you generated through AWS ACM wont work since they are managed by AWS.
You could generated AWS certs through ACM, but you'd need access to the private key as well, for example https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-export-private.html . That means that AWS wont be able to rotate your certs and you need to do it by hand.
You could also place your Vault behind an ALB and attach the certificates you generated in the first place in that ALB. This means that your SSL is terminated at the Load balancer level and the traffic between your ALB and Vault is going to be unencrypted.

HTTPS certificates - how to set on my architecture

I hava a Nodejs/Express application running on AWS. My public URL (www.example.com) is registered in a host provider (SiteGround).
My host provider DNS entry for the application points to AWS (application.example.com points to my AWS public IP).
My host provider has also our company web site running WordPress.
So, if you point to our public URL you get our website. Pointing to the application you get our SaaS login page.
All of that runs fine with HTTP. I have now a task to migrate everything to HTTPS. I've checked how to add HTTPS to nodejs, all fine.
My question is related to certificates. Questions:
a) Should I get the SSL certificate on my host company or on AWS? Both offers the certificates.
b) Do I need a certificate on AWS (to be added to nodejs) and at my domain (to allow HTTPS domain access) or just in nodejs ?
It does not matter from where you get your certificate as long as your provider gives you an authorized certificate. However, if you use Amazon's certificate manager, it can be be easier to integrate with their services.
If you are serving your application through AWS load balancer then you don't need to add it to the Node.js application, instead you get a certificate through the certificate manager and add it to the listening interface in the load balancer, it gets served automatically this way.
Create a Classic Load Balancer with an HTTPS Listener
HTTPS Listeners for Your Application Load Balancer
If you are serving your application directly, then you will need to add it to the Node.js application (e.g. using https module).
I'll try to answer each question below:
a) Should I get the SSL certificate on my host company or on AWS? Both
offers the certificates.
If the Amazon issued certificate is strong enough for your needs, like basic https encryption, I would opt to use them for the sake of simplicity. You just need to fill the form, validate and Amazon is in charge of making it secure and renew it automatically when it expires.
b) Do I need a certificate on AWS (to be added to nodejs) and at my
domain (to allow HTTPS domain access) or just in nodejs ?
AWS issued certificates can only be used with AWS managed services such as Application Load Balancer and CloudFront - CDN. There are many docs explaining about how to setup an ELB with AWS Certificate and EC2 Backend, check Create a Classic Load Balancer with an HTTPS Listener
In order to use them inside your EC2 vm you would need to download and configure it in your webserver. I think AWS will never allow it to avoid security breaches.
It doesn't matter how you will get a certificate. You can request free certificates with Letsencrypt using API, you can create certificates in AWS Load Balancer (but don't forget to check if AWS certificate limitations are fine for your case)
AWS LoadBalancer will be in front of your EC2 so it will sign certificates for you.
If you have an option to get certificate files (e.g. you create certificates yourself by using letsencrypt or other cert provider), you should keep certificates on your EC2 instance (if you have multiple instances, you should keep certificates on each instance). And you should use Network Load Balancer on tcp level, so NLB will just proxy your traffic which was already signed correctly.
Also you can use existing third-party solutions from AWS marketplace or non-AWS solutions. E.g. you can use AWS Kilo SLL. It is easy to setup, it will create and renew certificates for your domains. So you will have just an extra EC2 isntance which will sign all your traffic depending on the request domain. Mostly sure there are other alternatives similar solution to use, for our 240 domains Kilo works fine

Deploy https node express server to host website on AWS EC2

I'm quite new to this. I have a node-express https server that currently runs locally on my machine. My simple website runs on this https sever and make xmlhttp requests to consume some APIs (as these APIs only accept requests from https endpoint). At the moment I'm using a self signed SSL certificate.
I'd like to deploy the server with html, js files to EC2 and make it accessible to the public. My questions are
Can I use AWS Certificate Manager to generate a SSL certificate, and how to use it with node-express server? Can node-express use this SSL certificate on EC2? or do I need to use this SSL certificate with Elastic Beanstalk and ELB?
I did some research but the ACM documentation said an email will be sent to the registered domain owner for each domain name in the certificate request. I don't have a domain as I plan to have users access my site using IP address. What do I do in this case?
Many thanks for your help!
You can't use an ACM certificate directly with NodeJS. You have to place a load balancer in front of your server and install the ACM certificate on the load balancer.
The ACM service does not support SSL certificates for IP addresses, only domain names. I recommend obtaining a domain name.

How to download Certificate and Private Key on AWS EC2 when using NodeJS

I am relatively new to nodeJS. I have a AWS Instance using EC2 and I have successfully built http based severs.
I now want a SSL based server.
I used AWS Certificate Manager to create a new certificate and I have assigned it to the Load Balancer.
Within NodeJS I know I have to load the certificate and private key before creating the server.
What I seem to be missing is how to get the certificate and private key files onto my nodeJS server so that I can load them.
How is this done?
Within NodeJS I know I have to load the certificate and private key
before creating the server.
Incorrect. The certificate is served by the ACM certificate Elastic Load Balancer. It does not need to be, and can't be, installed on the NodeJS server.
What I seem to be missing is how to get the certificate and private
key files onto my nodeJS server so that I can load them.
You don't. That's not how ACM SSL certificates work. Once you have assigned the ACM certificate to the load balancer, and modified your DNS entries to point to the load balancer, you should be able to load your website via SSL.

Elastic Beanstalk node.js app served through SSL

I have develop an node.js app and successfully upload and deploy it using AWS tools and Elastic Beanstalk. My app is reachable through the url provided by EB.
I create a SSL Certification through AWS Certificate Manager and assign it from configuration menu. Load Balancer Config
When i checked Load balancer and security group configuration everything looks fine but if i'm trying to get https://myappurl.us-west-2.elasticbeanstalk.com i get privacy error response.
I think that this is more likely a Amazon support question but maybe someone know if i miss something.
Thanks
The SSL certificate will be for a specific domain. It is certainly not for the myappurl.us-west-2.elasticbeanstalk.com domain because you don't own the domain elasticbeanstalk.com so there's no way you could have created a valid SSL certificate for that domain. The SSL certificate is only going to work with the custom domain you created the certificate for, and only when you have that custom domain actually pointing to your Elastic Beanstalk environment.
SSL certificate works as per the domain name they were generated. As per your comment you got that certificate for myapp.mydomain.io so it will not work for myappurl.us-west-2.elasticbeanstalk.com you have to map myapp.mydomain.io to point to the EB and then your myapp.mydomain.io will serve the SSL certificate. https://myapp.mydomain.io.

Resources