开发环境配置本地自签SSL证书

作者:matrix 发布时间:2024-06-20 分类:Linux PHP Wordpress

项目地址:https://github.com/FiloSottile/mkcert

本地开发环境有时候需要模拟真实的HTTPS环境,那就必须得配置SSL证书了。自签SSL证书就可以搞定,这回尝试用mkcert工具生成和配置自签SSL证书。

安装mkcert

本地是 mac 环境,直接用brew安装

brew install mkcert

信任自签根证书

安装并让系统信任mkcert的自签根证书。

mkcert -install 

创建证书

mkcert "*.security.local"  localhost 127.0.0.1 ::1

security.local就是我本地开发环境运行的域名
127.0.0.1 ::1 是对应的本地 IPV4 IPV6
创建的证书和私钥文件会保存在当前目录中

配置Nginx

正常配置nginx文件(e.g. /etc/nginx/nginx.conf)
添加内容:

server {
    listen 443 ssl;
    server_name localhost;

    ssl_certificate /path/to/localhost.pem;
    ssl_certificate_key /path/to/localhost-key.pem;

    # ...其余配置保持不变
}

# 可以选择添加一个额外的服务器块来处理 HTTP 到 HTTPS 的重定向
server {
    listen 80;
    server_name localhost;
    return 301 https://$host$request_uri;
}

说明:

/path/to/localhost.pem
/path/to/localhost-key.pem
这俩路径是证书和密钥文件位置

之后重启或者 reload nginx就可以了。 完美~~

acme.sh配置泛域名证书Let'sEncrypt

作者:matrix 发布时间:2019-09-18 分类:Linux

环境:
阿里云centos + dnspod.cn

acme.sh项目:https://github.com/Neilpang/acme.sh

安装

$ curl  https://get.acme.sh | sh

图片5018-使用acme.sh配置泛域名证书Let'sEncrypt
出现Install success!安装成功。

dns验证方式-获取域名dns token

这里使用域名解析服务商的token来进行域名拥有验证
在dnspod.cn上操作申请获取ID和token。
ssh执行命令设置变量,便于后面脚本读取。

$ export DP_Id="000000"
$ export DP_Key="26****************************ed"

阿里云dns:

$ export Ali_Id="000000"
$ export Ali_Key="26****************************ed"

阿里云dns获取api和key:https://usercenter.console.aliyun.com/#/manage/ak 进去申请AccessKey ID与Access Key Secret就好。

其他域名解析商的api token操作:
https://github.com/Neilpang/acme.sh/wiki/dnsapi

申请泛域名证书

为域名hhtjim.com申请证书。

$ source .bashrc #执行资源更新 确保acme.sh别名可用
$ acme.sh --issue --dns dns_dp -d hhtjim.com -d *.hhtjim.com

说明:
dns_dp 为dnspod ,如果是阿里云dns则为 dns_ali
前面-d参数指定根域名,后面-d指定子级泛域名
.hhtjim.com的证书只能支持通配符当前级别的域名,也就是xxx.hhtjim.com
如果要三级子域名就需要单独申请:
.xxx.hhtjim.com,参数为-d xxx.hhtjim.com -d *.xxx.hhtjim.com

执行之后等待几分钟出现绿色文字提示key,cer证书所在位置就酸完成了。

图片5019-使用acme.sh配置泛域名证书Let'sEncrypt

The domain key is here: /root/.acme.sh/hhtjim.com/hhtjim.com.key

Your cert is in  /root/.acme.sh/hhtjim.com/hhtjim.com.cer 
Your cert key is in  /root/.acme.sh/hhtjim.com/hhtjim.com.key 
The intermediate CA cert is in  /root/.acme.sh/hhtjim.com/ca.cer 
And the full chain certs is there:  /root/.acme.sh/hhtjim.com/fullchain.cer

证书生成完成,使用的时候把证书移动到nginx配置相关目录。

nginx证书使用

