免费SSL证书Let’s Encrypt安装使用教程:Apache和Nginx配置SSL
Let's Encrypt是国外一个公共的免费SSL项目,由 Linux 基金会托管,它的来头不小,由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起,目的就是向网站自动签发和管理免费证书,以便加速互联网由HTTP过渡到HTTPS,目前Facebook等大公司开始加入赞助行列。
Let's Encrypt已经得了 IdenTrust 的交叉签名,这意味着其证书现在已经可以被Mozilla、Google、Microsoft和Apple等主流的浏览器所信任,你只需要在Web 服务器证书链中配置交叉签名,浏览器客户端会自动处理好其它的一切,Let's Encrypt安装简单,未来大规模采用可能性非常大。
Let's Encrypt虽然还在测试当中,但是市场需求非常大,已经有非常多的朋友迫不及待地安装并用上了Let's Encrypt。Let's Encrypt向广大的网站提供免费SSL证书,不管是对于网站站长、互联网用户,还是对整个Web互联网,都是非常有利的,它有利于整个互联网的安全。
本篇文章就来为大家讲解一下如何获取Let's Encrypt免费SSL证书,并附上Apache和Nginx的SSL证书配置方法。更多的免费SSL证书及SSL配置安装教程,可以看:
- 1、经典SSL:StartSSL免费SSL证书成功申请-HTTPS让访问网站更安全
- 2、免费SSL证书:CloudFlare SSL和Wosign沃通SSL申请开通和安装使用
- 3、Namecheap SSL证书购买和SSL激活安装使用方法:Comodo PositiveSSL
免费SSL证书Let's Encrypt安装使用教程:Apache和Nginx配置方法
PS:20170208更新,感谢热心朋友的反馈,Let’s Encrypt官网推荐大家使用Certbot来安装,参考如下(详细图文过程:Aimer):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 问题已经解决了,用的是Certbot,我把我的方法贴一下: 首先要说明一下几点: 1.存在一个已经建立的虚拟主机 2.我用的是oneinstack 3.Python的版本是2.7以下(如果是2.7以上SSL证书会自动安装,不用手动的) 4.使用Certbot脚本 ————-分界线————————————– 过程: 1.去Certbot的官网找到与web环境相应的脚本(官网qi姐已经贴出来了) 2.按照官网的步骤来:(这是CentOS6 ,Nginx的脚本,不要直接复制哦,要按照自己的情况来) # wget https://dl.eff.org/certbot-auto # chmod a+x certbot-auto $ ./certbot-auto ——————-分界线———————– 然后Python版本低于2.7的服务器就会出现问题了 Certbot会报错,代码如下: Installing Python packages… Installation succeeded. /root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6 DeprecationWarning Saving debug log to /var/log/letsencrypt/letsencrypt.log Failed to find apachectl in PATH: /usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin /root/.local/share/letsencrypt/lib/python2.6/site-packages/certbot/main.py:568: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6 return e.message Certbot doesn’t know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run “certbot-auto certonly” to do so. You’ll need to manually configure your web server to use the resulting certificate. ——————-分界线————————– 我们不用管它,因为他说了,你可以手动安装SSL,那我们就手动安装 ——————-分界线—————————— 输入命令: # ./certbot-auto certonly 然后它依旧会报错,那我们依旧不管他 继续进行命令,因为我们是手动配置 ——————–分界线——————————– 再输入上面的命令以后,会出现选项,一个是独立服务器,一个是web服务 我们选择1,web服务 它会要求我们输入email(可以不输入),那我们输入email ———————–分界线—————————– 接下来它会要求我们输入域名 输入域名 ————————分界线————————— 然后它会要求我们给出域名所在的根目录 用的oneinstack的话就输入 /data/wwwroot/你的域名 ————————-分界线———————– 返回如下代码,获得SSL 证书: IMPORTANT NOTES: – Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/ex.acgbuster.com/fullchain.pem. Your cert will expire on 2017-05-02. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run “certbot-auto renew” – If you like Certbot, please consider supporting our work by: Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate Donating to EFF: ————————–分界线——————————- |
1、Let's Encrypt官网:
- 1、官方网站:https://letsencrypt.org/
- 2、项目主页:https://github.com/letsencrypt/letsencrypt
2、安装Let's Encrypt脚本依赖环境:(这一部分可以跳过,因为官方提供的Let's Encrypt脚本会自动检测并安装)
# Debian
apt-get install git
# CentOS 6
yum install centos-release-SCL && yum update
yum install python27
scl enable python27 bash
yum install python27-python-devel python27-python-setuptools python27-python-tools python27-python-virtualenv
yum install augeas-libs dialog gcc libffi-devel openssl-devel python-devel
yum install python-argparse
# CentOS 7
yum install -y git python27
yum install -y augeas-libs dialog gcc libffi-devel openssl-devel python-devel
yum install python-argparse
3、查看自己的VPS主机到底是安装了哪个操作系统版本,可以执行命令:cat /etc/issue 或者 cat /etc/redhat-release。
1、获取Let's Encrypt免费SSL证书很简单,你只需要执行以下命令,就会自动在你的VPS上生成SSL证书和私钥。
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto
2、经过部落测试,上述代码对于Debian系统支持最好,可以完成自动检测并安装相应的软件。如果你是使用其它的Linux系统,Redhat或CentOS 6可能需要配置EPEL软件源,Python需要2.7版本以上。
3、执行上述命令后,会弹出对话框,同意用户协议。
4、接着会提示让你关闭Nginx或者Apache。
5、Let's Encrypt需要用到80和443端口,所以你需要关闭那些占用这两个端口的应用。
6、当你看以下内容时,就表明你的Let's Encrypt免费SSL证书获取成功了。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/freehao123.org/fullchain.pem. Your cert will
expire on 2016-03-09. To obtain a new version of the certificate in
the future, simply run Let's Encrypt again.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
7、见下图:
1、嫌上面的麻烦,不妨来试试利用脚本快速获取Let's Encrypt SSL证书,调用 acme_tiny.py 认证、获取、更新证书,不需要额外的依赖。
- 1、项目主页:https://github.com/xdtianyu/scripts/tree/master/lets-encrypt
2、下载到本地:
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.conf
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.sh
chmod +x letsencrypt.sh
3、配置文件。只需要修改 DOMAIN_KEY DOMAIN_DIR DOMAINS 为你自己的信息
ACCOUNT_KEY="letsencrypt-account.key"
DOMAIN_KEY="freehao123.com.key"
DOMAIN_DIR="/var/www/freehao123.com"
DOMAINS="DNS:freehao123.com,DNS:www.freehao123.com"
4、本脚本在Debian下运行正常,但是如果你使用的是CentOS,你还需要修改letsencrypt.sh中openssl.cnf的位置,先找到你的CentOS的openssl.cnf位置。然后打开letsencrypt.sh,将路径/etc/ssl/openssl.cnf替换为你的新路径,例如/etc/pki/tls/openssl.cnf。
PS:20151214更新,该脚本已经更新,现在不需要对CentOS的openssl.cnf进行修改了。感谢ty博主的提醒。
5、执行过程中会自动生成需要的 key 文件。运行:
./letsencrypt.sh letsencrypt.conf
6、注意需要已经绑定域名到 /var/www/www.freehao123.com 目录,即通过 http://freehao123.com https://www.freehao123.com 可以访问到 /var/www/freehao123.com目录,用于域名的验证。
7、正常按照上面的操作即可成功获取到Let's Encrypt SSL证书,不过经过部落测试最大的问题就是“DNS query timed out”,由于域名DNS解析的问题导致无法验证域名从而获取SSL证书不成功。
Traceback (most recent call last):
File "/tmp/acme_tiny.py", line 198, in
main(sys.argv[1:])
File "/tmp/acme_tiny.py", line 194, in main
signed_crt = get_crt(args.account_key, args.csr, args.acme_dir, log=LOGGER, CA=args.ca)
File "/tmp/acme_tiny.py", line 149, in get_crt
domain, challenge_status))
ValueError: hkh.freehao123.info challenge did not pass: {u'status': u'invalid', u'validationRecord': [{u'url': u'http://hkh.freehao123.info/.well-known/acme-challenge/sikHlqvbN4MrWkScgr1oZ9RX-lR1l__Z7FWVLhlYR0Q', u'hostname': u'hkh.freehao123.info', u'addressUsed': u'', u'port': u'80', u'addressesResolved': None}], u'https://acme-v01.api.letsencrypt.org/acme/challenge/5m1su6O5MmJYlGzCJnEUAnvhweAJwECBhEcvsQi5B2Q/1408863', u'token': u'sikHlqvbN4MrWkScgr1oZ9RX-lR1l__Z7FWVLhlYR0Q', u'error': {u'type': u'urn:acme:error:connection', u'detail': u'DNS query timed out'}, u'type': u'http-01'}
8、经过对比发现,国内的DNSPOD、阿里云DNS、CloudXNS等都会出现Let's Encrypt 验证域名超时的情况,国外的Namecheap DNS、Linode DNS、Domain.com DNS等都是没有问题。
1、注意查看你的Let's Encrypt免费SSL证书保存位置,一般是在/etc/letsencrypt/live/freehao123.com这样的下面。
2、fullchain.pem就是公钥,privkey.pem就是私钥。有了这两个文件我们就可以在Ngnix上配置SSL证书了。OneinStack一键工具在创建虚拟主机时可以选择为网站配置SSL。
3、如果有用OneinStack,那么最简单的方法就是用fullchain.pem和privkey.pem替代原来生成的CRT和Key文件,这样做的好处就可以保留Ngnix配置的SSL证书路径,只要简单修改引用的公钥和私钥即可。
4、当然,为了后面的操作方便,我们建议保留Let's Encrypt生成的SSL证书,直接在网站的配置中修改SSL证书引用路径。使用VPS主机创建网站时会为网站生成一个.conf文件。
5、这个这个.conf文件,直接替换掉ssl_certificate和ssl_certificate路径即可,如下图:
6、OneinStack的Nginx配置SSL证书代码示例:
server {
listen 443 ssl http2;
ssl_certificate /etc/letsencrypt/live/freehao123.org/fullchain.pem;//改动地方1
ssl_certificate_key /etc/letsencrypt/live/freehao123.org/privkey.pem;//改动地方2
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-SHA384:ECDHE-RSA-:ECDHE:!DES:!3DES:!MD5:!DSS:!PKS;
ssl_session_cache builtin:1000 shared:SSL:10m;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
server_name www.freehao123.org freehao123.org;
access_log /data/wwwlogs/www.freehao123.org_nginx.log combined;
index index.html index.htm index.php;
include /usr/local/nginx/conf/wordpress.conf;
root /data/wwwroot/www.freehao123.org;
if ($host != www.freehao123.org) {
rewrite ^/(.*)$ $scheme://www.freehao123.org/$1 permanent;
}
server {
listen 80;
server_name www.freehao123.org;
rewrite ^/(.*) https://$server_name/$1 permanent;
}
7、最后重启Nginx,打开浏览器就可以看到SSL证书已经成功配置好了。
8、对于安装了LNMP的朋友,可以参考以下代码修改自己的Nginx配置。
server
{
listen 443 ssl; //如果需要spdy也可以加上,lnmp1.2及其后版本都默认支持spdy,lnmp1.3 nginx 1.9.5以上版本默认支持http2
server_name www.freehao123.com; //域名
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/www.freehao123.com; //网站目录
ssl_certificate /etc/letsencrypt/live/www.freehao123.com/fullchain.pem; //前面生成的证书
ssl_certificate_key /etc/letsencrypt/live/www.freehao123.com/privkey.pem; //前面生成的密钥
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
include wordpress.conf; //这个是伪静态
#error_page 404 /404.html;
location ~ [^/]\.php(/|$)
{
# comment try_files $uri =404; to enable pathinfo
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf; //lnmp 1.0及之前版本替换为include fcgi.conf;
#include pathinfo.conf;
}
1、首先,我们需要对Apache的配置进行修改,打开 /usr/local/apache/conf/httpd.conf ,查找httpd-ssl将前面的#去掉,然后执行命令(注意将路径换你自己的):
- cat >/usr/local/apache/conf/extra/httpd-ssl.conf<<EOF
Listen 443 - AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl - SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProxyCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLHonorCipherOrder on - SSLProtocol all -SSLv2 -SSLv3
SSLProxyProtocol all -SSLv2 -SSLv3
SSLPassPhraseDialog builtin - SSLSessionCache "shmcb:/usr/local/apache/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300 - SSLMutex "file:/usr/local/apache/logs/ssl_mutex"
EOF
2、接着,在你创建的网站的Apache配置的最后</VirtualHost>下面添加上SSL部分的配置文件:
- <VirtualHost *:443>
DocumentRoot /home/wwwroot/www.freehao123.com //网站目录
ServerName www.freehao123.com:443 //域名
ServerAdmin admin@freehao123.com //邮箱
ErrorLog "/home/wwwlogs/www.freehao123.com-error_log" //错误日志
CustomLog "/home/wwwlogs/www.freehao123.com-access_log" common //访问日志
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.freehao123.com/fullchain.pem //之前生成的证书
SSLCertificateKeyFile /etc/letsencrypt/live/www.freehao123.com/privkey.pem //之前生成的密钥
<Directory "/home/wwwroot/www.freehao123.com"> //网站目录
SetOutputFilter DEFLATE
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.html index.php
</Directory>
</VirtualHost>
3、最后就是重启Apache,然后打开浏览器就可以看到SSL证书配置成功了。
1、Let's Encrypt免费SSL证书有效期是90天,也就是每三个月你就得续期一次。采用官方的方法获取到的免费SSL证书,你不需要更改Apache和Nginx配置代码,执行以下代码即可自动替换证书为新的(注意修改域名和邮箱):
./letsencrypt-auto certonly --renew-by-default --email freehao123@gmail.com -d freehao123.org -d www.freehao123.org
2、采用上面脚本快速获取Let's Encrypt免费SSL证书的,在90天内再次执行命令即可:./letsencrypt.sh letsencrypt.conf。
3、cron 定时任务。每个月自动更新一次证书,可以在脚本最后加入 service nginx reload等重新加载服务。
0 0 1 * * /etc/nginx/certs/letsencrypt.sh /etc/nginx/certs/letsencrypt.conf >> /var/log/lets-encrypt.log 2>&1
七、Let's Encrypt免费SSL证书使用小结
1、Let's Encrypt免费SSL证书获得方式比较简单,不管采用何种方式,只要能够得到证书和密钥,我们就可以在自己的服务器上配置好SSL。上面讲到了Apache和Nginx的配置方法,如果你有自己的虚拟主机面板,可以直接通过后台添加证书和私钥文件即可。
2、想要将Let's Encrypt SSL安装在DirectAdmin面板的朋友可以参考:DirectAdmin安装StartSSL免费SSL证书。Cpanel面板的朋友参考:Cpanel主机安装Godaddy SSL证书方法。使用Kloxo面板的朋友,可以参考:Kloxo搭建网站安装StartSSL免费SSL证书。
文章出自:免费资源部落 部分内容参考 Vpser,v2ex版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
您或许对下面这些文章有兴趣: 本月吐槽辛苦排行榜
- 最新获取StartSSL免费3年SSL证书步骤及Nginx和Apache配置StartSSL方法
- LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx
- Qiniu七牛云免费SSL证书申请使用及自定义SSL证书上传管理
- 阿里云免费SSL证书申请与安装使用-附Nginx,Apache,IIS 6,IIS 8配置SSL教程
- 免费SSL证书服务排行榜-国内外免费SSL申请与使用点评
- GoGetSSL免费Comodo SSL证书和AlphaSSL免费泛域名SSL证书申请使用
- 新Cloudflare免费CDN加速和Cloudflare免费SSL证书服务申请与使用
- Namecheap免费Comodo SSL证书-替换GeoTrust\Symantec最长12个月
-
https://diafygi.github.io/gethttpsforfree/
这里可以在线申请let’s encrypt[回复] -
CDN(备?案) VS SSL,只能放弃SSL了
[回复]qi 回复:
@何朝城, 现在CDN支持SSL的比较少。
[回复]iii 回复:
@qi, Cloudflare其实无比流氓,后台限制SSL如果不是新系统和新浏览器 根本就锁死443端口,改UA没用,实际上所谓的SNI技术不支持WINXP纯属胡扯。。只是不支持XP中的IE6和XPSP2而已,XPSP3用chrome内核的一样是可以使用的,cpanel已经点名在那里上传的证书都是SNI技术,而我在XP下正常访问,使用CLOUDFLARE SSL却不行,换WIN7就能打开了,我一朋友在百度那儿,不知道是干啥的,西安电大出来就去百度了,我就找他问了下cloudflaressl是不是捣鬼了,第二天他说同事说CLOUDFLARE对免费套餐有检测的,会检测UA,旧系统不管是什么浏览器就是不允许加密访问。而百度却专业版也不支持SSL,然而10G防御和几乎穿不透的CC是很大卖点。扯完百度扯完CLOUDFLARE收工,顺便提醒下qi:verycloud的CDN每个月50G流量,支持传SSL,但是据说有国外节点,然而仍要备@案。
[回复] -
还是顶一下呗~
[回复] -
收到这4个文件了
[img]https://img.freehao123.com/wp-content/uploads/2014/12/namecheap-ssl_21.gif[/img]
然后呢,该怎么安装?
cpanel主机,上传了一个,浏览器访问证书不信任。这4个都是干什么用的?[回复] -
是挺好的SSL,但是如果是用除了cp以外的面板的话安装特别特别特别费事……QAQ信心全没了
[回复]qi 回复:
@mikifuns, 最好还是VPS,虚拟主机貌似怎么好安装。
[回复]mikifuns 回复:
@qi, 我用的就是vps,然而 嗯哼不用面板就不会用了 …还好我研究出来安装方法了
[回复]qi 回复:
@mikifuns, 你的网站SSL成功了,但是打开速度有些慢。
[回复]mikifuns 回复:
@qi, 我委屈,但我不说…10秒打开那都算神速了…域名没备@案也用不了什么cdn加速cf的那玩意我也是不敢用…而且我自己家的网就有问题我访问啥都嘎嘎慢的….
[回复]四弦 回复:
@mikifuns, 博主,说说你SSL配置的几个问题吧。
第一,证书链不完整,输出的证书至少要包含站点证书和LE的证书,否则Firefox是不认的
第二,协议支持没有配置好。从安全角度来看,协议支持最低只能到TLSv1.0,然而你却打开了SSL3,这一项就能使ssllabs直接降到C
第三,Cipher Suites输出得不对,你把RC4打开了,这是极不安全的做法。而且TLS1.2的算法(如AES-GCM)输出得太靠后了,应该庆幸的是你没有开启ssl_cipher_prefer_server on;否则握手时就会采用落后加密套件)
第四,没有开启OCSP Stapling。对于要求严格的浏览器,比如ff,会选择由客户端来发送OCSP查询,以验证证书是否有效。然而LE的OCSP服务器在美国,由客户端来发送查询,效果可想而知。强烈建议打开OCSP Stapling
第五,前向安全性配置不当(也是cipher suites的问题)
第六,HSTS没有配置。不过这算个比较小的问题。这个工具可以方便地测试SSL配置:
https://www.ssllabs.com/ssltest/我的网站nginx配置文件供参考:
https://n4l.pw/nginx-configuration-file.html/这位大神的博客可以学到很多东西:
https://imququ.com[回复]qi 回复:
@四弦, 您的连接不是私密连接
攻击者可能会试图从www.ssllabs.com窃取您的信息(例如:密码、通讯内容或信用卡信息)。 NET::ERR_CERT_REVOKED
怎么回事?[回复]mikifuns 回复:
@四弦, 首先太感谢您指出的问题了(虽然我知识少一个也没看懂) 你说的这些我会研究下的..实际上这SSL都是我照葫芦画瓢弄上去的.面板方没给方案官方也没给方案扔了一摊子完全就是硬弄上去的..所以说要这样我还不如放弃https了……然后我是用的不是Nginx所以文件可以借鉴,但是能不能用….另算了 然后你下面说的问题已经出现了,我已经有因为SSL的原因导致网站打不开的问题了,当初不明白咋回事以为是被移动给*了现在再看感觉不是那回事….So…. 我放弃了这https太难伺候了……慢慢弄吧….
[回复]四弦 回复:
@mikifuns, 导致打不开应该是firefox浏览器,因为ff对证书要求比较严格,如果证书链不完整ff不会认。要解决也很简单,只要下载let’s encrypt的证书,然后把里面的内容贴到站点证书的后面即可
[回复]mikifuns 回复:
@四弦, 我试了不仅是let’s encrypt的就包括我自己手动复制进去的wosign的证书都有这个问题.我听论坛的人说过好像什么csr啊还是啥不要输入不然会出错不知道是不是这个原因.我重装了打算再试试.
[回复]四弦 回复:
@mikifuns, 这么说吧。SSL证书是由一系列认证的权威机构颁发的,这些机构都有各自的证书。而机构分为根证书机构(全球一共几百个)和中级证书机构(他们的证书是由根证书机构颁发的)。因此,每一个站点证书对应一条证书链,即站点-中级颁发机构-根证书。浏览器只有在证书链中检测到受信任的证书(即必须追溯到至少一个受信任的中级证书机构)才认为站点证书是可信的。因此,如果证书链中只有站点证书,浏览器要么自行去下载对应的中级机构证书,要么选择不信任。ff采取的就是后者。所以如果要被ff信任,必须编辑站点证书文件,在末尾粘贴进Let’s encrypt中间证书(在网站上可以下载到),才可以被ff信任。而OCSP(在线证书状态协议),是为了验证证书是否有效而提出的,正如我之前说的,要么由浏览器发送OCSP查询,要么由服务器缓存OCSP查询结果并返回,由于服务器网络较好,通常选择后者,称为OCSP Stapling(OCSP封套)。而完整的证书链是服务器OCSP Staling的必须条件。
[回复]四弦 回复:
@mikifuns, 而你说的CSR,是证书签发请求文件,用这个文件可以向颁发机构申请到SSL证书。每个CSR对应的实际上是证书的公钥(SSL证书使用非对称加密解密方式)。显然,CSR在证书链中毫无作用。
[回复]mikifuns 回复:
@四弦, 唉我看到了它的证书了,但是是分为两个文件的.这样的话我想批自动处理就不可能了(总不能让每次生成的文件自动粘合在一起吧..)
[回复]四弦 回复:
@mikifuns, 首先纠正一个概念,Linux下一般不说批处理而称为shell脚本。其次这个问题很简单,首先你下载X3中间证书(被XP兼容),然后假设中间证书为
intermediate.pem,签发证书为signed.crt,合并命令为
cat signed.crt intermediate.pem > site.crt
可看我博客第二页(貌似)有一个le更新脚本,除了加入CT(certificate transperancy)信息之外,就是一个正常的le更新脚本[回复]mikifuns 回复:
@四弦, 我渣所以别太计较什么术语….我自己就是凭印象说的没真正较过真…其次我解决了那个问题.现在评价上升到B了 天终于上去了
[回复]四弦 回复:
@mikifuns, 博主你好,你的博客SSL更新邮件我已收到。再看了一下,的确安全了不少。不过,仍有几个致命问题:
1.Cipher Suites输出得仍旧不恰当,这么输出的话,兼容性实在太差了,作为一个RSA证书,这么损害兼容性简直作死
2.没有开启HTTP/2,开启后性能提升很大,建议开启。开启之后一定要打开ALPN和NPN(只要在编译nginx时静态编译openssl 1.0.2h即可)
3.没有开启HSTS。HSTS(HTTP严格安全传输协议)是一个服务端响应头。我们知道,传统的将所有HTTP 301到HTTPS的做法,虽然可行,但是,第一次HTTP请求就可以被直接劫持,从而构成HTTPS降级(Downgrade)攻击。而浏览器在收到HSTS头后,会在本地建立HSTS缓存,对于缓存HSTS状态的网站,浏览器将会本地直接307到HTTPS,杜绝运营商劫持。HSTS头的格式如下:(名称为Strict-Transport-Security)
max-age=;[includeSubDomains;[preload]]
加方括号的参数为可选。max-age必选,规定缓存有效期,单位为秒。includeSubDomains,对所有子域名全部启用HSTS。preload即预加载,由于HSTS仍依赖服务端头,则在用户初次访问时仍可能被劫持。为此,现代浏览器内置一份HSTS Preload List,在这个名单中的网站将强制进行本地跳转,无需第一次加载接受到服务端返回的HSTS头。个人网站目前可以加入该列表,只需要到下面的网址提交(已被Q)
https://hstspreload.appspot.com/
要求如下:
1.所有HTTP 301到HTTPS
2.必须有www域名,且www也要启用HTTPS。以及所有有DNS记录的子域名都要启用HTTPS
3.设置HSTS如下(max-age为最小值)
max-age=10886400; includeSubDomains; preload
4.一个有效的证书
提交后大约有2周-1个月的审核期,之后你的域名会被加入该名单,但首先只会加入Candy版(可理解为chrome的开发版),之后是unstable(不稳定版),一般要几个月才能进入稳定版。IE Edge Firefox Tor都使用这份名单,但更新频率有区别
nginx指令如下
add_header Strict-Transport-Security ‘max-age=10886400; includeSubDomains; preload’;[回复]四弦 回复:
@mikifuns, 用curl测试了几次,结果如下
➜ ~ curl -kso /dev/null -w “tcp:%{time_connect}, ssldone:%{time_appconnect}\n” https://blog.mikifuns.com/
tcp:0.478, ssldone:2.351
➜ ~ curl -kso /dev/null -w “tcp:%{time_connect}, ssldone:%{time_appconnect}\n” https://blog.mikifuns.com/
tcp:0.214, ssldone:8.478
➜ ~ curl -kso /dev/null -w “tcp:%{time_connect}, ssldone:%{time_appconnect}\n” https://blog.mikifuns.com/
tcp:0.197, ssldone:0.997
➜ ~ curl -kso /dev/null -w “tcp:%{time_connect}, ssldone:%{time_appconnect}\n” https://blog.mikifuns.com/
tcp:0.222, ssldone:1.839结果中,tcp是TCP握手时间,ssldone是SSL握手完成的时间。SSL握手消耗的时间很长
另外,从chrome://net-internals/#http2里可以看到,你的网站也没有开启HTTP/2,开启它也可以极大提升网站速度(讽刺的是可以看到你页面里引用的又拍链接用了h2)同时,尽管你开启了Keep-Alive长连接,但是这一值却设置得太短(用ch的开发工具可以看到头部只输出了timeout=5)
[回复] -
我尝试了下这个脚本,报错了。
这错误该怎么解决,PY还是很久以前装的。
[root@204053 letssl]# ./letsencrypt.sh letsencrypt.conf
Generate CSR…acg18.csr
Traceback (most recent call last):
File “/tmp/acme_tiny.py”, line 2, in
import argparse, subprocess, json, os, sys, base64, binascii, time, hashlib, re, copy, textwrap, logging
ImportError: No module named argparse[回复]Qa 回复:
@Qa, 安装了下环境,又报错400.是传说中的域名问题么。
Generate CSR…acg18.csr
Parsing account key…
Parsing CSR…
Registering account…
Already registered!
Verifying acg18…
Traceback (most recent call last):
File “/tmp/acme_tiny.py”, line 198, in
main(sys.argv[1:])
File “/tmp/acme_tiny.py”, line 194, in main
signed_crt = get_crt(args.account_key, args.csr, args.acme_dir, log=LOGGER, CA=args.ca)
File “/tmp/acme_tiny.py”, line 104, in get_crt
raise ValueError(“Error requesting challenges: {0} {1}”.format(code, result))
ValueError: Error requesting challenges: 400 {
“type”: “urn:acme:error:malformed”,
“detail”: “Error creating new authz :: DNS name does not have enough labels”,
“status”: 400
}[回复]Qa 回复:
@Qa, 经过仔细的检查发现是 配置文件的域名填写错误。
修改后报错如下。
Generate CSR…acg18.csr
Parsing account key…
Parsing CSR…
Registering account…
Already registered!
Verifying *******…
Traceback (most recent call last):
File “/tmp/acme_tiny.py”, line 198, in
main(sys.argv[1:])
File “/tmp/acme_tiny.py”, line 194, in main
signed_crt = get_crt(args.account_key, args.csr, args.acme_dir, log=LOGGER, CA=args.ca)
File “/tmp/acme_tiny.py”, line 123, in get_crt
wellknown_path, wellknown_url))
ValueError: Wrote file to /data/wwwroot/acg18/.well-known/acme-challenge/1lN9EOw_m1UpzQfGnZLhH5wIUcDpOQn2fGZ_jfi7LWM, but couldn’t download http://*****/.well-known/acme-challenge/1lN9EOw_m1UpzQfGnZLhH5wIUcDpOQn2fGZ_jfi7LWM[回复] -
[img]https://o903xqe5h.qnssl.com/wp-content/uploads/2015/12/Lets-Encrypt_07.gif[/img]
这个界面怎么打出来的?我怎么打不出来?对下面这一步不明白,我明白是修改这些数据,但是你图片里那个不知道怎么打出来的。3、配置文件。只需要修改 DOMAIN_KEY DOMAIN_DIR DOMAINS 为你自己的信息ACCOUNT_KEY=”letsencrypt-account.key”
DOMAIN_KEY=”freehao123.com.key”
DOMAIN_DIR=”/var/www/freehao123.com”
DOMAINS=”DNS:freehao123.com,DNS:www.freehao123.com”[回复] -
哦知道了,是修改letsencrypt.conf
[回复] -
现在出现的问题是这个,请问知道怎么解决吗?
Generate CSR…onqc.csr
Parsing account key…
Parsing CSR…
Registering account…
Already registered!
Verifying www.onqc.com…
Traceback (most recent call last):
File “/tmp/acme_tiny.py”, line 198, in
main(sys.argv[1:])
File “/tmp/acme_tiny.py”, line 194, in main
signed_crt = get_crt(args.account_key, args.csr, args.acme_dir, log=LOGGER, CA=args.ca)
File “/tmp/acme_tiny.py”, line 104, in get_crt
raise ValueError(“Error requesting challenges: {0} {1}”.format(code, result))
ValueError: Error requesting challenges: 500 {
“type”: “urn:acme:error:serverInternal”,
“detail”: “Error creating new authz”,
“status”: 500
}[回复] -
博主你好, https://certbot.eff.org/ 根据这个步骤来 , 到这里./certbot-auto 执行完毕出现以下错误提示, 要如何解决呢?
Creating virtual environment...
Installing Python packages...
Installation succeeded.
/root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
DeprecationWarning
Version: 1.1-20080819
Version: 1.1-20080819
/root/.local/share/letsencrypt/lib/python2.6/site-packages/certbot/main.py:496: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
return e.message
No installers are available on your OS yet; try running "letsencrypt-auto certonly" to get a cert you can install manually[回复] -
对了 系统版本是CentOS release 6.4 (Final) 32bit
[回复] -
配置好了, 但是间歇性的打不开
chrome出现提示
无法访问此网站
www.xxx.com 拒绝了我们的连接请求。
这该如何解决, xp系统, win7貌似无此问题, 但是博主的网站就不会出现这个问题 麻烦帮忙看看
[回复]qi 回复:
@baiduissb, 打不开查一下是不是空间的问题?这个应该和证书没有关系。
[回复]baiduissb 回复:
@qi, https://www.ssllabs.com/ 默认装好用这个测试只有B级别, 哪里还需要设置啊, 才能达到A+ 求指教
[回复]qi 回复:
@baiduissb, 检测时会有红色字体提示,好像是时间设置的问题,你可以贴出你的检测结果。
[回复]baiduissb 回复:
@qi, 博主你好 结果如下:
Cipher Suites (SSL 3+ suites in server-preferred order; deprecated and SSL 2 suites at the end)
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH secp256r1 (eq. 3072 bits RSA) FS 256
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH secp256r1 (eq. 3072 bits RSA) FS 128
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (0x9f) DH 1024 bits FS WEAK 256
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (0x9e) DH 1024 bits FS WEAK 128
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028) ECDH secp256r1 (eq. 3072 bits RSA) FS 256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014) ECDH secp256r1 (eq. 3072 bits RSA) FS 256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (0x6b) DH 1024 bits FS WEAK 256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA (0x39) DH 1024 bits FS WEAKDROWN (experimental) No, server keys and hostname not seen elsewhere with SSLv2
(1) For a better understanding of this test, please read this longer explanation
(2) Key usage data kindly provided by the Censys network search engine; original DROWN test here
(3) Censys data is only indicative of possible key and certificate reuse; possibly out-of-date and not complete
Secure Renegotiation Supported
Secure Client-Initiated Renegotiation No
Insecure Client-Initiated Renegotiation No
BEAST attack Not mitigated server-side (more info) TLS 1.0: 0xc014
POODLE (SSLv3) No, SSL 3 not supported (more info)
POODLE (TLS) No (more info)
Downgrade attack prevention Yes, TLS_FALLBACK_SCSV supported (more info)
SSL/TLS compression No
RC4 No
Heartbeat (extension) Yes
Heartbleed (vulnerability) No (more info)
OpenSSL CCS vuln. (CVE-2014-0224) No (more info)
OpenSSL Padding Oracle vuln.
(CVE-2016-2107) No (more info)
Forward Secrecy Weak key exchange WEAK
ALPN No
NPN Yes http/1.1
Session resumption (caching) Yes
Session resumption (tickets) Yes
OCSP stapling Yes
Strict Transport Security (HSTS) No
HSTS Preloading Not in: Chrome Edge Firefox IE
Public Key Pinning (HPKP) No
Public Key Pinning Report-Only No
Long handshake intolerance No
TLS extension intolerance No
TLS version intolerance No
Incorrect SNI alerts No
Uses common DH primes Yes Replace with custom DH parameters if possible (more info)
DH public server param (Ys) reuse No
SSL 2 handshake compatibility Yes还有就是排版错乱, 显示不正常, 请帮我看看这是什么问题, 网站51daogouwang.com
[回复]qi 回复:
@baiduissb, 看了一下主要是 Weak Diffie-Hellman的问题,可以参考这篇文章来解决:https://www.peterdavehello.org/2015/10/build-an-a-plus-best-practice-https-web-server-via-nginx-chinese-version/
[回复]baiduissb 回复:
@qi, 感谢博主, 现在A了, 但是还有一些问题, 这两项
ALPN No
NPN Yes http/1.1
无法开启http2
还有不少 Server sent fatal alert: handshake_failure
我看了你的站点 这些几乎没有
这是为何呢, 还有哪些地方需要配置吗对了还有一个为什么排版会错乱, 和主题有关系吗
[回复] -
那算了,不用红帽的空间了
[回复] -
提醒一下qi姐,这个链接失效了http://img.acgbuster.com/images/2017/01/29/53134646ed7157687666f480d80d7111.png
然后我想问一下,那个脚本现在还能用吗?我也是用的oneinstack[回复] -
说一下我遇到的问题在输入运行命令./letsencrypt.sh letsencrypt.conf以后返回:
Generating RSA private key, 4096 bit long modulus
…………………………++
……….++
e is 65537 (0x10001)
Generate domain key…
Generating RSA private key, 2048 bit long modulus
…………+++
…+++
e is 65537 (0x10001)
Generate CSR…www.csr
Traceback (most recent call last):
File “/tmp/acme_tiny.py”, line 2, in
import argparse, subprocess, json, os, sys, base64, binascii, time, hashlib, re, copy, textwrap, logging
ImportError: No module named argparse[回复] -
问题已经解决了,用的是Certbot,我把我的方法贴一下:
首先要说明一下几点:
1.存在一个已经建立的虚拟主机
2.我用的是oneinstack
3.Python的版本是2.7以下(如果是2.7以上SSL证书会自动安装,不用手动的)
4.使用Certbot脚本
————-分界线————————————–
过程:
1.去Certbot的官网找到与web环境相应的脚本(官网qi姐已经贴出来了)
2.按照官网的步骤来:(这是CentOS6 ,Nginx的脚本,不要直接复制哦,要按照自己的情况来)
# wget https://dl.eff.org/certbot-auto
# chmod a+x certbot-auto
$ ./certbot-auto
——————-分界线———————–
然后Python版本低于2.7的服务器就会出现问题了
Certbot会报错,代码如下:
Installing Python packages…
Installation succeeded.
/root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
DeprecationWarning
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Failed to find apachectl in PATH: /usr/local/nginx/sbin:/usr/local/php/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
/root/.local/share/letsencrypt/lib/python2.6/site-packages/certbot/main.py:568: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
return e.message
Certbot doesn’t know how to automatically configure the web server on this system. However, it can still get a certificate for you. Please run “certbot-auto certonly” to do so. You’ll need to manually configure your web server to use the resulting certificate.
——————-分界线————————–
我们不用管它,因为他说了,你可以手动安装SSL,那我们就手动安装
——————-分界线——————————
输入命令:
# ./certbot-auto certonly
然后它依旧会报错,那我们依旧不管他
继续进行命令,因为我们是手动配置
——————–分界线——————————–
再输入上面的命令以后,会出现选项,一个是独立服务器,一个是web服务
我们选择1,web服务
它会要求我们输入email(可以不输入),那我们输入email
———————–分界线—————————–
接下来它会要求我们输入域名
输入域名
————————分界线—————————
然后它会要求我们给出域名所在的根目录
用的oneinstack的话就输入
/data/wwwroot/你的域名
————————-分界线———————–
返回如下代码,获得SSL 证书:
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/ex.acgbuster.com/fullchain.pem. Your cert
will expire on 2017-05-02. To obtain a new or tweaked version of
this certificate in the future, simply run certbot-auto again. To
non-interactively renew *all* of your certificates, run
“certbot-auto renew”
– If you like Certbot, please consider supporting our work by:Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF:
————————–分界线——————————-
然后就根据qi姐说的,替换Nginx的SSL的位置
重启Nginx就OK了注:我没有尝试给证书续期,我输入
./certbot-auto renew 命令时它提醒我,证书的due还没有到,不用续期,但是我发现,它告诉我Python的版本不支持脚本,所以我并不知道续命能否成功
—————分界线——————————
如果看不明白的话可以看看原文:
https://www.qxdnbgxb.cn/archives/45最后求qi姐教一下怎么升级Python的版本啊QAQ
[回复] -
请教一下,签到的证书是www.XX.com,如何让另外的二级域名如y.xx.com也能正常显示?现在二级域名显示不安全,chrome不能直接访问
[回复]