Amazon EC2 + Tomcat + Ngnix + Godaddy 配置HTTPS

志文軒發表於2018-12-11

記錄配置HTTPS過程,環境是Amazon EC2 + Tomcat + Ngnix + Godaddy。

第一步:購買 SSL 證書

傳送門

第二步:生成 CSR

買完證書之後,在賬戶裡進行配置的時候發現 GoDaddy 要求輸入 CSR。生成 CSR 這一部分需要在 EC2 Instance 裡面完成。

1. 生成私鑰(private key)

$ openssl genrsa -des3 -out host.key 2048
Generating RSA private key, 2048 bit long modulus
..................................................+++
...............................+++
e is 65537 (0x10001)
Enter pass phrase for host.key:
Verifying - Enter pass phrase for host.key:
複製程式碼

注意:
(1) EC2 裡 openssl 是裝好可以直接用的。
(2) pass phrase 要記住,後面還要用

2. 用私鑰生成 certificate signing request,也就是前面所提到的 CSR。

單域名證書:

直接輸入:

$ openssl req -new -key host.key -out host.csr
複製程式碼

UCC 多域名證書:

先建立配置檔案 san.cfg,內容如下:

[ req ]
default_bits = 2048
default_keyfile = host.key
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = US
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Texas
localityName = Locality Name (eg, city)
localityName_default = Huston
organizationName = Organization Name (eg, company)
organizationName_default = Bees360, Inc.
commonName =  Common Name (e.g. server FQDN or YOUR name)
commonName_default = libertymutual.bees360.com
commonName_max = 64
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Bees360, Inc.
emailAddress = Email Address
emailAddress_max = 64
emailAddress_default = client@bees360.com
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = pilotcat.bees360.com
DNS.2 = test.bees360.com
DNS.3 = frontlineinsurance.bees360.com
複製程式碼

其中 DNS1,2,3 分別是其他域名

接著輸入

openssl req -new   -key host.key -out host.csr  -config san.cfg
複製程式碼

輸入這個命令之後 openssl 會讓你輸入上一步裡提到的 pass phrase,然後在輸入若干跟你的網站和公司有關的資訊如下。 其中 Organizational Unit Name 和 Common Name 是最重要的,要輸入你的網站的域名,其他可以隨便填。

Enter pass phrase for host.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:Missouri
Locality Name (eg, city) []:Saint Louis
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:www.mycompany.com
Common Name (e.g. server FQDN or YOUR name) []:www.mycompany.com
Email Address []:contact@mycompany.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
複製程式碼

第三步:提交 CSR

  1. 上面的命令完成後會生成一個 host.csr,用 vi 開啟這個 csr 檔案,會看到:
-----BEGIN CERTIFICATE REQUEST-----
[encoded text here]
-----END CERTIFICATE REQUEST-----
複製程式碼

把這個檔案的內容(包括“BEGIN CERTIFICATE REQUEST”和“END CERTIFICATE REQUEST”這兩行)複製黏貼到 GoDaddy 的 CSR request form 裡,提交,等待 GoDaddy 驗證審批完成。

  1. 審批完成之後,GoDaddy 會生成一個壓縮包,裡面有兩個 crt 檔案(一個隨機命名的 crt 檔案和一個 gd_bundle.crt 檔案)。

第四步: 下載兩個.crt 檔案

  1. 登入您的賬戶管理器。
  2. 單擊“SSL 證書”。
  3. 在您要使用的證書旁,單擊“啟動”。
  4. 單擊“下載”。
  5. 選擇“伺服器型別”,這裡選擇的是 Apache,然後單擊“下載 Zip 檔案”。

第五步:上傳.crt 檔案併合並.crt 檔案

把 crt 檔案上傳到 EC2。合併兩個檔案,如下:

cat 47b24b5e655c714f.crt gd_bundle.crt > mysite_combined.crt
複製程式碼

第六步:生成一個解密的 key 檔案

生成一個解密的 key 檔案, 避免每次重啟 Nginx 都要輸密碼

openssl rsa -in host.key -out host.key.unsecure
複製程式碼

第七步: 修改 Nginx 配置檔案

//增加部分
server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name www.example.com;
        return 301 https://www.example.com$request_uri;
}
server {
        //刪除部分
        #listen 80 default_server;
        #listen [::]:80 default_server;

        # SSL configuration
        #
        //增加部分
         listen 443 ssl default_server;
         listen [::]:443 ssl default_server;
         server_name www.example.com;

        ssl on;
        ssl_certificate /home/ubuntu/https/mysite_combined.crt; //證書位置
        ssl_certificate_key /home/ubuntu/https/host.key.unsecure; //證書位置
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
        ssl_prefer_server_ciphers   on;

        ....
}

複製程式碼

第八步:修改 Tomcat 配置檔案

在 Value 標籤中增加屬性: protocolHeader="X-Forwarded-Proto"

總結

幾個核心點:

  1. 單域名證書和多域名證書生成祕鑰的方式不一樣
  2. 下載 crt 檔案時,選擇 Apache 伺服器
  3. 要合併兩個 crt 檔案
  4. 要生成解密的 key 檔案,避免重啟 Nginx 輸密碼
  5. Tomcat 的配置

參考

Amazon EC2 + Tomcat + Ngnix + Godaddy 配置 HTTPS
購買 ssl
生成解密 key
修改 Nginx 和 Tomcat 配置
下載 crt 檔案 SSL 證書生成與 Nginx 配置,UCC 證書生成(linux)

相關文章