code: OpenSslKeyMaterial chooseKeyMaterial(ByteBufAllocator allocator, String alias) throws Exception {
          X509Certificate[] certificates = keyManager.getCertificateChain(alias);
          if (certificates == null || certificates.length == 0) {
              return null;
          }
  
          PrivateKey key = keyManager.getPrivateKey(alias);
          PemEncoded encoded = PemX509Certificate.toPEM(allocator, true, certificates);
          long chainBio = 0;
          long pkeyBio = 0;
          long chain = 0;
          long pkey = 0;
          try {
              chainBio = toBIO(allocator, encoded.retain());
              chain = SSL.parseX509Chain(chainBio);
  
              OpenSslKeyMaterial keyMaterial;
              if (key instanceof OpenSslPrivateKey) {
                  keyMaterial = ((OpenSslPrivateKey) key).newKeyMaterial(chain, certificates);
              } else {
                  pkeyBio = toBIO(allocator, key);
                  pkey = key == null ? 0 : SSL.parsePrivateKey(pkeyBio, password);
                  keyMaterial = new DefaultOpenSslKeyMaterial(chain, pkey, certificates);
              }
  
              // See the chain and pkey to 0 so we will not release it as the ownership was
              // transferred to OpenSslKeyMaterial.
              chain = 0;
              pkey = 0;
              return keyMaterial;
          } finally {
              SSL.freeBIO(chainBio);
              SSL.freeBIO(pkeyBio);
              if (chain != 0) {
                  SSL.freeX509Chain(chain);
              }
              if (pkey != 0) {
                  SSL.freePrivateKey(pkey);
              }
              encoded.release();
          }
      }
docs: Returns the {@link OpenSslKeyMaterial} or {@code null} (if none) that should be used during the handshake by
  OpenSSL.