自行頒發不受瀏覽器信任的SSL證書


ssh登陸到服務器上,終端輸入以下命令,使用openssl生成RSA密鑰及證書。

 
        
# 生成一個RSA密鑰 
$ openssl genrsa -des3 -out 33iq.key 1024
 
# 拷貝一個不需要輸入密碼的密鑰文件
$ openssl rsa -in 33iq.key -out 33iq_nopass.key
 
# 生成一個證書請求
$ openssl req -new -key 33iq.key -out 33iq.csr
 
# 自己簽發證書
$ openssl x509 -req -days 365 -in 33iq.csr -signkey 33iq.key -out 33iq.crt
 
        

第3個命令是生成證書請求,會提示輸入省份、城市、域名信息等,重要的是,email一定要是你的域名后綴的。這樣就有一個 csr 文件了,提交給 ssl 提供商的時候就是這個 csr 文件。當然我這里並沒有向證書提供商申請,而是在第4步自己簽發了證書。

編輯配置文件nginx.conf,給站點加上HTTPS協議

server {
    server_name YOUR_DOMAINNAME_HERE;
    listen 443;
    ssl on;
    ssl_certificate /usr/local/nginx/conf/33iq.crt;
    ssl_certificate_key /usr/local/nginx/conf/33iq_nopass.key;
    # 若ssl_certificate_key使用33iq.key,則每次啟動Nginx服務器都要求輸入key的密碼。
}

重啟Nginx后即可通過https訪問網站了。

只針對注冊、登陸進行https加密處理
既然HTTPS能保證安全,為什么全世界大部分網站都仍舊在使 用HTTP呢?使用HTTPS協議,對服務器來說是很大的負載開銷。從性能上考慮,我 們無法做到對於每個用戶的每個訪問請求都進行安全加密(當然,Google這種大神除外)。作為一個普通網站,我們所追求的只是在進行交易、密碼登陸等操 作時的安全。通過配置Nginx服務器,可以使用rewrite來做到這一點。

在https server下加入如下配置:

if ($uri !~* "/logging.php$") { rewrite ^/(.*)$ http://$host/$1 redirect; }
 

在http server下加入如下配置:

if ($uri ~* "/logging.php$") { rewrite ^/(.*)$ https://$host/$1 redirect; }
 

這樣一來,用戶會且只會在訪問logging.php的情況下,才會通過https訪問。

更新:有一些開發框架會根據 $_SERVER['HTTPS'] 這個 PHP 變量是否為 on 來判斷當前的訪問請求是否是使用 https。為此我們需要在 Nginx 配置文件中添加一句來設置這個變量。遇到 https 鏈接重定向后會自動跳到 http 問題的同學可以參考一下。

server {
    ...
    listen 443;
    location \.php$ {
        ...
        include fastcgi_params;
        fastcgi_param HTTPS on; # 多加這一句
    }
}
 
server {
    ...
    listen 80;
    location \.php$ {
        ...
        include fastcgi_params;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM