告别证书配置烦恼:使用Caddy或OpenResty快速配置免费的HTTPS

https证书配置当前可以说需求量在一直增加,小程序的发布要求业务域名必需是https,有些浏览器对不配置https证书的站点会提示不安全!

而商用的https证书又收费较贵,对于项目前期需要https配置的话可以考虑使用Caddy或者是OpenResty集成Let's Encrypt 的免费证书!

Let's Encrypt是一个免费、自动化的证书签发机构,与商业证书签发机构相比,有以下几个主要的区别:

成本

商业证书签发机构(如Symantec、Comodo、DigiCert等)收费签发SSL/TLS证书,签发周期为一年或多年,定价通常从几十美元到数百美元不等。而 Let's Encrypt 则是一个公共的、非营利性证书签发机构,它提供的 SSL/TLS 证书完全免费,可以无限制地签发,签发周期为三个月。

自动化

商业证书签发机构通常需要手动验证证书申请人的身份和所有权,并且需要在每个证书到期之前手动更新它。相比之下,Let's Encrypt 的证书申请、验证和更新是自动化的,无需人工干预,而且证书签发速度非常快,通常只需要几分钟的时间。

安全性

商业证书签发机构通常会提供各种类型的 SSL/TLS 证书,从域名验证到高度验证的全名单证书等多种级别。相比之下, Let's Encrypt 只提供基本的域名验证 SSL/TLS 证书,对于需要更高级别验证的网站,商业证书签发机构可以提供更加严格的证书。

Caddy(Caddy是一款用Go语言编写的现代化Web服务器软件)配置HTTPS

  1. 在Caddy中,HTTPS被视为标准特性,可以通过简单的声明性语法来启用。
  2. Caddy使用名为Caddyfile的单个文件来配置整个服务器,其中包含所有的网站信息和证书信息。
  3. Caddy具有可扩展的模块化架构,可以轻松地添加许多功能,从而实现最小代码编写的灵活性和易用性。
example.com {
  proxy / http://localhost:8080 {
    transparent
  }
}

Caddy中默认就开启了https,如果站点不使用https需要在配置文件中域名后面添加 example.com:80

OpenResty配置HTTPS

OpenResty是一个高性能的Web应用服务器,它与Nginx相似,但是提供了更多的功能。OpenResty可以使用Lua脚本语言编写扩展。

使用 lua-resty-acme完成ssl的配置:

opm install fffonion/lua-resty-acme 
# create account key
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out /etc/openresty/account.key
# create fallback cert and key
openssl req -newkey rsa:2048 -nodes -keyout /etc/openresty/default.key -x509 -days 365 -out /etc/openresty/default.pem

修改配置文件

events {}


http {
    resolver 8.8.8.8 ipv6=off;
    lua_shared_dict acme 16m;
    # required to verify Let's Encrypt API
    lua_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
    lua_ssl_verify_depth 2;


    init_by_lua_block {
        require("resty.acme.autossl").init({
            -- setting the following to true
            -- implies that you read and accepted https://letsencrypt.org/repository/
            tos_accepted = true,
            -- uncomment following for first time setup
            -- staging = true,
            -- uncomment following to enable RSA + ECC double cert
            -- domain_key_types = { 'rsa', 'ecc' },
            -- uncomment following to enable tls-alpn-01 challenge
            -- enabled_challenge_handlers = { 'http-01', 'tls-alpn-01' },
            account_key_path = "/etc/openresty/account.key",
            account_email = "youemail@youdomain.com",
            domain_whitelist = { "example.com" },
        })
    }

    init_worker_by_lua_block {
        require("resty.acme.autossl").init_worker()
    }


    server {
        listen 80;
        listen 443 ssl;
        server_name example.com;

        # fallback certs, make sure to create them before hand
        ssl_certificate /etc/openresty/default.pem;
        ssl_certificate_key /etc/openresty/default.key;
        ssl_certificate_by_lua_block {
            require("resty.acme.autossl").ssl_certificate()
        }
        location /.well-known {
            content_by_lua_block {
                require("resty.acme.autossl").serve_http_challenge()
            }
        }
    }
}

更详细的配置可以参考:https://github.com/fffonion/lua-resty-acme

OpenResty上启用HTTPS,需要在Nginx配置文件中手动添加证书路径和密钥路径,然后重新加载配置文件。OpenResty可以使用Lua脚本来扩展功能,比如实现自动更新证书等。

Caddy的易用性和自动化明显高于OpenResty,不过集成了lua后的OpenResty在自定义和扩展性上优于Caddy!

选择免费证书或商用证书,需要考虑以下几个因素:

风险和安全性

商用证书一般提供更严格的身份验证(EV证书、OV证书等),有更高的保障和口碑,适合需要高度安全和可靠性的大型企业和金融应用场景。但是免费证书只提供域名验证,安全性和可靠性不一定如商用证书那样高。

经济成本

商用证书的单价通常从几十美元到几百美元不等,需要承担一定的费用。而免费证书无需支付证书费用。

用户规模

对于大型网站和企业,商用证书的成本也可能会降低。如果可以从签发商那里购买大量证书,则可获得大量折扣,对于许多网站和应用,这些节省的价值将远高于付费证书的成本。

部署和管理

商用证书可能需要较长的发放时间和手动的证书管理,相比之下免费证书则简单易用,可以自动化部署和管理。