https取代http是大势所趋,越来越多的网站都改用https了。从16年起,苹果公司就要求开发者使用https替代http,前期还可以通过调整应用的配置允许http通信,到后来使用https成了强制要求。
对于个人开发者和小公司而言,很多时候不过是在服务器进行一些简单的数据、文件存储,对安全性也没什么要求,似乎没有使用https的迫切需要,然而,如果你要发布iOS应用,就必须支持https,这当然会给开发工作带来一些麻烦。另一方面,以前使用联通网络时,浏览网页偶尔就会莫名其妙地出现联通版iPhone的广告等,如果以后大家都使用https,运营商就不容易乱放广告了,呵呵~
搞https就得申请ssl证书,我们可以自己给自己签发ssl证书,当然,浏览器是不承认的,所以还是得找权威机构。赛门铁克这些公司颁发证书要收保护费,有无免费的呢?现在一些云服务器提供商已经可以提供免费的ssl证书,但是必须使用其提供的云服务,限制比较大,另外发现能够免费提供ssl证书的机构有startssl和Let’ s Encrypt。
我使用了startssl提供的证书服务,但是好景不长,startssl被360偷偷收购了,和沃通一起,没有进行收购信息披露。谷歌、狐狸等要求证书机构在规定日期前更新加密算法,而startssl和沃通不按规矩办事,在截至日期之后继续使用过期的加密算法,并且作弊把证书签发日期改到截至日期之前,欺骗大家感情,这一行为最终暴露了,于是苹果、谷歌、狐狸等移除了startssl和沃通的根证书,相应地,使用他们的证书的网站就不被信任了,至少是一年的时间。
现在只好使用Let’ s Encrypt提供的证书了,Let’ s Encrypt的证书怎么搞到手呢?转载一个比较详细的交错:
https://blog.itnmg.net/letsencrypt-ssl/
原文作者:IT农民工


Let’ s Encrypt是一个免费的 SSL/TLS 证书发行机构,证书有效期为90天,到期前30内可续期,实现永久免费.

本次安装使用的服务器配置:
DigitaIOcean VPS+ CentOS 7 + Nginx 1.9.12

Let’ s Encrypt SSL 证书的的获取并不是像其他网站一样,在页面上填写资申请证书,而是需要在域名所在的服务器上安装一个客户端(python写的)去获取证书和续期.

使用 Certbot 客户端

Certbot客户端是现在官方推荐的客户端

certbot 官网

客户端安装

yum install certbot

获取证书

申请过程中要验证绑定的域名是否属于申请人,其原理就是申请人在域名所在的服务器上申请证书,然后 Let’ s Encrypt 会访问绑定的域名与客户端通信成功即可通过.

这 个验证的方法有两种,一种需要停止当前的 web server 服务,让出 80 端口,由客户端内置的 web server 启动与 Let’ s Encrypt 通信. 另一种不需要停止当前 web server,但需要在域名根目录下创建一个临时目录,并要保证外网通过域名可以访问这个目录.

#创建临时目录,可能要修改Nginx rewrite 规则才能从外网访问
mkdir -p /usr/share/Nginx/html/.well-kNown/acme-challenge
 
#--webroot 参数:指定使用临时目录的方式. -w 参数:指定后面-d 域名所在的根目录,如果一次申请多个域的,可以附加更多 -w...-d... 这段.
certbot certonly --webroot --email admin@itnmg.net -w /usr/share/Nginx/html -d blog.itnmg.net -d itnmg.net -d www.itnmg.net

执行此命令后会生成证书,保存在 /etc/letsencrypt/live 中对应的域名目录下面,其实这里面并不是真正的证书文件,而是通过链接的形式链到了 /etc/letsencrypt/archive 中对应的域名目录下.

证书自动续期

renew 参数是官方推荐的续期方式,使用这个参数会遍历 /etc/letsencrypt/live 下所有的证书,如果证书在可续期的时间范围内(过期前30天内),就会申请新的证书并替换原有证书,否则跳过.

#使用 --dry-run 参数测试续期命令,使用这个参数并不会真正续期证书
certbot renew --dry-run
 
#正式续期证书
certbot renew

设置定时自动续期

可以将 certbot renew 命令加入到 cron 中定时执行

#--quiet 参数表示禁止输出除了错误信息以外的任何信息
certbot renew --quiet

加入定时任务中
nano /etc/crontab

我这里设置为每月28号23点执行此脚本. 更新证书后重启 Nginx.

#分 时 日 月 星期 执行用户 执行命令
0 23 28 * * root certbot renew --quiet && systemctl restart Nginx

保存退出

#加载定时任务,使之生效
crontab /etc/crontab
 
#查看任务
crontab -l



使用官方客户端

客户端安装

Let’ s Encrypt 的客户端托管在github上,每次运行客户端都会先自动升级,再运行最新的客户端,所以需要安装 git. 因为是 python 写的程序,所以需要安装 python.

