世界的过客

每个人获得的东西都恰好是他值得获得的东西

CentOS升级HTTPS

升级https

最近需要将域名升级为https, 以满足安全性和一些第三方接口的要求。 目前的技术栈为前端VUE, 后端为Tornado。Tornado负责接口的实现。

具体步骤

curl https://get.acme.sh | sh 安装acme.sh

source ~/.bashrc acme.sh --issue -d www.your-app.com -w /home/work/www/your-app/current/public 这里的public需要通过域名外网可访问

acme.sh --installcert -d www.your-app.com \
            --keypath       /home/work/www/ssl/www.your-app.com.key  \
            --fullchainpath /home/work/www/ssl/www.your-app.com.key.pem \
            --reloadcmd     "sudo service nginx force-reload"

这里是ubuntu上的用法,而我用的服务器是CentOS系统的,所以最后一句需要改为

--reloadcmd "sudo systemctl reload nginx"

最后一句为了免密执行需要再设置下: sudo visudo work ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx # work 是工作目录 生成 dhparam.pem 文件: openssl dhparam -out /home/work/www/ssl/dhparam.pem 2048

遇到的问题

首先需要解决的是证书, 关于这点acme.sh解决了这个问题, 详细内容可以看参考。 当生成证书, 写好nginx配置的时候, 测试配置的时候直接报错unknown directive "ssl"。 很明显ssl不支持, 查看配置确实是最初编译的时候没加入http_ssl_module, 随后重新编译加上--with-http_ssl_module, 于是就解决了这个问题。

配置Nginx

server {
    listen       443 ssl;
    server_name  subdomain.dommain.com;

    ssl_certificate      /home/work/path/subdomain.domain.com.key.pem;
    ssl_certificate_key  /home/work/path/subdomain.domain.com.key;
    ssl_dhparam /home/work/path/dhparam.pem;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers  on;
    ...

}

http 强制跳转https

server {
    listen       80;
	server_name  subdomain.domain.com;
    rewrite /(.*) https://$http_host/$1 redirect;
}

最后检查并重启nginx

这个具体的命令依据不同版本的系统而不同, 更多内容看参考文章。

使用 acme.sh 给 Nginx 安装 Let’ s Encrypt 提供的免费 SSL 证书

title: CentOS升级HTTPS date: 2017-12-28 21:38:29 categories: Nginx tags: - https - nginx - web

升级https

最近需要将域名升级为https, 以满足安全性和一些第三方接口的要求。 目前的技术栈为前端VUE, 后端为Tornado。Tornado负责接口的实现。

具体步骤

curl https://get.acme.sh | sh 安装acme.sh

source ~/.bashrc acme.sh --issue -d www.your-app.com -w /home/work/www/your-app/current/public 这里的public需要通过域名外网可访问

acme.sh --installcert -d www.your-app.com \
            --keypath       /home/work/www/ssl/www.your-app.com.key  \
            --fullchainpath /home/work/www/ssl/www.your-app.com.key.pem \
            --reloadcmd     "sudo service nginx force-reload"

这里是ubuntu上的用法,而我用的服务器是CentOS系统的,所以最后一句需要改为

--reloadcmd "sudo systemctl reload nginx"

最后一句为了免密执行需要再设置下: sudo visudo work ALL=(ALL) NOPASSWD: /bin/systemctl reload nginx # work 是工作目录 生成 dhparam.pem 文件: openssl dhparam -out /home/work/www/ssl/dhparam.pem 2048

遇到的问题

首先需要解决的是证书, 关于这点acme.sh解决了这个问题, 详细内容可以看参考。 当生成证书, 写好nginx配置的时候, 测试配置的时候直接报错unknown directive "ssl"。 很明显ssl不支持, 查看配置确实是最初编译的时候没加入http_ssl_module, 随后重新编译加上--with-http_ssl_module, 于是就解决了这个问题。

配置Nginx

server {
    listen       443 ssl;
    server_name  subdomain.dommain.com;

    ssl_certificate      /home/work/path/subdomain.domain.com.key.pem;
    ssl_certificate_key  /home/work/path/subdomain.domain.com.key;
    ssl_dhparam /home/work/path/dhparam.pem;

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers  on;
    ...

}

http 强制跳转https

server {
    listen       80;
	server_name  subdomain.domain.com;
    rewrite /(.*) https://$http_host/$1 redirect;
}

最后检查并重启nginx

这个具体的命令依据不同版本的系统而不同, 更多内容看参考文章。

使用 acme.sh 给 Nginx 安装 Let’ s Encrypt 提供的免费 SSL 证书