server {
    listen 443;
    server_name www.hhtjim.com;
    root /htdocs/www.hhtjim.com;
    index index.html index.htm index.php;
    ssl on;

    ssl_certificate /certificate_file_PATH/hhtjim.com/fullchain.cer;
    ssl_certificate_key /certificate_file_PATH/hhtjim.com/hhtjim.com.key;
    ...

ssl_certificate和ssl_certificate_key对应fullchain.cer和域名.key文件即可。
以后的所有子域名都可以使用这个路径的证书。

证书更新

脚本会自行写入crontab

36 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

每天定时检测过期再更新。

参考:

https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E
https://lnmp.org/faq/letsencrypt-wildcard-ssl.html
https://juejin.im/post/5b6542ed51882519d3468d6d

ubuntu安装Let’s Encrypt证书实测

作者:matrix 发布时间:2017-01-15 分类:兼容并蓄 零零星星

Let’s Encrypt证书出来已经有很长时间,之前用主机未到期,也就干瞪眼。
现在手上拿了一台有设备,其实算下来价格也都差不多,国外的速度是慢点,但是好处很多。

测试环境:
ubuntu 14 64bit
lnmp 1.3

获取证书

git clone https://github.com/letsencrypt/letsencrypt 
cd letsencrypt
./letsencrypt-auto certonly --standalone --email hhtjim@foxmail.com -d hhtjim.com -d www.hhtjim.com
# 若服务器已经占用80端口开启webserver则只需执行webroot:
#  ./letsencrypt-auto certonly --webroot --email hhtjim@foxmail.com -d link.hhtjim.com

执行完上面三个命令之后会有图形界面出现
gui图形界面
选择Agree之后出现这个也就完成了证书的获取

安装证书

修改域名对应下的nginx配置
进入/usr/local/nginx/conf/vhost目录找到和域名同名的conf文件
在server代码块中添加:

listen 443 ssl;
        #listen [::]:80;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;

参考如下完整配置

server
    {
        listen 80;
        listen 443 ssl;
        #listen [::]:80;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/hhtjim.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hhtjim.com/privkey.pem;

        server_name hhtjim.com www.hhtjim.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/hhtjim.com;

        include other.conf;
        #error_page   404   /404.html;
        include enable-php.conf;
        include wordpress.conf;

                if ($http_host !~ "^www.hhtjim.com$"){
                    rewrite  ^(.*)    https://www.hhtjim.com$1 permanent;
                }
                if ($scheme = "http"){ 
                        rewrite ^(.*)$  https://$host$1 permanent;
                }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /home/wwwlogs/hhtjim.com.log;
    }

接着准备重启nginx:lnmp nginx restart

参考:loazuo

更新操作

按照网上大多执行的命令我这里就会出现交互界面,需要手动选择webroot目录

How would you like to authenticate with the ACME CA? 

       x x          1  Place files in webroot directory (webroot)           x x  
       x x          2  Spin up a temporary webserver (standalone)  


还好找到办法,只需要添加参数 --webroot -w 设置好存放web路径即可。最终参考如下

ubuntu下保存为sh文件。记得附加x执行权限。然后执行该sh文件即可自动更新证书.

#!/bin/sh
~/letsencrypt/letsencrypt-auto certonly --webroot -w /home/wwwroot/www.hhtjim.com/ --renew-by-default --email hhtjim@foxmail.com -d hhtjim.com -d www.hhtjim.com && lnmp nginx restart

若报错Failed authorization procedure...则需要修改-w参数为网站根目录
如:

-w /home/wwwroot/hhtjim.com/

且nginx配置中将.well-known加入白名单:

location ~ /.well-known {
            allow all;
    }

参考:
http://letsencrypt.readthedocs.io/en/latest/using.html
https://www.ubock.com/article/25
https://stackoverflow.com/questions/42269107/using-certbot-to-apply-lets-encrypt-certificate-failed-authorization-procedure

最后的定时执行

修改定时任务 crontab -e
0 0 1 * * /root/updateLetsEncrypt.sh #每月1号执行sh脚本

重启定时服务 /etc/init.d/cron restart

peace