yum install git python

下载客户端,放到某路径下

git clone https://github.com/letsencrypt/letsencrypt

运行一次客户端,自动检查升级,请确保内存足够多,大概要几十兆吧.

cd letsencrypt
./letsencrypt-auto --help


如果没什么问题,会显示帮助文档.

通过客户端 web server 获取证书

#停止Nginx
systemctl stop Nginx
 
#获取证书,--standalone 参数:使用内置web server. --email 参数:管理员邮箱,证书到期前会发邮件到此邮箱提醒. -d 参数:要绑定的域名,同一域的不同子域都要输入.
./letsencrypt-auto certonly --standalone --email admin@itnmg.net -d blog.itnmg.net -d itnmg.net -d www.itnmg.net
 
#启动Nginx
systemctl start Nginx


通过临时目录获取证书

#创建临时目录,可以附加更多 -w...-d... 这段.
./letsencrypt-auto certonly --webroot --email admin@itnmg.net -w /usr/share/Nginx/html -d blog.itnmg.net -d itnmg.net -d www.itnmg.net


完成上面的操作即可获得 SSL 证书,保存在 “/etc/letsencrypt/live/根域名/” 目录下,会产生 4 个文件,其中3个证书文件,1个私钥文件. 不要移动证书的位置,以免续期时出现错误.

证书续期的命令如下
./letsencrypt-auto renew

如果要指定更新某个域名的证书,则要使用 certonly 参数,其实和新申请证书时的命令差不多.

./letsencrypt-auto certonly --webroot --renew-by-default --email admin@itnmg.net -w /usr/share/Nginx/html -d blog.itnmg.net -d itnmg.net -d www.itnmg.net


通过 cron 运行脚本的方式可以实现定时续期,官方提供了脚本示例.https://letsencrypt.org/getting-started/最下面

最终脚本如下

#!/bin/sh
#停止 Nginx 服务,使用 --standalone 独立服务器验证需要停止当前 web server.
systemctl stop Nginx
if ! /path/to/letsencrypt-auto renew -nvv --standalone > /var/log/letsencrypt/renew.log 2>&1 ; then
    echo Automated renewal Failed:
    cat /var/log/letsencrypt/renew.log
    exit 1
fi
#启动 Nginx
systemctl start Nginx

将这段脚本保存为 letsencrypt-renew.sh

添加可执行权限

chmod +x letsencrypt-renew.sh

编辑 crontab 配置文件或执行 crontab -e 添加 cron 任务

nano /etc/crontab

我这里设置为每月28号23点执行此脚本.

#分 时 日 月 星期 执行用户 执行命令
 0 23 28 *  *   root    /脚本目录/letsencrypt-renew.sh


保存退出即可.

配置 Nginx SSL 证书

nano /etc/Nginx/conf.d/default.conf
找到 SSL 证书对应域名的 Server 段,修改为如下设置(根据自身需求做调整)

#设置非安全连接永久跳转到安全连接
server{
    listen 80;
    server_name blog.itnmg.net *.blog.itnmg.net itnmg.net www.itnmg.net;
    #告诉浏览器有效期内只准用 https 访问
    add_header Strict-Transport-Security max-age=15768000;
    #永久重定向到 https 站点
    return 301 https://$server_name$request_uri;
}
server {
    #启用 https,使用 http/2 协议,Nginx 1.9.11 启用 http/2 会有bug,已在 1.9.12 版本中修复.
    listen 443 ssl http2;
    server_name blog.itnmg.net *.blog.itnmg.net itnmg.net www.itnmg.net;
    #告诉浏览器当前页面禁止被frame
    add_header x-frame-options DENY;
    #告诉浏览器不要猜测mime类型
    add_header X-Content-Type-Options nosniff;
    root /usr/share/Nginx/html/wordpress;
 
    #证书路径
    ssl_certificate /etc/letsencrypt/live/itnmg.net/fullchain.pem;
    #私钥路径
    ssl_certificate_key /etc/letsencrypt/live/itnmg.net/privkey.pem;
    #安全链接可选的加密协议
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    #可选的加密算法,顺序很重要,越靠前的优先级越高.
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:HIGH:!RC4-SHA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH;
    #在 SSLv3 或 TLSv1 握手过程一般使用客户端的首选算法,如果启用下面的配置,则会使用服务器端的首选算法.
    ssl_prefer_server_ciphers on;
    #储存SSL会话的缓存类型和大小
    ssl_session_cache shared:SSL:10m;
    #缓存有效期
    ssl_session_timeout 60m;
 
    #省略后面与证书无关的设置
}

保存配置,重新加载 Nginx 配置或重启.

#重新加载配置
systemctl reload Nginx
#或重启Nginx
systemctl restart Nginx

