首页 > 解决方案 > 不接受您的登录证书,或者可能没有提供

问题描述

我正在尝试将数据发布到银行网站。我做了什么:

  1. 我已经在 glassfish 中安装了颁发给另一个域的证书并在 localhost 中使用它。
  2. 将证书导入到信任库

然后在将表格(POST)提交到银行网站时,我得到了

didn’t accept your login certificate, or one may not have been provided. ERR_BAD_SSL_CLIENT_AUTH_CERT

我还尝试从代码中加载 .jks 文件并打开 sslSocket,然后使用 httpsUrlConnection 发布数据。此方法可独立工作,但在使用 glassfish 中部署的 throug 应用程序时,它会提供 didn’t accept your login certificate, or one may not have been provided. ERR_BAD_SSL_CLIENT_AUTH_CERT

我做过的代码:

 KeyStore ks = KeyStore.getInstance("JKS");
        ks.load(new FileInputStream("E://keystore.jks"), "asdf".toCharArray());

        Enumeration<String> en = ks.aliases();
        int n = 0;
        PrivateKey privKey = null;
        Certificate certificate = null;
        Certificate[] certificates = null;
        String alias = "";
        while (en.hasMoreElements()) {
            String aliasKey = en.nextElement();
            System.out.println("aliaskey " + aliasKey);

            alias = aliasKey;

            privKey = (PrivateKey) ks.getKey(aliasKey, "smart@123".toCharArray());
            System.out.println("privKey " + privKey);
            certificate = ks.getCertificate(aliasKey);
            System.out.println("certificate " + certificate);
            certificates = ks.getCertificateChain(aliasKey);
            System.out.println("certificates " + certificates);
            System.out.println("Provider " + ks.getProvider().getName());


            try {


                KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
                kmf.init(ks, "asdf".toCharArray());
                SSLContext sc = SSLContext.getInstance("TLS");
                sc.init(kmf.getKeyManagers(), null, null);

                SSLContext sslContext = null;
                sslContext = SSLContext.getInstance("TLS");
                sslContext.init(kmf.getKeyManagers(), null, null);


                String url = "https://example.com/form";
                URL urlObj = new URL(url);

                HttpsURLConnection conn = (HttpsURLConnection) urlObj.openConnection();
                if (conn instanceof HttpsURLConnection) {
                    ((HttpsURLConnection) conn).setSSLSocketFactory(sslContext.getSocketFactory());
                }

                conn.setReadTimeout(10000);
                conn.setConnectTimeout(15000);
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type", "application/xml");
                conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
                conn.setDoInput(true);
                conn.setDoOutput(true);
                String payload = "datas";

                OutputStream output = new BufferedOutputStream(conn.getOutputStream());
                output.write(payload.getBytes());
                output.flush();


        }

标签: jakarta-eessl-certificateglassfish-4.1

解决方案


推荐阅读