此篇為從舊 Blog 搬過來的 ~
環境需求: GCE, Ubuntu 16.04, Docker,Namecheap,Cloudflare
在 Namecheap 購買 SSL 完畢後,在 Product List 可以看到購買的 SSL (已經啟動所以這邊是空的)
按 Manage 後會進入
開啟你的機器輸入
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr Generating a 2048 bit RSA private key
按照提示進行填寫
Enter the following details using English alphanumeric symbols only: Country Name: TW State or Province Name: NA Locality Name (city): $city Organization Name: NA Organizational Unit Name: NA Common Name: $domain Email address: $mail
“A challenge password” and “An optional company name” 直接Enter
看目錄就會生成 server.csr and server.key
cat server.csr
複製以下內容
—–BEGIN CERTIFICATE REQUEST—–
內容
—–END CERTIFICATE REQUEST—–
然後貼到 Namecheap
Web server 是 Nginx,所以選第二個
第三步為驗證域名,在這邊我使用 DNS,忘了截圖 ….
接下來按 Submit
EDIT METHODS 是可以修改認證方法(mail,http,DNS),按旁邊的倒三角型
使用 DNS 驗證,它會給你 HOST 跟 TARGET
接著開啟Cloudflare,進入到 DNS 畫面
Type 選擇 CNAME,NAME 填入 HOST,Value 填入 TARGET,Add Record
過段時間就會傳 mail 跟你說認證成功了,並下載證書
將 DNS.ca-bundle 跟 DNS.crt 用 ftp 傳到機器上(傳家目錄才不會發生錯誤)
在來把它們合併成一個 crt,跟著原先申請的 server.key 移到欲掛載的資料夾
cat $example.com.crt $example.com.ca-bundle > server.crt mv server.crt server.key /opt/nginx/conf.d/certs
記得看 server.crt 格式有無錯誤,用 vim 有錯誤順便改
vim server.crt
正確格式如下,如果還有錯,就去 google 吧,這方面錯誤資訊蠻多的
—–BEGIN CERTIFICATE—–
內容
—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–
內容
—–END CERTIFICATE—–
修改 Nginx 配置文件 /opt/nginx/conf.d/default.conf
server { #listen 80; listen 443 ssl; listen [::]:443 ssl; ssl on; ssl_certificate /etc/nginx/conf.d/certs/server.crt; ssl_certificate_key /etc/nginx/conf.d/certs/server.key; server_name $example.com; location / { root /usr/share/nginx/html; index index.html; } error_page 500 502 503 504 /50x.html; } server { listen 80; listen [::]:80; server_name $example.com; return 301 https://$example.com$request_uri; #強制http重導向https }
Docker-compose.yml
version: '3' services: nginx_web: image: nginx:latest container_name: nginx_web environment: TZ: "Asia/Taipei" volumes: - ./nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf - ./conf.d:/etc/nginx/conf.d - ./log:/var/log/nginx - ./www:/usr/share/nginx/html ports: - "8000:80" - "443:443" expose: - 80 - 443 command: bash -c "nginx -g 'daemon off;'"
其實 Cloudflare 就可以幫我們掛 ssl,但看到 Namecheap ssl 特價就手賤…
Flexible SSL: 部分 SSL 加密連線,你不必擁有 SSL 證書。免技術直接套用 Cloudflare 免費 SSL。訪客連線到 Cloudflare 是採用加密連線,從 Cloudflare 到主機則不走加密連線。訪客可以在瀏覽器看到綠色鎖頭。
Full SSL: 全程 SSL 加密連線,你必須擁有一個 SSL 證書在你的主機上,不過 Cloudflare 並不會檢查你的 SSL 證書是自己簽署或第三方公正單位發下來的。 訪客可以在瀏覽器看到綠色鎖頭。
Full SSL(Strict): 全程使用 SSL 加密連線,你必須擁有一個 SSL 證書在你網站上,而且 Cloudflare 會檢查你主機端的 SSL 證書是否為第三方公正單位簽署(不能使用自己簽署的)。 訪客可以在瀏覽器看到綠色鎖頭。
因為網站上用的是 Namecheap ssl,所以要用 Full SSL(Strict)