|
|
ngin配置https协议/ a% n, V! c6 ~
1.https简介- r- ]# U4 M! p8 ^" R7 J+ |
HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据
3 ^6 w, O, v x9 I4 q% E2.https协议原理
5 d1 ~3 v) f' @ U首先,客户端与服务器建立连接,各自生成私钥和公钥,是不同的。服务器返给客户端一个公钥,然后客户端拿着这个公钥把要搜索的东西加密,称之为密文,并连并自己的公钥一起返回给服务器,服务器拿着自己的私钥解密密文,然后把响应到的数据用客户端的公钥加密,返回给客户端,客户端拿着自己的私钥解密密文,把数据呈现出来1 r$ ~) T l d" _
( a. U J2 Z( F
TLS或传输层安全( transport layer security),它的前身是SSL(安全套接字层secure sockets layer),是Web协议用来包裹在一个受保护,加密封装正常通道。" u4 C( E+ H3 k" u
采用这种技术,服务器和客户端之间可以安全地进行交互,而不用担心消息将被拦截和读取。证书系统帮助用户在核实它们与连接站点的身份。
6 c* z2 M* m9 O* f/ G4 v% @9 L0 ]5 d+ T1 y; q; q
" H( `+ V" V( J3 u1 f) [openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/nginx/conf/ssl/nginx.key -out /usr/local/nginx/conf/ssl/nginx.crt' `3 ~* d- ]3 J/ P, l }# n; }- J
' ]+ @2 R9 j4 D- x/ x& p4 w0 \, ~: T2 z6 J) M h+ z& A
Generating a 2048 bit RSA private key
7 E" n. o1 `- D% a/ b0 a...................+++
" k0 l# ?9 J: L0 ^% c k6 O @........+++
8 T9 K9 F7 b. y+ u+ B/ W0 mwriting new private key to '/usr/local/nginx/conf/ssl/nginx.key'' b" F# n9 U" M
-----6 i; ]* ?# ]3 B4 r$ f3 h
You are about to be asked to enter information that will be incorporated* v% W. e" B. l2 ^$ K5 S6 v
into your certificate request.
4 j0 n: _; C6 r! M$ \- g6 TWhat you are about to enter is what is called a Distinguished Name or a DN.: R1 c/ b4 r" Y- T5 y7 ^ b* ^8 ~* E
There are quite a few fields but you can leave some blank
$ ?3 Q' O: ]+ p# A: y/ ^. J) BFor some fields there will be a default value,
) u* u8 K# l5 G6 p1 @ k; dIf you enter '.', the field will be left blank.8 n S1 |7 o: f) f1 z# M3 [) R
-----
- b; ~4 D! C0 t% Y& O4 b* O7 i* ^; g/ F+ D, g5 P
Country Name (2 letter code) [XX]:BJ 1 |' F: j% | n$ X2 {+ @. L* k4 `: n
State or Province Name (full name) []:Beijing* S/ e. |3 |% N% O: T k: w" N- d/ M
Locality Name (eg, city) [Default City]:Beijing0 p( p( g% \: P* |- E+ r
Organization Name (eg, company) [Default Company Ltd]:Beijing
+ j$ T) c: F3 R* c, Y) ? ^Organizational Unit Name (eg, section) []:
2 d5 i- r# w8 V1 yCommon Name (eg, your name or your server's hostname) []: # Z' ^( X8 m" I# o9 \0 }
Email Address []:
% D& R& D( S) X [0 R4 v5 A% {: G! w2 A: R
% {; S# Z5 G) X* O
步骤2: Configure Nginx to Use SSL首先配置HTTP请求重定向 首先配置HTTP请求重定向 server {
: Z! g+ g, q* m ]: W. ]- C
$ q! M, R; F8 o+ V o4 T+ T listen 80;
+ T) D% M- L# u) j) R3 [: Z: x3 H. ~) y- h& ^, W
server_name www.yourdomain.com; 4 n' d& Z* w' f0 W' @ i. \! |/ p. u
* G. x) O; D6 o( Q
rewrite ^ https://$http_host$request_uri? permanent; # force redirect http to https #return 301 https://$http_host$request_uri;
/ q. ?) e- i, F0 U$ k9 K( J# c: K9 B0 p
}' Q& Z! l6 D B8 E4 A
/ N" {2 E7 N7 @5 M; userver { 5 B \, a6 r8 Q. o# b3 T1 Y6 Y
listen 443 ssl; ! {; h. N7 L P* f, R( q
ssl_certificate /etc/nginx/ssl/nginx.crt;
4 P$ d5 A" i+ ?# i4 Y" W- y9 i0 f2 W. d) N* |
ssl_certificate_key /etc/nginx/ssl/nginx.key; " j+ i7 T2 \! w" t2 E
keepalive_timeout 70;" Z: g4 @# c; M1 B* m2 U
9 A9 o- N8 o3 w( ~4 n server_name www.yourdomain.com; #禁止在header中出现服务器版本,防止黑客利用版本漏洞攻击 0 t, @3 h3 e, F3 E& Z, E X
& H/ P2 P0 u! K$ l! P- z8 h& v
server_tokens off; #如果是全站 HTTPS 并且不考虑 HTTP 的话,可以加入 HSTS 告诉你的浏览器本网站全站加密,并且强制用 HTTPS 访问 #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; # ...... $ r) o, h0 l6 J& H9 |
& x# n0 b5 I4 C# k) I fastcgi_param HTTPS on;
$ } ^' E* s. j. r. d, @; W# G
7 o j, H# M+ C$ y3 ? fastcgi_param HTTP_SCHEME https;
+ E: J O, Y/ B5 G9 W. v4 D; A3 l
* I7 ^. _8 U1 L# Y; k1 F- ~! y access_log /usr/local/nginx/logs/wiki.xby1993.net.access.log;
0 l0 Z3 @9 H9 F8 w! x$ e8 { e( I. v' J: B8 `
error_log /usr/local/nginx/logs/wiki.xby1993.net.error.log; : m6 s0 |1 G) I" H: Z
* W8 q* |4 p& u$ o
}
& @6 K& x, l4 l9 ?
3 v9 j" Q( G+ _) G* [ M, s如果想同时启用HTTP和HTTPS
" G+ K+ K* o k) E, |2 G9 ]( ^. L, W2 U9 d8 p8 f' q
server {
) _6 w" Z+ ?% g listen 80;
* s- i6 |* y) k7 h
& k' F, o, Y3 _ listen 443 ssl; ! v O- m/ u" a+ u% x1 p6 `* w* h
. U* s6 y) u; w3 W. L8 Y# F& f server_name www.example.com;
0 { ?6 X6 E" q
1 n2 X7 j( q! i0 B0 X2 ^2 L ssl_certificate www.example.com.crt; : z" s, l- G# Z( f( g7 h
ssl_certificate_key www.example.com.key;
: f* b& e+ ~5 g% N. b( q* z2 y7 a+ a8 f
...
0 X7 f- z4 G0 o }
6 D( F( }: k4 t8 {
& f8 H! T0 n W# `& m |
|