关于使用Let's Encrypt开启阿里云服务器HTTPS证书

关于Let’s Encrypt

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 向访客提供加密连接。这是域名认证未来的发展方向。

废话不多说直接上安装命令

下载 acme.sh

// 注:必须在 root 权限下运行下述命令哦,切记!切记!切记!
curl  https://get.acme.sh | sh

把 acme.sh 安装到你的 home 目录下:~/.acme.sh/并创建 一个 bash 的 alias, 方便你的使用:

acme.sh=~/.acme.sh/acme.sh

acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证.(这里不讲DNS,因为没实际用过,写出来也是扯淡)

  1. 配置nginx文件夹
    直接用nginx 配置给他测试是不是配置的服务器是不是我们自己的(权限验证)
 server {
     
        listen 80;
        server_name  你自己需要配置的域名(如https://xxx这里就是xxx);
    	location \ {
     
            root   /mnt/webserver/www/;#跟下面这个命令对应(注意!)
        }
 }
  1. 测试文件夹权限验证
acme.sh  --issue  -d 域名  --webroot  /mnt/webserver/www/
  1. 创建存放证书文件夹
mkdir -p /etc/nginx/ssl
  1. 创建dhparam.pem 给nginx使用(可要可不要)
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
  1. 把证书移动目录
cd /root/.acme.sh/api.sp.weilanyun.net 
acme.sh --installcert -d 域名 \
--key-file /etc/nginx/ssl/xxx.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \

6.开放443端口(阿里云安全组)
关于使用Let's Encrypt开启阿里云服务器HTTPS证书_第1张图片
7.配置nginx

server {
     
        listen 443 ssl;
        server_name  域名;
        ssl_certificate /etc/nginx/ssl/fullchain.cer; # 证书文件
        ssl_certificate_key /etc/nginx/ssl/xxx.key; # 私钥文件
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;   #使用该协议进行配置。
        ssl_prefer_server_ciphers on;
        location / {
     
            proxy_pass http://xxx;
        }
 }

8.重启nginx可能会出现一个问题
Nginx配置SSL证书时——nginx:[emerg]unknown directive ssl错误
因为我们配置这个SSL证书需要引用到nginx的中SSL这模块,然而我们一开始编译的Nginx的时候并没有把SSL模块一起编译进去,所以导致这个错误的出现。

直接重装nginx
来到解压目录下后
./configure --prefix=/opt/app/nginx/ --with-http_stub_status_module --with-http_ssl_module
指定目录(/opt/app/nginx/)+ ssl模块
//重新添加这个ssl模块
执行以上一条命令出现这个错误(./configure:错误:SSL模块需要OpenSSL库。),原因是因为缺少了OpenSSL,那我们再来安装一个即可执行:yum -y install openssl openssl-devel
再重新跑第一条指令
再 make
再make install

你可能感兴趣的:(https,java)