|
| 1 | +## 0.19.0 |
| 2 | + |
| 3 | +FIPS support, distributed as a **separate, dual GPL/commercial artifact**. |
| 4 | + |
| 5 | +Alongside FIPS, this release switches TLS to BouncyCastle's JSSE provider by |
| 6 | +default (session reuse, ChaCha20-Poly1305, session/servername callbacks), and |
| 7 | +lands an extensive X.509 verification hardening (name constraints, CRL scope, |
| 8 | +path-length, partial-chain handling and improved hostname verification). |
| 9 | + |
| 10 | +NOTE: due considerable amount of changes please treat 0.19 as a beta release. |
| 11 | + |
| 12 | +- [feat] FIPS support as a separate `jruby-openssl` artifact bundling BC-FIPS |
| 13 | +- [feat] leverage BouncyCastle's JSSE provider by default for SSL/TLS |
| 14 | +- [build] restore binary compatibility with BC < 1.84 |
| 15 | +- [feat] `to_java` conversions (`X500Principal`, `KeyPair`, `MessageDigest`, `Mac`) |
| 16 | +- [feat] pluggable internal logging via a logger interface |
| 17 | +- [feat] route logs through `java.util.logging` (`jruby.openssl.log.logger=jul`) |
| 18 | +- [chore] remove long-deprecated methods and legacy JRuby/JOpenSSL constants |
| 19 | + |
| 20 | +### SSL / TLS |
| 21 | + |
| 22 | +- [feat] proper TLS session reuse with the BC provider |
| 23 | +- [compat] add `SSLSession#to_der`, `#to_pem` and `#to_text` |
| 24 | +- [feat] (re)implement SSLContext session callbacks |
| 25 | +- [feat] start calling `servername_cb` |
| 26 | +- [feat] server-only `renegotiation_cb` |
| 27 | +- [feat] TLS 1.2 ChaCha20-Poly1305 cipher suites |
| 28 | +- [fix] `read_nonblock(exception: false)` throwing on TLS 1.3 |
| 29 | +- [fix] SSL write data loss on non-blocking partial flush |
| 30 | +- [fix] keep TLS 1.3 with `ciphers=` and a default timeout |
| 31 | +- [fix] `SSLSocket#cipher` returns `[name, version, bits, alg_bits]` |
| 32 | +- [fix] raise on `sysread`/`syswrite` before handshake |
| 33 | +- [fix] `session_reused?` raises before handshake |
| 34 | +- [fix] close connection on hostname-verification failure |
| 35 | +- [compat] emulate early `verify_hostname` during `SSLSocket#connect` |
| 36 | +- [compat] normalize IP address in SAN verify to match MRI |
| 37 | +- [compat] `undef` `SSLContext#dup`/`clone` and reject option writers |
| 38 | +- [compat] `set_params` must OR options (not overwrite them) |
| 39 | +- [fix] serialize concurrent SSL reads/writes to avoid buffer corruption |
| 40 | +- [fix] grow the application read buffer on TLS unwrap `BUFFER_OVERFLOW` |
| 41 | +- [compat] honor `verify_callback` on the `ca_file`/`ca_path` lookup path |
| 42 | + |
| 43 | +### X.509 / certificate verification |
| 44 | + |
| 45 | +- [compat] implement `nameConstraints` verification |
| 46 | +- [fix] properly encode `nameConstraints` extension |
| 47 | +- [compat] enforce dNSName name constraints against EE subject CN |
| 48 | +- [compat] enforce CRL issuing-distribution-point scope |
| 49 | +- [fix] align `cert_crl` critical-extension and `removeFromCRL` handling |
| 50 | +- [fix] proper path-length constraint on self-signed roots |
| 51 | +- [fix] make `V_FLAG_PARTIAL_CHAIN` verify correctly |
| 52 | +- [fix] canonicalize X.509 name before hashed-dir lookup |
| 53 | +- [fix] `StoreContext#getExtraData` IndexOutOfBoundsException |
| 54 | +- [fix] cert time checks when not-before/after are equal |
| 55 | +- [compat] `StoreContext#verify` raises on internal error |
| 56 | +- [compat] implement `Store#add_path` for cert lookup |
| 57 | +- [compat] `verify_result` reporting with `VERIFY_NONE` (#25) |
| 58 | +- [compat] set `V_ERR_HOSTNAME_MISMATCH` on hostname fail |
| 59 | +- [compat] expose missing `V_ERR`/`V_FLAG` constants to Ruby |
| 60 | +- [compat] keep X.509 extension order for certs |
| 61 | +- [fix] don't clobber shared (store) verify settings |
| 62 | +- [compat] drop `V_FLAG_CRL_CHECK_ALL` on `DEFAULT_CERT_STORE` |
| 63 | +- [fix] report a malformed `subjectAltName` as an invalid extension |
| 64 | +- [fix] avoid false revocation from `certificateIssuer` CRL entries |
| 65 | +- [fix] proper escaping in `X509::Name` |
| 66 | +- [fix] ASCII-only X.509 name canonicalization |
| 67 | +- [compat] align `X509::StoreContext` state exposure |
| 68 | +- [fix] `subjectAltName` with an `otherName` entry breaking hostname verification (#324) |
| 69 | +- [fix] format the `nameConstraints` extension value like OpenSSL does |
| 70 | + |
| 71 | +### PKey / Cipher / ASN.1 |
| 72 | + |
| 73 | +- [feat] AES-CCM cipher mode support (#96) |
| 74 | +- [feat] implement `OpenSSL::PKey::EC::Point#invert!` |
| 75 | +- [compat] `PKey.generate_key`/`generate_parameters` (with params/String) |
| 76 | +- [compat] support HMAC key with the generic PKey API |
| 77 | +- [compat] implement `PKey::EC#check_key` validation |
| 78 | +- [compat] support `PKey::EC.new` with 4 args |
| 79 | +- [fix] RSA-PSS reject negative salt and align `sign_pss` default |
| 80 | +- [fix] handle mismatched PSS content/MGF1 digests via fallback |
| 81 | +- [fix] `Cipher#key=` rejects any length mismatch |
| 82 | +- [fix] reject over-length IV for AEAD ciphers |
| 83 | +- [compat] align `Cipher#iv=` and AEAD-only writers |
| 84 | +- [fix] manual block cipher (buffer/padding) edge cases under CBC/ECB |
| 85 | +- [compat] match MRI no-salt cipher derivation |
| 86 | +- [compat] derive cipher IV length from the real block size |
| 87 | +- [fix] PBKDF2 raw password bytes and reject `< 0` iterations |
| 88 | +- [compat] OpenSSL default PBKDF2 iterations for key export |
| 89 | +- [fix] bound ASN.1 nesting depth and fix truncated-input error class |
| 90 | +- [fix] add missing ASN.1 object-ids for SHA-2 |
| 91 | +- [compat] switch `BN.pseudo_rand` to secure random |
| 92 | +- [compat] allow CRT parameter setters on RSA |
| 93 | +- [fix] Cipher authentication-tag reset behavior |
| 94 | +- [fix] break `OpenSSL::Config` `.include` reference cycles |
| 95 | + |
| 96 | +### PKCS7 / PKCS12 / OCSP |
| 97 | + |
| 98 | +- [feat] implement missing PKCS7 wrapper methods |
| 99 | +- [feat] implement `X509::Request#to_text` |
| 100 | +- [fix] protect PKCS12 key entries with password |
| 101 | +- [fix] wrap mode for PKCS7 key transport |
| 102 | +- [compat] handle `File` object in `PKCS7.obj2bio` |
| 103 | +- [fix] preserve OCSP `NOCERTS` with explicit flags |
| 104 | + |
1 | 105 | ## 0.16.2 |
2 | 106 |
|
3 | 107 | - [fix] PKey.generate_key accepts key as parameters (#366) |
|
0 commit comments