下acme.sh定期自动更新https证书

微信公众平台最近初推出微信认证,认证后得以博得高级接口权限,其中一个凡是OAuth2.0网页授权,很多冤家当利用是的时段失败了要无法了解其内容,希望自己来个科目详细讲解一下,于是就来了当下首文章。

https.png

 

关于let’s encrypt和acme.sh的简介

Let’s Encrypt is a free, automated, and open Certificate Authority.

acme.sh 实现了 acme 协议, 可以起 let‘s encrypt 生成免费之证书.

一、什么是OAuth2.0

官方网站:http://oauth.net/   http://oauth.net/2/

权威定义:OAuth is An open protocol to allow secure authorization in a
simple and standard method from web, mobile and desktop applications. 

OAuth是一个开商,允许用户为第三正值采取为安且专业的艺术取得该用户在某个一样网站、移动还是桌面应用及囤积的私密的资源(如用户个人信息、照片、视频、联系人列表),而不管需用用户称与密码提供给第三正值使用。

OAuth 2.0是OAuth协议的下一版本,但非向后兼容OAuth 1.0。 OAuth
2.0关心客户端开发者的简易性,同时为Web应用,桌面应用以及手机,和卧室设备提供特别的辨证流程。

OAuth允许用户提供一个令牌,而不是用户称及密码来访问他们存放于一定服务提供者的数额。每一个令牌授权一个一定的网站(例如,视频编辑网站)在特定的当儿(例如,接下的2时外)内访问特定的资源(例如只是某一样相互册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上之音,而非需分享他们的看许可或他们数据的具备情节。

乍浪微博API目前吧动OAuth 2.0。

原文:http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html

亚、微信公众平台OAuth2.0授权

微信公众平台OAuth2.0授权详细步骤如下:

  1. 用户关心微信公众账号。
  2. 微信公众账号提供用户要授权页面URL。
  3. 用户点击授权页面URL,将于服务器发起呼吁
    4.
    服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base时无夫步骤)
  4. 用户同意(scope为snsapi_base时无夫步骤)
  5. 服务器将CODE通过回调传于微信公众账号
  6. 微信公众账号获得CODE
  7. 微信公众账号通过CODE向服务器请求Access Token
  8. 服务器返回Access Token和OpenID给微信公众账号
  9. 微信公众账号通过Access
    Token向服务器请求用户信息(scope为snsapi_base时无夫步骤)
  10. 服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)

 

 图片 1

行使的AppId和AppSecret在开发者中心-开发者ID中,可以找到。

 

 

图片 2

1. 安排授权回调页面域名

进去微信公众平台后台后,依次进入开发者中心-权限表,找到网页授权获取用户中心信息,

 

 

图片 3

点击右侧的改动。原文:http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html

图片 4

授权回调域名配置标准也全域名还要不带http,比如要网页授权的域名也:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html
、 http://www.qq.com/login.html
都可以拓展OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、
http://qq.com无法进行OAuth2.0鉴权。

这里我们填写方倍工作室的一个百度应用二级域名为 mascot.duapp.com

图片 5原文:http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html

只要你的网址没有吃列入了地下名单,就会于顶部出现

图片 6

图片 7

下一场,域名配置就水到渠成了。

 

2. 用户授权并获得code

以域名根目录下,新建一个文书,命名也oauth2.php,其情吗

图片 8

<?php
if (isset($_GET['code'])){
    echo $_GET['code'];
}else{
    echo "NO CODE";
}
?>

图片 9

预先了解下请求授权页面的构造方式:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

参数说明

参数 必须 说明
appid 公众号的唯一标识
redirect_uri 授权后重定向的回调链接地址
response_type 返回类型,请填写code
scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息
state 重定向后会带上state参数,开发者可以填写任意参数值
#wechat_redirect 直接在微信打开链接,可以不填此参数。做页面302重定向时候,必须带此参数

动用授权作用域:由于snsapi_base只能落到openid,意义不慌,所以我们利用snsapi_userinfo。
回调地址:填写为才上传后的oauth2.php的公文地点,
state参数:随便一个数字,这里填1

结构请求url如下:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://mascot.duapp.com/oauth2.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect

管这链接发送至微信中,以便在微信浏览器被开辟,这里运用A链接封装如下:

欢迎关注【近宝】,它能让你更加方便寻找在你附近合你心意的餐饮、服装、百货、美容美发店铺。 
<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://mascot.duapp.com/oauth2.php&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect">点击这里绑定</a>
技术支持 方倍工作室

每当微信中形如下

图片 10

点击绑定后,弹出应用授权界面

图片 11

选择允许,点击

图片 12

跳转到auth2.php页面,执行

echo $_GET['code']

界面及亮的尽管是code,这时候通过右上斗按钮中之复制链接,得到链接如下:

http://mascot.duapp.com/oauth2.php?code=00b788e3b42043c8459a57a8d8ab5d9f&state=1

咱成功获得了code了。

注意:如果在绑定的时候出现这样的界面,就说明参数不对,需要回头检查一下参数

图片 13

 

3. 使用code换取access_token

换取网页授权access_token页面的组织方式:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

参数说明

参数 是否必须 说明
appid 公众号的唯一标识
secret 公众号的appsecret
code 填写第一步获取的code参数
grant_type 填写为authorization_code

code:在此填写为达到一致步获得的价