到这步,Nginx 的 SSL 证书就配置完成了,打开浏览器访问网站就会启用 https,看到绿色安全锁的图标.

规范页面中的链接

如果你发现浏览器中的安全锁上带有叹号,说明页面中引用到了非 https 的链接,你可能要花上一点时间来修改这些链接,如果是本站资源,可以使用相对地址,如果是外部资源,要先看外部资源是否支持 https,如果支持改为 https 地址即可,如果不支持则要想办法替换为 https 资源或将资源保存到本地并使用相对地址.

CentOS 7 Nginx Let’ s Encrypt SSL 证书安装配置的更多相关文章

  1. PhoneGap / iOS上的SQLite数据库 – 超过5mb可能

    我误解了什么吗?Phonegap中的sqlitedbs真的有5mb的限制吗?我正在使用Phonegap1.2和iOS5.解决方法您可以使用带有phonegap插件的原生sqliteDB,您将没有任何限制.在iOS5.1中,Websql被认为是可以随时删除的临时数据…

  2. ios – 使用带有NodeJs HTTPS的certificates.cer

    我为IOS推送通知生成了一个.cer文件,我希望将它与NodeJSHTTPS模块一起使用.我发现HTTPS模块的唯一例子是使用.pem和.sfx文件,而不是.cer:有解决方案吗解决方法.cer文件可以使用两种不同的格式进行编码:PEM和DER.如果您的文件使用PEM格式编码,您可以像使用任何其他.pem文件一样使用它(有关详细信息,请参见Node.jsdocumentation):如果您的文件使

  3. ios – 应该加密APNS令牌吗?

    所以,我想知道,因为用户将APNS令牌发送给APNS提供商以便接收推送通知,是否应该加密令牌?另外,我认为根据APNS令牌识别设备是不可能的?因此,我想确保,如果有人从我的一个客户端嗅探推送通知注册...>他仍然必须获得我的推送证书才能以任何方式打扰我的客户>他知道有人对这些信息感兴趣,但无法确定我的客户是谁我可以放心吗?

  4. ios – CFNetwork内部错误:URLConnectionLoader.cpp:289

    当我在一段时间后打开我的应用程序时,我收到了日志:440:CFNetworkinternalerror(0xc01a:/buildroot/Library/Caches/com.apple.xbs/Sources/CFNetwork/CFNetwork-758.4.3/Loading/URLConnectionLoader.cpp:289)它从未出现在过去.我的项目使用网络库AFNetworkin

  5. ios – 使用大写符号在字符串swift中获取URL的正则表达式

    我尝试在文本中获取URL.所以,在此之前,我使用了这样一个表达式:但是当用户输入带有大写符号的URL时(例如Http://Google.com,它与它不匹配)我遇到了问题.我试过了:但什么都没发生.解决方法您可以使用正则表达式中的i内联标志关闭区分大小写,有关可用正则表达式功能的详细信息,请参阅FoundationFrameworkReference.(?ismwx-ismwx)Flagsetti

  6. iOS Enterprise Deployement:单击itms-services链接会导致“无法连接到[域]”错误

    解决方法我有这个问题,这里没有任何记录的解决方案,或者在其他答案中,没有为我工作.使用正确的SSL证书,可以在目标设备上的safari中加载plist,没有任何问题.但是,尝试使用“itms-services://…”链接进行安装将始终失败,并显示“无法连接到[域]”错误.问题是Web服务器上未配置中间SSL证书.Web浏览器没有问题,SSL有效,但将设备连接到Mac,并通过XCode中的设备面板查看日志显示以下错误:在Apache上安装中间SSL证书解决了这个问题.

  7. ios – xcode在更新可可豆荚后出现体系结构错误的重复符号

    编辑:执行下面显示的解决方案后,我的项目只编译iPadAir,我不能再存档,我仍然得到相同的错误…

  8. ios – UIWebView中的WebSQL / SQLite数据库的最大大小(phonegap)

    我知道一般来说,Web应用程序的本地存储空间有5MB的限制.本地网页浏览应用程式是否也有这个限制?

  9. ios – 我可以使用自签名SSL证书服务器在空中部署企业应用吗?

    iOS7.1之后,如果我们要通过空中部署我们的Enterprise应用程序,则manifest.plist文件的URL必须是HTTPS.例如:在我的服务器中,我使用自签名SSL证书.当我点击iPhone上的URL时,它表示无法连接到并记录典型的所以,我想知道我是否可以使用自签名SSL证书?如果可以,我如何解决我遇到的问题的问题?

  10. ios – 如何使用YouTube API V3?

    我想知道如何在iOS应用中使用新的YouTubeAPI(第3版),但我不知道如何做.我做了很多关于它的研究,但是我发现所有的例子和老API的代码,所以它们是无效的.现在,我明白了,使用新的API你必须在Google开发者控制台中创建一个项目…使用API2很简单它…

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部