HTTPS笔记

2017-03-02  本文已影响49人  By_syk

Google、Apple 等大公司在大力推动 HTTPS,把自己的网站武装上 HTTPS 已经是势在必行。SSL证书有付费的,也有免费的。当然能用付费的更好,但对于自己的小站,免费SSL足矣。免费证书来源挺多,笔者选择了腾讯家的(DV SSL)。另外,阿里家也提供免费证书申请。

下面就记录了从申请证书到部署上 Nginx 的过程。

一、申请证书

访问腾讯云的SSL证书管理页面,通过 申请证书 渠道,按照提示步骤很快就会完成申请。

腾讯云 证书管理

下载证书压缩包,文件结构如下:

├ Apache
│   ├ 1_root_bundle.crt
│   ├ 2_www.domain.com.crt
│   └ 3_www.domain.com.key
├ IIS
│   └ www.domain.com.pfx
└ Nginx
    ├ 1_www.domain.com_bundle.crt
    └ 2_www.domain.com.key
二、部署到 Nginx
server {
    listen 443;
    server_name www.domain.com;

    ssl on;
    ssl_certificate /etc/nginx/cert/1_www.domain.com_bundle.crt;
    ssl_certificate_key /etc/nginx/cert/2_www.domain.com.key;

    ssl_session_timeout 5m;

    location / {
        # ...
    }
}

HTTP 与 HTTPS 共存:

server {
    listen 80;
    listen 443 ssl;
    server_name www.domain.com;

    # ssl on;
    ssl_certificate /etc/nginx/cert/1_www.domain.com_bundle.crt;
    ssl_certificate_key /etc/nginx/cert/2_www.domain.com.key;

    ssl_session_timeout 5m;

    location / {
        # ...
    }
}

注意 # ssl on;

* 相关概念

菩提树下的杨过.Net 的博客 openssl、x509、crt、cer、key、csr、ssl、tls 这些都是什么鬼? 中摘抄:

* 自建证书

通过 Linux 的 openssl 创建证书:

openssl genrsa 1024 > server.key
openssl req -new -key server.key -out csr.pem
openssl x509 -req -days 365 -in csr.pem -signkey server.key -out server.crt
* 部署到 Nodejs

对基于 express 框架的 Nodejs 进行改造。

var express = require('express');

var app = express();

// ...

var server = app.listen(80, function() {
  var host = server.address().address;
  var port = server.address().port;

  if (host == '::') {
    host = 'localhost';
  }
  
  logger.info('http://%s:%s/test/', host, port);
});

logger.info('Server is running...');
var express = require('express');
var https = require('https');
var fs = require('fs');

var app = express();

// ...

var key4Https = fs.readFileSync('./cert/2_www.domain.com.key', 'utf-8');
var crt4Https = fs.readFileSync('./cert/1_www.domain.com_bundle.crt', 'utf-8');
var credentials = { key: key4Https, cert: crt4Https };
var httpsServer = https.createServer(credentials, app);

httpsServer.listen(80, function() {
  logger.info('https://localhost/test/');
});

logger.info('Server is running...');
上一篇下一篇

猜你喜欢

热点阅读