SSL 證書是一種數字證書,它使用 Secure Socket Layer 協議在瀏覽器和 Web 服務器之間創建一條安全通道,從而實現:
一、數據信息在客戶端和服務器之間的加密傳輸,保證雙方傳遞信息的安全性,不可被第三方竊聽;
二、用戶能夠經過服務器證書驗證他所訪問的網站是否真實可靠。php
要設置安全服務器,使用公共鑰建立一對公私鑰對。大多數狀況下,發送證書請求(包括本身的公鑰),你的公司證實材料以及費用到一個證書頒發機構(CA).CA驗證證書請求及您的身份,而後將證書返回給您的安全服務器。html
可是內網實現一個服務器端和客戶端傳輸內容的加密,能夠本身給本身頒發證書,只須要忽略掉瀏覽器不信任的警報便可!nginx
由CA簽署的證書爲您的服務器提供兩個重要的功能:web
生成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。安全
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訪問。