SSL證書部署HTTPS站點Apache/Nginx配置

SSL證書及HTTPS協議

SSL 證書是一種數字證書,它使用 Secure Socket Layer 協議在瀏覽器和 Web 服務器之間創建一條安全通道,從而實現:
一、數據信息在客戶端和服務器之間的加密傳輸,保證雙方傳遞信息的安全性,不可被第三方竊聽;
二、用戶能夠經過服務器證書驗證他所訪問的網站是否真實可靠。php

要設置安全服務器,使用公共鑰建立一對公私鑰對。大多數狀況下,發送證書請求(包括本身的公鑰),你的公司證實材料以及費用到一個證書頒發機構(CA).CA驗證證書請求及您的身份,而後將證書返回給您的安全服務器。html

可是內網實現一個服務器端和客戶端傳輸內容的加密,能夠本身給本身頒發證書,只須要忽略掉瀏覽器不信任的警報便可!nginx

由CA簽署的證書爲您的服務器提供兩個重要的功能:web

  • 瀏覽器會自動識別證書而且在不提示用戶的狀況下容許建立一個安全鏈接
  • 當一個CA生成一個簽署過的證書,它爲提供網頁給瀏覽器的組織提供身份擔保。
  • 多數支持ssl的web服務器都有一個CA列表,它們的證書會被自動接受。當一個瀏覽器遇到一個其受權CA並不在列表中的證書,瀏覽器將詢問用戶是否接受或拒絕鏈接

生成SSL證書apache

# 生成一個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步本身簽發了證書。瀏覽器

 

HTTPS 是以安全爲目標的 HTTP 通道,即 HTTP 下加入 SSL 加密層。HTTPS 不一樣於 HTTP 的端口,HTTP默認端口爲80,HTTPS默認端口爲443。安全

apache,nginx配置HTTPS

nginx配置,/etc/nginx/nginx.conf 加入:bash

     server {
            listen     80; server_name kwdst.welcom.cn; rewrite ^ https://$http_host$request_uri? permanent;     } server { listen 443 ssl; server_name kwdst.welcom.cn ssl on; ssl_certificate /etc/nginx/cert/2ceo.pem; //路徑 ssl_certificate_key /etc/nginx/cert/2ceo.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location / { root /var/www/static; add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; } }

Apache 可直接在apache2.conf中加入也能夠在/etc/apache/sites-enabled/建立 .conf後綴的配置文件.服務器

<VirtualHost *:80>
        ServerName  kwdbiz.welcom.cn
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/carku/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined RewriteEngine on RewriteCond %{HTTPS} !=on RewriteRule ^(.*)?$ https://%{SERVER_NAME}$1 [L,R]</VirtualHost> <VirtualHost *:443> ServerName kwdbiz.welcom.cn ServerAdmin webmaster@localhost DocumentRoot /var/www/html/carku/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/apache2/cert/2ceo/2ceo.pem SSLCertificateKeyFile /etc/apache2/cert/2ceo/2ceo.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> </VirtualHost>

重啓apache/nginx便可訪問HTTPS 網站.session

 

使用HTTPS協議安全但對服務器來講是很大的負載開銷,因此通常對一些安全有要求的操做使用HTTPS安全加密,如:交易,用戶密碼相關等.

在https server下加入以下配置:

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

在http server下加入以下配置:

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

這樣一來,用戶會且只會在訪問login.php的狀況下,纔會經過https訪問。

相關文章
相關標籤/搜索