组织请求url如下:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx8888888888888888&secret=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&code=00b788e3b42043c8459a57a8d8ab5d9f&grant_type=authorization_code

好当浏览器被一直实施及时长达告句:

(

此处是重中之重,就是经者的url获取json数据的代码

    $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    // 要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_HEADER, 0); // 不要http header 加快效率
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
        curl_setopt($ch, CURLOPT_TIMEOUT, 15);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);    // https请求 不验证证书和hosts
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);        
        $output = curl_exec($ch);
        curl_close($ch);
        $jsondecode = json_decode($output); //对JSON格式的字符串进行编码
        $array = get_object_vars($jsondecode);//转换成数组 
     //红色两行是重点,针对https的,让我纠结了一天多

        echo $array;

 

)

得如下json数据:

图片 14

{
    "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw",
    "expires_in": 7200,
    "refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A",
    "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
    "scope": "snsapi_userinfo,"
}

图片 15

数码格式解读如下:

参数 描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_in access_token接口调用凭证超时时间,单位(秒)
refresh_token 用户刷新access_token
openid 用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope 用户授权的作用域,使用逗号(,)分隔

于是,我们成之通过code换取到了access_token,以及refresh_token。

图片 16

刷新access_token

官方文档中提到了刷新access_token的功能,但这不是必须要做的,初次使用可以先忽略。

url请求方法如下:

https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN

参数说明
参数 是否必须 说明
appid 公众号的唯一标识
grant_type 填写为refresh_token
refresh_token 填写通过access_token获取到的refresh_token参数
构造如下:

https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=wx8888888888888888&grant_type=refresh_token&refresh_token=OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A

在浏览器中执行得到前面同样格式的json数据

图片 17

 

4. 使用access_token获取用户信息

请求方法:

https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

参数说明

参数 描述
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
openid 用户的唯一标识

构造url如下:

https://api.weixin.qq.com/sns/userinfo?access_token=OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw&openid=oLVPpjqs9BhvzwPj5A-vTYAX3GLc

好在浏览器被直接实施就长达告句子:

获得如下json数据:

图片 18

{
    "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
    "nickname": "方倍",
    "sex": 1,
    "language": "zh_CN",
    "city": "Shenzhen",
    "province": "Guangdong",
    "country": "CN",
    "headimgurl": "http://wx.qlogo.cn/mmopen/utpKYf69VAbCRDRlbUsPsdQN38DoibCkrU6SAMCSNx558eTaLVM8PyM6jlEGzOrH67hyZibIZPXu4BK1XNWzSXB3Cs4qpBBg18/0",
    "privilege": []
}

图片 19

参数解读:

参数 描述
openid 用户的唯一标识
nickname 用户昵称
sex 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
province 用户个人资料填写的省份
city 普通用户个人资料填写的城市
country 国家,如中国为CN
headimgurl 用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空
privilege 用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)

立马跟自我个人的微信消息是同样的

 图片 20

时至今日,在未输入本人之账号及密码的状下,微信公众账号近宝获得了自己之个人信息,这些消息包括昵称、性别、国家、省份、城市、个人头像以及特权列表。

一个整的OAuth2认证就好了。

 

其三、详细演示

关注方倍工作室(二维码见下图),回复“授权”,返回图文信息,点击图片

 图片 21

每当承认页面,点击“允许”

图片 22

弹有得到的结果(图片做了防盗处理,所以无克直接显示出,可以下载至本地再来显示)

图片 23图片 24图片 25

 

安装,使用acme.sh

  • 安装命令

curl  https://get.acme.sh | sh
  • 生成ssl证书

自家利用的凡webroot方式,具体还发另外的道参考acme.sh的github

acme.sh  --issue -d blog.lomot.cn  --webroot  /var/www/blog.lomot.cn/
  • copy证书

acme.sh --installcert -d blog.lomot.cn --key-file /etc/nginx/ssl/blog.lomot.cn.key --fullchain-file /etc/nginx/ssl/blog.lomot.cn.cer --reloadcmd "service nginx force-reload"
  • 动证明

此处仅仅吃起nginx的措施:

像网址是blog.lomot.cn 在/etc/nginx/nginx.conf
中添加如下

    server {
        listen 80;
        server_name blog.lomot.cn;
        rewrite ^(.*)$  https://$host$1 permanent;
    }

    server {
        listen 443;
        server_name blog.lomot.cn;

        ssl on;
        ssl_certificate  /etc/nginx/ssl/blog.lomot.cn.cer;
        ssl_certificate_key /etc/nginx/ssl/blog.lomot.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        location / {
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   Host      $http_host;
            proxy_pass         http://127.0.0.1:2368;
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }

证件自动更新

时证明在 60 天以后会自动更新, 你随便需另操作.
今后来或会见缩短此日子, 不过都是机关的, 你不用关心.

更新acme.sh

眼前由 acme 合计以及 letsencrypt CA 都当勤之换代, 因此 acme.sh
也经常更新为保全同步.

晋升 acme.sh 到最新版 :

acme.sh --upgrade
假使你切莫思量手动升级, 可以打开自动升级:

acme.sh --upgrade --auto-upgrade
今后, acme.sh 就会自动保持更新了.

君为堪随时关闭自动更新:

acme.sh --upgrade --auto-upgrade 0

引用

切切实实科目可以参考acme.sh的github
https://github.com/Neilpang/acme.sh