阅读 76

前端开发者如何申请https证书并配置到nginx上

最近想搭建一个https的服务器,网上资料还是比较难以理解,在自己成功搭建后记录下来希望能方便大家

前提是要有nginx和pm2,pm2是一个强大的具有守护进程的功能的工具

npm install pm2 -g
复制代码

安装 acme.sh

curl https://get.acme.sh | sh
复制代码

生成证书

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证
/// 停用 nginx, 开启 <domain>.com 默认端口为 80 并重启 Web 静态服务器服务器,xxx.com替换成自己的域名 比如baixxdu.com

// 查看当前nginx进程的 pid(如 2072 2074)
ps -ef|grep nginx   
// 杀死进程 2072 2074
kill -9 2072 2074   

/// 申请签发 SSL 证书
// 切换目录

cd /.acme.sh 有时候会在/root/.acme.sh
// 运行签发命令
// 它将会往 /home/wwwroot/xxx.com/ 创建一个 .well-known 的文件夹,
// 同时 Let’ s Encrypt 将会通过你要注册的域名去访问那个文件来确定权限,它可能会去访问 
// http://xxx.com/.well-known/ 这个路径。 所以需要确保/home/wwwroot/xxx.com/ 能访问

在/home/wwwroot/xxx.com/文件夹(没有则创建一个)下 pm2 serve . 80 --name ca 后设置一个pm2静态服务器,然后
acme.sh --issue -d xxx.com -d www.xxx.com --webroot  /home/wwwroot/xxx.com/

/*
 * 以上命令成功执行会得到类似以下的输出:
[Fri Oct 15 15:10:16 CST 2016] Renew: 'xxx.com'
[Fri Oct 15 15:10:16 CST 2016] Single domain='xxx.com'
[Fri Oct 15 15:10:16 CST 2016] Getting domain auth token for each domain
[Fri Oct 15 15:10:16 CST 2016] Getting webroot for domain='xxx.com'
[Fri Oct 15 15:10:16 CST 2016] _w='/home/wwwroot/xxx.com/'
[Fri Oct 15 15:10:16 CST 2016] Getting new-authz for domain='xxx.com'
[Fri Oct 15 15:08:57 CST 2016] The new-authz request is ok.
[Fri Oct 15 15:08:57 CST 2016] Verifying:xxx.com
[Fri Oct 15 15:09:01 CST 2016] Success
[Fri Oct 15 15:09:01 CST 2016] Verify finished, start to sign.
[Fri Oct 15 15:09:02 CST 2016] Cert success.
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
[Fri Oct 15 15:09:02 CST 2016] Your cert is in  /root/.acme.sh/xxx.com/www.your-app.com.cer 
[Fri Oct 15 15:09:02 CST 2016] Your cert key is in  /root/.acme.sh/xxx.com/www.your-app.com.key 
[Fri Oct 15 15:09:04 CST 2016] The intermediate CA cert is in  /root/.acme.sh/xxx.com/ca.cer 
[Fri Oct 15 15:09:04 CST 2016] And the full chain certs is there:  /root/.acme.sh/xxx.com/fullchain.cer 
 */
复制代码

copy 证书到 nginx 或者其他服务

前面证书生成以后, 接下来需要把证书 copy 到真正需要用它的地方. 默认生成的证书都放在安装目录下: ~/.acme.sh/, 请不要直接使用此目录下的文件。
比如使用xftp把/root/.acme.sh/xxx.com.key/fullchain.cer和/root/.acme.sh/xxx.com/fullchain.cer 放到/etc/nginx/ssl/fullchain.cer和/etc/nginx/ssl/xxx.com.key  xxx.com替换成你的域名

/*
 * 以上命令成功会得到类似如下输出
[Fri Oct 15 15:29:57 CST 2016] Installing key to:/etc/nginx/ssl/<domain>.key
[Fri Oct 15 15:29:57 CST 2016] Installing full chain to:/etc/nginx/ssl/<domain>.key.pem 
 */
// 生成 dhparam.pem 文件,后面配置nginx有用
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
复制代码

然后

acme.sh --installcert -d <domain>.com \--key-file /etc/nginx/ssl/xxx.com.key \--fullchain-file /etc/nginx/ssl/fullchain.cer
// xxx.com替换成你的域名
复制代码

配置 Nginx

http {
    # 新增
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    # 兼容其他老浏览器的 ssl_ciphers 设置请访问 https://wiki.mozilla.org/Security/Server_Side_TLS
    server {
        listen 80;
        server_name <mydomain>.com;
        return 301 https://<mydomain>.com;
    }
    server {
        # 新增
        listen 443 ssl;
        ssl_certificate      /etc/nginx/ssl/fullchain.cer;
        ssl_certificate_key  /etc/nginx/ssl/xxx.com.key;
        ssl_dhparam  /etc/nginx/ssl/dhparam.pem;
    }
}
复制代码

重启 Nginx

/usr/local/nginx/sbin/nginx
/* * 
	Nginx 未安装 ssl 模块会报错,参考 * http://blog.csdn.net/w410589502/article/details/72833283 
*/
复制代码
文章分类
前端
文章标签