首先说下https也就是ssl证书,一般我们认为https是安全的,但是SSL 证书的信用链体系并不安全。特别是在某些国家(咳咳,你们懂的)可以控制 CA 根证书的情况下,中间人攻击一样可行。另外,在客户端被植入无数后门、木马的状况下,HTTPS 连接的作用非常有限。
好了,我们可以开始配置ssl了。一般来说我比较推荐namecheap的ssl证书,因为比较便宜,毕竟对大部分个人博客来说只是想要那个绿锁提升逼格罢了~现在Let’s Encript免费证书已经开发,十分推荐使用,可以参考我写的文章
使用OpenSSL生成证书
执行
cd /usr/local/nginx/conf/ openssl genrsa -out yourdomain.pem 2048
会有如下输出
Generating RSA private key, 2048 bit long modulus ........+++ ................................................................................................................+++ e is 65537 (0x10001)
生成证书
openssl req -new -key yourdomain.pem -out yourdomain.csr
会出现以下提示
You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. -----
按照提示输入相应信息即可
Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:Bigfa Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:yourdomain.com Email Address []:admin@yourdomain.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
执行cat yourdomain.csr
-----BEGIN CERTIFICATE REQUEST----- MIICxDCCAawCAQAwfzELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaWppbmcxEDAO BgNVBAcMB0JlaWppbmcxDjAMBgNVBAoMBUJpZ2ZhMRcwFQYDVQQDDA55b3VyZG9t YWluLmNvbTEjMCEGCSqGSIb3DQEJARYUYWRtaW5AeW91cmRvbWFpbi5jb20wggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9fsxThwLzCd54s2GMUcjlleCj LTf9bYGQyIjn+6z7kJbDbcrkbZxMysfRnFLa6u5oK7S9PQfGHK/gZeHfSLXbD/GL wi171tZpnQHjfLjMbHEUEUCFQD7ueek/v3/Tr+T0+em1gQt/93K2dqv7Cx+bupwc zNkQmqNgqslC4sdKQZjLUIHYLr/j8lQQLOOn9/PiuNOGCTaK5g9TA20oVCjpJZuf 1eN7jYUOtvy4IGhq4BkNJHHmg32cxH9mZOgmhohq+pbmi0PP8E2OFTzpyZ6OcFtW IcSRq3UpjPw8EYfEg4lDC0Xee2Yom7Is8yBWAPcNKxpvFphlHirHOF6xifRzAgMB AAGgADANBgkqhkiG9w0BAQUFAAOCAQEAN9OnT8J1VnO74bXbJS9ub7DGf94klpoy YQWePKelnImU1Zszdg3jYtKWZVcNYhM5QfZ16CDKwYEQeQkgy1xSBKkwpY24ICe+ iX1sczvBY/gUq+xNArL5La7/Tow3KrJZJuFc1iVESBG0wU8zu9ZcnwbuRj0Dn8qj fMqwwct+0Xz2zXxiqtVCPNQXqa/YRANGnFnBBPErBnaL/j439s4TBasSiIyb7TE+ Ku9LrfecL5w8+05NFPcG1ArpbQJDuJIIAk1itTMLEMGqUYWD6MYcksH4FcTr70Vw f8Ag9+Csyf5aQxQVgNDCgc3zwHTg0Bpbldx8+HiCiDXjaK4qAXKBRQ== -----END CERTIFICATE REQUEST-----
把—–BEGIN CERTIFICATE REQUEST—–开头到—–END CERTIFICATE REQUEST—–结尾的全部内容复制下来。
NameCheap生成数字证书
进入Namecheap管理界面,点击“Activate Now”即可激活SSL产品。
之后会出现一个提交证书向CA(数字证书颁发机构)提交OpenSSL生成的证书的页面,把前面复制的内容粘贴进去,系统选择nginx。
接下来是选择域名管理员邮箱,邮箱必须是能够接收到邮件。同时确认一下生成证书时填写的信息是否正确。这个邮箱我表示太他妈坑了,前面几个是域名邮箱,后面那个是whois邮箱,如果选择whois邮箱会转发到你的联系邮箱。最好还是使用配置的域名邮箱,比较方便,如果没收到的话查看一下自己的垃圾邮件。
之后提交订单即可。
过段时间会收到一封验证邮件,点击邮件中的验证地址并并填写验证码即可。
过段时间邮箱就会收到发来的证书,下载附件的压缩包解压,里面好像有4个文件,我们最终使用的是yourdomain.crt。
在上传到服务器之前要把第二个和第三个的内容放到yourdomain.crt中,第一个不需要使用。完成后把yourdomain.crt上传到你的服务器中
Nginx虚拟主机设置SSL
ssl是443端口,注意证书路径。
server { listen 443 ; server_name fatesinger.com; ssl on; ssl_certificate /usr/local/nginx/conf/yourdomain.crt; ssl_certificate_key /usr/local/nginx/conf/yourdomain.pem; index index.html index.htm index.php default.html default.htm default.php; root /home/wwwroot/fatesinger.com; access_log /home/wwwlogs/fatesinger.com.log access; }
全站https跳转
if ($server_port = 80) { return 301 https://$server_name$request_uri; } if ($scheme = http) { return 301 https://$server_name$request_uri; } error_page 497 https://$server_name$request_uri;