万由u-nas系统用上Let’s Encrypt 免费Https安全证书

万由u-nas系统用上Let's Encrypt免费Https安全证书

————by icarus

2019.2.25

 

前言:

万由的https证书是自签发的,你在外网访问的时候会显示不安全,就很烦,为了解决这个问题,我找到了Let’s Encrypt。

关于Let's Encrypt 免费SSL证书

Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。

Let's Encrypt免费SSL证书的出现,也会对传统提供付费SSL证书服务的商家有不小的打击。到目前为止,Let's Encrypt获得IdenTrust交叉签名,这就是说可以应用且支持包括FireFox、Chrome在内的主流浏览器的兼容和支持,虽然目前是公测阶段,但是也有不少的用户在自有网站项目中正式使用起来。

Let's Encrypt 的最大贡献是它的 ACME 协议,第一份全自动服务器身份验证协议,以及配套的基础设施和客户端。这是为了解决一直以来 HTTPS TLS X.509 PKI 信任模型,即证书权威(Certificate Authority, CA)模型缺陷的一个起步。

在客户端-服务器数据传输中,公私钥加密使得公钥可以明文传输而依然保密数据,但公钥本身是否属于服务器,或公钥与服务器是否同属一个身份,是无法简单验证的。证书权威模型通过引入事先信任的第三方,由第三方去验证这一点,并通过在服务器公钥上签名的方式来认证服务器。第三方的公钥则在事先就约定并离线准备好,以备访问时验证签名之用。这个第三方就称为证书权威,简称CA。相应的,CA验证过的公钥被称为证书。

问题是,如果服务器私钥泄露,CA无法离线使对应的证书无效化,只能另外发布无效记录供客户端查询。也就是说,在私钥泄露到CA发布无效记录的窗口内,中间人可以肆意监控服-客之间的传输。如果中间人设法屏蔽了客户端对无效记录的访问,那么直到证书过期,中间人都可以进行监控。而由于当前CA验证和签发证书大多手动,证书有效期往往在一年到三年。

Let's Encrypt 签发的证书有效期只有90天,甚至希望缩短到60天。有效期越短,泄密后可供监控的窗口就越短。为了支撑这么短的有效期,就必须自动化验证和签发。因为自动化了,长远而言,维护反而比手动申请再安装要简单。

证书的有效期,我坚持认为这是合理的。Let's Encrypt 的证书是自动签发的,对 Let's Encrypt 的目标用户(个人网站、小网站)来说,90天已经是一个很长的时间了。特别是个人网站,域名所有权的变动是非常快的。可能前几天域名还属于张三,后几天就属于李四了。因此自动签发一个长有效期的证书是很容易产生问题的。如果证书的有效期是两年,那么经常交易域名的人就可以长时间持有已经不属于他们的域名的证书。并且这种持有不受证书吊销列表的控制,因为签发的时候,所有权是没有问题的,即使后来所有权变更了,Let's Encrypt 也不会知道。所以设的有效期短一点,可以减少这个问题的影响。然后是易用性,现在已经有不少的 Let's Encrypt 自动续期脚本了,配好后就不用管了,非常方便。

总之,强烈推荐站长和服务器平台用 Let's Encrypt 向访客提供加密连接。这是域名认证未来的发展方向。

目前,申请获取Let's Encrypt证书有很多种方法,网上也有不少申请Let's Encrypt证书的教程,使用的工具可以说是五花八门。

但是,就经验来看 acme.sh 这个是最方便、最快捷、最省事儿的,因为使用的就是Let's Encrypt的ACME协议,所以兼容性绝对是最可靠的,Shell脚本式的对系统几乎没有任何依懒性,有很强的自由度。其实 acme.sh 的使用还是非常“傻瓜”的,只要照着指令参数做就可以轻松搞定的,上述的示例其实将域名修改为自己的域名就可以用了,其它的也是同样的道理,简单修改一下参数就可以拿来用的。

下面我就具体的讲述一下利用Let's Encrypt的ACME协议在服务器上运用acme.sh脚本来申请、管理SSL证书,这里要强调一下的是Let's Encrypt的SSL证书申请是必须要有服务器root权限

 

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第1张图片

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第2张图片  万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第3张图片

 

步骤:

一、SSH登录

在unas中打开APP管理器

找到SSH服务安装并打开

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第4张图片

并且允许root登录

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第5张图片

使用PuTTY登录或者其他SSH软件

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第6张图片

 

输入账号root 密码yutech

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第7张图片

 

二、安装curl

按顺序输入一下代码:

sudo apt-get update
sudo apt-get install openssl
sudo apt-get install libssl-dev

安装过程中问你Do you want to continue? [Y/n]

