默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,参见 nginx的编译安装
以下默认nginx已正确安装,且加载了ssl模块。
1. https的单向认证和双向认证
从我的理解来说,http和https的主要区别在于,是否持证上岗!怎么理解?比如说有两个银行,一个有国家颁发的银行业资质证,另一个没有(记得南京某年曾经发生过一个假银行的大案)。有证的就是https,持有一个具有公信力的机构颁发的证书,让我对他更相信一些,所以在存款的时候我会更相信有证的这个。特别是在电信诈骗尤为严重的今天,https的网站能给你更多安全感,仅此而已。
什么是单向认证和双向认证?还以存钱来说,你去存钱,要银行出示从业资格证,他提供了,你核对国家提供的证书编号发现是真的,然后你把钱存进去,这就是单向验证;你验证完银行是真的,然后银行要你提供身份证,通过你的身份证号查到你的存款账户确实是这个,于是同意你把钱存进去,这就是双向验证。
显然,双向验证更安全但麻烦,单向验证很多时候就足够使用了。因此大部分情况下都是单向验证,除了少数对安全有苛刻要求的环境,比如银行。
2. 证书生成
证书一般是由几个具有公信力的大机构来提供,这样可以保证证书的权威性和公信力——收费的。由于是本地测试,这里我们自己生成个证书用,当然不会被别人认可,但是测试够用了~
a. 进入想要创建证书和秘钥的目录,一般是nginx的conf目录下,如:
cd /usr/local/nginx/conf
创建服务器私钥,执行以下命令,会让你输入一个口令,要记住它:
openssl genrsa -des3 -out server.key 1024
创建签名请求的证书(CSR):
openssl req -new -key server.key -out server.csr
这里执行后会让你填写一些服务器相关信息,如域名、公司等数据
在加载SSL支持的nginx并使用上述私钥时除去必须的口令:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
最后标记证书使用上述私钥和csr:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
3. nginx配置
修改Nginx配置文件,让其包含新标记的证书和私钥,注意,https默认端口为443,不是80:
server {
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/server.crt;
ssl_certificate_key /usr/local/nginx/conf/server.key;
}
重启nginx。
这样就可以通过以下方式访问:
https://YOUR_DOMAINNAME_HERE
另外还可以加入如下代码实现80端口重定向到443
server {
listen 80;
server_name ww.centos.bz;
rewrite ^(.*) https://$server_name$1 permanent;
}