Changes for version 0.41
- New Features
- Add async I/O support via Net::Curl backend (experimental). Pass async_ua to Net::ACME2->new() to enable. (PR #18)
- Add create_account() External Account Binding (EAB) support. (GH #38, PR #55)
- Add account key rollover support via key_change() (RFC 8555 §7.3.5). (GH #39, PR #54)
- Add deactivate_account() method (RFC 8555 §7.3.6). (GH #40, PR #53)
- Add update_account() method (RFC 8555 §7.3.2). (GH #41, PR #52)
- Add deactivate_authorization() method (RFC 8555 §7.5.2). (GH #42, PR #51)
- Add get_orders() method for account orders list (RFC 8555 §7.1.2.1). (GH #43, PR #50)
- Add get_certificate_chains() for alternate chain support (RFC 8555 §7.4.2). (GH #44, PR #49)
- Add certificate revocation support via revoke_certificate() (RFC 8555 §7.6). (GH #37, PR #56)
- Expose Retry-After header via retry_after() on Order and Authorization. (GH #45, PR #48)
- Add retry_after_seconds() to Order and Authorization. (PR #60)
- Support unknown challenge types via generic fallback. (GH #36, PR #46)
- Bug Fixes
- Fix: handle GET method in Curl backend. (PR #21)
- Fix: correct substr() directory extraction in Handler.pm $ASSUME_UNIX_PATHS path, then remove $ASSUME_UNIX_PATHS entirely in favor of always using File::Spec. (PR #17)
- Fix: replace die with warn in DESTROY to avoid suppressing exceptions. (PR #58)
- Fix: replace unsafe $@ manipulation with direct die in HTTP.pm. (PR #59)
- Fix: replace plain die strings with structured X::Generic exceptions in _post. (PR #64)
- Fix: guard get_certificate_chain(s) against undef certificate URL. (GH #63, PR #65, PR #67)
- Fix: preserve JSON parse failure context in _xform_http_error. (PR #66)
- Fix: throw exception on unparseable HTTP status in Curl backend. (PR #68)
- Fix: guard empty lines in Curl.pm header parsing. (PR #65)
- Fix: skip Net::Curl::Multi on Windows in cpanfile. (PR #34)
- Fix: quote since-perl value to prevent YAML float truncation. (PR #32)
- Improvements
- Maintenance
- Modernize Makefile.PL metadata and dependency declarations. (PR #28)
- Add cpanfile and switch CI to install-with-cpm. (PR #30)
- Use MM->parse_version() instead of hardcoded version in provides. (PR #31)
- Consolidate CI workflows into single testsuite.yml. (PR #27)
- Add CLAUDE.md with project conventions and architecture. (PR #24, PR #29)
- Extensive new test coverage: HTTP transport, dns_01 challenges, order lifecycle, JWTMaker, EAB, key rollover, certificate revocation, get_orders, RetryAfter, PromiseUtil, Curl backend, get_certificate guard, and structured exception tests. (PR #20, PR #22, PR #25, PR #57)
Modules
Client logic for the ACME (Let's Encrypt) protocol
http-01 challenge handler
error parsing logic for ACME
transport logic for Net::ACME2.
Synchronous HTTP client for Net::ACME
Let’s Encrypt’s v2 API endpoint
Parse RFC 7231 Retry-After header values
Examples
- examples/dns-01.pl
- examples/dns-01_async.pl
- examples/http-01.pl
- examples/http-01_async.pl
- examples/lib/Net_ACME2_Example.pm
- examples/lib/Net_ACME2_Example_Async.pm
- examples/lib/Net_ACME2_Example_DNS01.pm
- examples/lib/Net_ACME2_Example_HTTP01.pm
- examples/lib/Net_ACME2_Example_Sync.pm
- examples/tls-alpn-01.pl
- examples/tls_alpn_01_client.pl
- examples/tls_alpn_01_server.pl