記錄配置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
- 上面的命令完成後會生成一個 host.csr,用 vi 開啟這個 csr 檔案,會看到:
-----BEGIN CERTIFICATE REQUEST-----
[encoded text here]
-----END CERTIFICATE REQUEST-----
複製程式碼
把這個檔案的內容(包括“BEGIN CERTIFICATE REQUEST”和“END CERTIFICATE REQUEST”這兩行)複製黏貼到 GoDaddy 的 CSR request form 裡,提交,等待 GoDaddy 驗證審批完成。
- 審批完成之後,GoDaddy 會生成一個壓縮包,裡面有兩個 crt 檔案(一個隨機命名的 crt 檔案和一個 gd_bundle.crt 檔案)。
第四步: 下載兩個.crt 檔案
- 登入您的賬戶管理器。
- 單擊“SSL 證書”。
- 在您要使用的證書旁,單擊“啟動”。
- 單擊“下載”。
- 選擇“伺服器型別”,這裡選擇的是 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"
總結
幾個核心點:
- 單域名證書和多域名證書生成祕鑰的方式不一樣
- 下載 crt 檔案時,選擇 Apache 伺服器
- 要合併兩個 crt 檔案
- 要生成解密的 key 檔案,避免重啟 Nginx 輸密碼
- Tomcat 的配置
參考
Amazon EC2 + Tomcat + Ngnix + Godaddy 配置 HTTPS
購買 ssl
生成解密 key
修改 Nginx 和 Tomcat 配置
下載 crt 檔案
SSL 證書生成與 Nginx 配置,UCC 證書生成(linux)