先說下https也就是ssl認證,一般我們認為https是安全的,但是SSL 憑證的信用鏈體系並不安全。特別是在某些國家(咳咳,你們懂的)可以控制 CA 根憑證的情況下,中間人攻擊一樣可行。另外,在用戶端被植入無數後門、木馬的狀況下,HTTPS 串連的作用非常有限。
我不使用的原因
更換https和替換網域名稱代價是一樣的
又拍雲不支援自訂網域名https
好了,我們可以開始配置ssl了。一般來說我比較推薦namecheap的ssl認證,因為比較便宜,畢竟對大部分個人部落格來說只是想要那個綠鎖提升逼格罷了~
使用OpenSSL產生認證
cd /usr/local/nginx/conf/
/usr/local/nginx/conf# openssl genrsa -out yourdomain.pem 2048
Generating RSA private key, 2048 bit long modulus
........+++
................................................................................................................+++
e is 65537 (0x10001)
產生認證
openssl req -new -key yourdomain.pem -out yourdomain.csr
會出現以下提示
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) [XX]:CN
State or Province Name (full name) []:Beijing
Locality Name (eg, city) [Default City]:Beijing
Organization Name (eg, company) [Default Company Ltd]:Bigfa
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:yourdomain.com
Email Address []:admin@yourdomain.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
執行cat yourdomain.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICxDCCAawCAQAwfzELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaWppbmcxEDAO
BgNVBAcMB0JlaWppbmcxDjAMBgNVBAoMBUJpZ2ZhMRcwFQYDVQQDDA55b3VyZG9t
YWluLmNvbTEjMCEGCSqGSIb3DQEJARYUYWRtaW5AeW91cmRvbWFpbi5jb20wggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9fsxThwLzCd54s2GMUcjlleCj
LTf9bYGQyIjn+6z7kJbDbcrkbZxMysfRnFLa6u5oK7S9PQfGHK/gZeHfSLXbD/GL
wi171tZpnQHjfLjMbHEUEUCFQD7ueek/v3/Tr+T0+em1gQt/93K2dqv7Cx+bupwc
zNkQmqNgqslC4sdKQZjLUIHYLr/j8lQQLOOn9/PiuNOGCTaK5g9TA20oVCjpJZuf
1eN7jYUOtvy4IGhq4BkNJHHmg32cxH9mZOgmhohq+pbmi0PP8E2OFTzpyZ6OcFtW
IcSRq3UpjPw8EYfEg4lDC0Xee2Yom7Is8yBWAPcNKxpvFphlHirHOF6xifRzAgMB
AAGgADANBgkqhkiG9w0BAQUFAAOCAQEAN9OnT8J1VnO74bXbJS9ub7DGf94klpoy
YQWePKelnImU1Zszdg3jYtKWZVcNYhM5QfZ16CDKwYEQeQkgy1xSBKkwpY24ICe+
iX1sczvBY/gUq+xNArL5La7/Tow3KrJZJuFc1iVESBG0wU8zu9ZcnwbuRj0Dn8qj
fMqwwct+0Xz2zXxiqtVCPNQXqa/YRANGnFnBBPErBnaL/j439s4TBasSiIyb7TE+
Ku9LrfecL5w8+05NFPcG1ArpbQJDuJIIAk1itTMLEMGqUYWD6MYcksH4FcTr70Vw
f8Ag9+Csyf5aQxQVgNDCgc3zwHTg0Bpbldx8+HiCiDXjaK4qAXKBRQ==
-----END CERTIFICATE REQUEST-----
把—
NameCheap產生數位憑證
因為新認證還沒有網域名稱可用,所以這部分截圖以後補上。
進入Namecheap管理介面,點擊“Activate Now”即可啟用SSL產品。
之後會出現一個提交認證向CA(數位憑證頒發機構)提交OpenSSL產生的認證的頁面,把前面複製的內容粘貼進去,系統選擇nginx。
接下來是選擇網域名稱管理員郵箱,郵箱必須是能夠接收到郵件。同時確認一下產生認證時填寫的資訊是否正確。選用預設那個特別長的會發送到你namecheap的註冊郵箱。
之後提交訂單即可。
過段時間會收到一封驗證郵件,點擊郵件中的驗證地址並並填寫驗證碼即可。
過段時間郵箱就會收到發來的認證,下載附件的壓縮包解壓,裡面好像有4個檔案,選擇你yourdomain.pem。上傳到你的伺服器,注意路徑,後面配置的時候需要載入這個認證
Nginx虛擬機器主機設定SSL
ssl是443連接埠,注意憑證路徑。
server
{
listen 443 ;
server_name fatesinger.com;
ssl on;
ssl_certificate /usr/local/nginx/conf/fatesinger_com.crt;
ssl_certificate_key /usr/local/nginx/conf/bigfa.pem;
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/fatesinger.com;
access_log /home/wwwlogs/fatesinger.com.log access;
}
全站https跳轉
if ($server_port = 80) {
return 301 https://$server_name$request_uri;
}
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
error_page 497 https://$server_name$request_uri;
最後就是ssl認證本身沒多少錢,也有免費的,如果我是新站的話我肯定毫不猶豫的配置上ssl認證,但是現在對我來說全站配置ssl代價還是蠻大的,所以只在部分URL啟用了https,如何只在部分url使用https可以接著往下看
在nginx的配置中,必須同時配置兩個連接埠,一個是80一個是443。
server {
root /var/www/
location / {
}
location /user {
rewrite ^ https://$http_host$request_uri? permanent;
}
}
這個帶/user的url會自動跳轉為https
然後在443連接埠進行相反的設定
Then, in your 443 server, you do the opposite.
server {
listen 443;
root /var/www/
location / {
rewrite ^ http://$http_host$request_uri? permanent;
}
location /user {
}
}
。https肯定是趨勢,如果是新站還不差那幾十塊錢的話就配置一個吧。