当然y啊

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第8张图片

 

sudo apt-get install curl   #安装curl

 

curl -V

查看curl版本,注意curl版本和libcurl要一致,要不然安装acme.sh会出错

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第9张图片

 

三、安装acme.sh

如何安装acme.sh:

https://github.com/Neilpang/acme.sh/wiki/How-to-install

1.从Web安装:https://get.acme.sh

安装https://github.com/Neilpang/acme.sh

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

要么

wget -O -  https://get.acme.sh | sh

2.或者,从GitHub安装:

curl https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1  sh

要么:

wget -O -  https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1  sh

3.或者,git clone并安装:

git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install

 

#我选的是curl,输入以下代码,然后自动安装:

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

注意curl和libcurl版本要一致

安装完后关闭SSH连接,重新SSH连接,要不然acme.sh会报错

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第10张图片

 

四、如何颁发证书

安装完acme.sh后就需要颁发证书,颁发证书有多种方法,具体可见:

https://github.com/Neilpang/acme.sh/wiki/How-to-issue-a-cert

如何使用DNS API:

https://github.com/Neilpang/acme.sh/tree/master/dnsapi

#我使用的方法是使用DNS API,且服务商为DNSPod,下面就用DNSPod演示,找到网页中的第2.

2.使用DNSPod.cn域API自动颁发证书

首先,您需要登录DNSPod帐户才能获取API密钥和ID。

export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"

好的,我们现在发出一个证书:

acme.sh --issue --dns dns_dp -d example.com -d www.example.com

DP_IdDP_Key将被保存~/.acme.sh/account.conf,需要时会被重用。

如果您的DNS提供商不提供api访问权限,您可以使用我们的DNS别名模式:

https://github.com/Neilpang/acme.sh/wiki/DNS-alias-mode

 

#首先去DNSpod创建一个Token

以下是我的配置信息:

名称: acme.sh ssl

ID:******

Token:*********************************87*****

创建时间: 2018-08-28 23:31:43

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第11张图片

 

 

#然后导入密钥,在ssh中以root身份直接输入

export DP_Id="******"

export DP_Key="*********************************87*****"

#申请证书

以腾讯/DNSPod(国内版) DNS为例,我们为****.** 签发一个泛域名证书。

acme.sh --issue --dns dns_dp -d example.com -d *. example.com

或者一张证书上多个域名适配:

acme.sh --issue --dns dns_dp -d example.com -d *. example.com -d eg2.com -d *. eg2.com -d

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第12张图片

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第13张图片

 

更多DNS API设置请参考:https://github.com/Neilpang/acme.sh/tree/master/dnsapi

 

列出当前已经申请到证书的域名信息:

acme.sh --list

 

FlashFXP可以看到/root/.acme.sh 下多了几个文件

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第14张图片

 

五、将ssl证书部署到apache服务器

https://github.com/Neilpang/acme.sh/wiki/Deploy-ssl-certs-to-apache-server

1.运行acme.sh将证书复制到磁盘上的正确位置

1.1)创建一个合理的目录来存储您的apache证书

我选择的目录在 /etc/apache2/2.2/ssl ,使用mkdir命令创建这个目录

mkdir -p /etc/apache2/2.2/ssl

1.2)运行acme.sh

几点说明:

  • 参数存储在.acme.sh配置文件中,因此在cron作业运行时读取此文件时,请将其正确用于系统
  • “reloadcmd”取决于您的操作系统,系统V Linux系统使用命令“service apache2 force-reload”,基于Solaris的系统使用“svcadm restart apache22”或类似命令
acme.sh --install-cert -d online.domain.com \
--cert-file /etc/apache2/2.2/ssl/online.domain.com-cert.pem \
--key-file /etc/apache2/2.2/ssl/online.domain.com-key.pem \
--fullchain-file /etc/apache2/2.2/ssl/letsencrypt.pem \
--reloadcmd "service apache2 force-reload"

 

以下所有

online.domain.com替换成自己的域名 

/etc/apache2/2.2/ssl/更换成自己安放证书的位置

 

这是我的配置命令:

acme.sh --install-cert -d ****.*** \

