docs: public SSLSocketFactory getSSLSocketFactory(String sslAliasName, Map<String, Object> connectionInfo, SSLConfigChangeListener listener) throws SSLException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(tc, "getSSLSocketFactory", new Object[] { sslAliasName, connectionInfo, listener });
  
          SecurityManager sm = System.getSecurityManager();
          if (sm != null) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Performing Java 2 Security Permission Check ...");
                  Tr.debug(tc, "Expecting : " + GET_SSLCONFIG.toString());
              }
              sm.checkPermission(GET_SSLCONFIG);
          }
  
          SSLSocketFactory sslSocketFactory = null;
  
          if (sslAliasName == null && (connectionInfo == null || connectionInfo.isEmpty())) {
              connectionInfo = new HashMap<String, Object>();
              connectionInfo.put(Constants.CONNECTION_INFO_DIRECTION, Constants.DIRECTION_OUTBOUND);
          }
  
          try {
              SSLConfig sslProperties = (SSLConfig) getProperties(sslAliasName, connectionInfo, listener);
              String contextProvider = sslProperties.getProperty(Constants.SSLPROP_CONTEXT_PROVIDER);
              sslSocketFactory = JSSEProviderFactory.getInstance(contextProvider).getSSLSocketFactory(connectionInfo, sslProperties);
          } catch (Exception e) {
              FFDCFilter.processException(e, getClass().getName(), "getSSLSocketFactory (2)", this);
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  Tr.exit(tc, "The following exception occurred in getSSLSocketFactory().", new Object[] { e });
              throw asSSLException(e);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.exit(tc, "getSSLSocketFactory");
          return sslSocketFactory;
      }