--cert-file /etc/apache2/2.2/ssl/****.***-cert.pem \

--key-file /etc/apache2/2.2/ssl/****.***-key.pem \

--fullchain-file /etc/apache2/2.2/ssl/letsencrypt.pem \

--reloadcmd "service apache2 force-reload"

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第15张图片

2.设置httpd.conf

有很多方法可以执行此操作,编写每个变体需要很长的列表,但是您需要在httpd.conf(或ssl.conf或httpd-ssl.conf)中设置的特定代码是:

SSLCertificateFile /etc/apache2/2.2/ssl/online.domain.com-cert.pem
SSLCertificateKeyFile /etc/apache2/2.2/ssl/online.domain.com-key.pem
SSLCertificateChainFile "/etc/apache2/2.2/ssl/letsencrypt.pem"
SSLCACertificatePath "/etc/apache2/2.2/ssl/"
SSLCACertificateFile "/etc/apache2/2.2/ssl/letsencrypt.pem"

 

我这里用万由unas来演示:

打开FlashFXP,然后连接服务器

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第16张图片

找到 /etc/apache2/sites-available/ 目录,使用Linux的vi编辑器修改或者用FlashFXP等软件通过ssh连接修改文件。

编辑修改unasdesktop-ssl.conf和default-ssl.conf文件

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第17张图片

 

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第18张图片

 

在文件中找到如下代码,并修改文件的绝对位置,如果没有的复制进去,前面有#注释的要把#去掉。

        SSLCertificateFile /etc/apache2/2.2/ssl/****.***-cert.pem

        SSLCertificateKeyFile /etc/apache2/2.2/ssl/****.***-key.pem



        SSLCertificateChainFile /etc/apache2/2.2/ssl/letsencrypt.pem

        SSLCACertificatePath /etc/apache2/2.2/ssl/

        SSLCACertificateFile /etc/apache2/2.2/ssl/letsencrypt.pem

 

善用搜索功能

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第19张图片

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第20张图片

 

记得,相关代码前面如果有#注释的要把#去掉

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第21张图片

 

最后完成后reload一下:

service apache2 reload

 

六、测试

最后来测试一下效果:

用ip登录发现https还是显示不安全

 

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第22张图片

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第23张图片

原因是自签证书时是签给xxx.xxx.xxx.com域名的,而浏览器中是通过ip访问的,浏览器警告用户证书与所在域不匹配!本机hosts文件中配上映射关系后,使用域名访问试试:

测试是否成功我们可以通过修改Windows上的host文件

C:\Windows\System32\drivers\etc

比如我申请的域名是****.***

则在host内上输入

192.168.2.123 ****.***

192.168.2.123 ****.***

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第24张图片

然后再通过刚刚设置好的域名访问,可以看到Https的锁不再是不安全状态了。大成功

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第25张图片

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第26张图片

手机外网连接万由管理界面和Nextcloud再也不会提示不安全了美滋滋,不会再弹出烦人的连接不安全警告了

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第27张图片        万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第28张图片

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第29张图片

七、更新证书

目前证书在60天以后会自动更新,你无需任何操作。今后有可能会缩短这个时间,不过都是自动的,你不用关心。

你可通过下面的命令看到acme.sh的定时任务

crontab -l 

八、更新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  --issue  .....  --debug 

或者:

acme.sh  --issue  .....  --debug  2

 

附件:

【说明文档】acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.

https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E

 

十、常见错误

错误一:万由3.0.7(以上或以下)和3.1.0版本手动安装curl问题

curl手动安装在万由3.0.7上没有问题(3.0.8、3.0.9没有试过),在万由3.1.0会出错

这篇文章是我在18年8月做的当时还在用3.0.7,弄完忙机子就吃灰了,最近19年2月我才重新装过,并安装了3.1.0。

如果你是用手动安装curl的注意看:

1)下载curl包(可以在这个网站上找最新的版本 http://curl.haxx.se/download/

wget https://curl.haxx.se/download/curl-7.60.0.tar.gz

 

或者最新的

wget https://curl.haxx.se/download/curl-7.64.0.tar.gz

 

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第30张图片

 

2)解压

tar -xzvf curl-7.60.0.tar.gz

或者最新的

tar -xzvf curl-7.64.0.tar.gz

3)覆盖安装,输入下面代码,每项都要回车

cd curl-7.60.0
./configure
make
make install

 

4)使用

curl --version

检查是否更新成功

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第31张图片

5)至此,升级成功

万由3.0.7版本上按照上面手动安装的方法装是完全没有问题的

但是!我在重装了万由3.1.0版本的时候按照

wget https://curl.haxx.se/download/curl-7.60.0.tar.gz

tar -xzvf curl-7.60.0.tar.gz

cd curl-7.60.0

./configure

make

make install

 

上面的手动安装的方法装完就会出现下面的错误

curl和libcurl版本不一致,curl无法联通。

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第32张图片

curl没有反应

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第33张图片

curl https://get.acme.sh | sh
没有反应

 

然后尝试用
wget -O -  https://get.acme.sh | sh

安装asmh.sh

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第34张图片

看上去好像是下载下来了,但是你会发现,好像没有成功万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第35张图片

 

然后换另一种安装方法

wget -O -  https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1  sh
 

你会发现直接报错了

Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 43

然后我去排查错误,各种排查,一开始以为是acme.sh的问题,后来又以为是openssl的问题,结果发现就是curl的问题

解决办法:

回到万由系统网页管理上,打开控制中心,系统升级,全部升

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第36张图片

curl -V  查看,会发现这两个版本一致了

curl测试一下,没有问题了

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第37张图片

直接安装acme.sh,直接安装成功

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

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第38张图片

 

错误二:没有安装libssl-devl

默认情况下,libcurl不支持https, 如果使用https链接,就会出现" Protocol https not supported or disabled in libcurl" 的错误提示。查看curl是否支持https可以使用命令:curl -V

解压:

tar -xzvf  curl-7.60.0.tar.gz
cd curl-7.60.0
./configure

这里注意的是最后会显示一段信息提示是否支持https:

注意最后一行Protocols中显示没有https的支持。

这里的SSL support提示的是不支持的,因为https协议是加密安全的基于http的协议,需要使用openssl的静态库,所以需要支持https就必须下载openssl,并安装

不然直接安装acme.sh会出现

返回错误代码:

curl: (1) Protocol "'http" not supported or disabled in libcurl

意思是:不支持HTTPS协议!

CURLE_UNSUPPORTED_PROTOCOL(1)错误

你的URL传递给libcurl的使用协议,这libcurl的不支持。支持可能是你没有使用一个编译时的选项,它可以是一个拼写错的协议字符串,或者只是一个协议的libcurl没有代码。

 

或者出现

返回错误代码:

curl: (48) An unknown option was passed in to libcurl

CURLE_UNKNOWN_OPTION(48) 错误

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第39张图片

 

总之,会出现各种奇怪的错误

解决办法:

输入如下命令

sudo apt-get update
sudo apt-get install openssl

为了以防万一把上面这两句也打上吧

sudo apt-get install libssl-devl

然后重新编译安装

cd curl-7.60.0
./configure

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第40张图片

提示支持https ,接着

make
make install

curl -V 查看一下,可以看到Protocols一行中显示有对https的支持了。

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第41张图片

 

错误三、SSH连接不上

1.发现问题

通过ssh连接万由,输入,连接名称,ip,端口,已经用户名密码,输入完成后点击连接,开始进行远程连接,发现一直提示连接不了;提示"ssh服务器拒绝了密码,请再试一次。"其实试了多少次都没用;

解决问题:

直接在万由网页管理界面打开SSH服务设置

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第42张图片

 

或者

1、确认ssh服务已安装,通过普通用户连接成功;

2、确认ssh配置是否对root进行特殊设置,修改/etc/ssh/sshd_config文件中

PermitRootLogin without-password将 without-password改为yes;

3、重启ssh服务/etc/init.d/ssh restart;

3.验证结果

再次使用ssh连接,这次没有任何提示,连接成功了;

 

小技巧:

看不到root下面的文件:

FlashFXP默认是可以看到隐藏文件的

WinSCP就需要手动打开“显示隐藏文件”

万由u-nas系统用上Let’s Encrypt 免费Https安全证书_第43张图片

 

 

参考网站,感谢:

ACME Shell脚本:acme.sh

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

 

Apache2.4安装SSL证书教程(基于ubuntu 16.04)

https://blog.csdn.net/mgsky1/article/details/53844332

 

给你的网站免费配置上 HTTPS 证书

https://www.cnblogs.com/jxlwqq/p/7492274.html

 

使用 acme.sh 部署 Let's Encrypt 通过阿里云 DNS 验证方式实现泛域名 HTTPS

http://frontenddev.org/article/use-acme-sh-deployment-let-s-encrypt-by-ali-cloud-dns-generic-domain-https-authentication.html

 

利用 acme.sh 获取网站证书并配置https访问

https://my.oschina.net/u/3042999/blog/1858891

 

Linux 下使用 acme.sh 配置 Let’s Encrypt 免费 SSL 证书 + 通配符证书

https://www.sooele.com/index.php/2018/03/21/linux-%E4%B8%8B%E4%BD%BF%E7%94%A8-acme-sh-%E9%85%8D%E7%BD%AE-lets-encrypt-%E5%85%8D%E8%B4%B9-ssl-%E8%AF%81%E4%B9%A6-%E9%80%9A%E9%85%8D%E7%AC%A6%E8%AF%81%E4%B9%A6/

 

curl不能支持https问题

https://blog.csdn.net/yejinxiong001/article/details/77745943

 

用 NextCloud 搭建个人私有云

https://www.logcg.com/archives/2750.html

你可能感兴趣的:(万由)