HTTPS Java的基本身份验证

时间:2016-04-19 17:57:38

标签: java https basic-authentication

我的HTTPS页面调用工作正常,我的HTTP Basic Auth工作正常,我不能做的是在HTTPS连接上运行Basic Auth。

我附上了一个代码示例,但它不起作用。我一直收到403.我已经检查了用户名和密码,并且在使用Firefox的RESTClinet插件进行测试时已经成功。

任何帮助都会很棒。感谢。

   private static void getAPITest() throws MalformedURLException, IOException 
{        
    try {


    System.setProperty("javax.net.ssl.trustStore","/home/USER/CERTS/myTrustStore");
    System.setProperty("javax.net.ssl.trustStorePassword", "PASSWORD");


     Authenticator myAuth = new Authenticator() 
        {
            @Override
            protected PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication("USERNAME", "PASSWORD".toCharArray());
            }
        };

        Authenticator.setDefault(myAuth);


        String httpsURL = "https://someurlandapi.com";
        URL myurl = new URL(httpsURL);
        HttpsURLConnection con = (HttpsURLConnection)myurl.openConnection();
        //con.setRequestProperty("Authorization", "Basic " + authString);
        con.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
        con.setRequestProperty("Accept", "application/json");
        con.setRequestMethod("POST");            

        InputStream ins = con.getInputStream();
        InputStreamReader isr = new InputStreamReader(ins);
        BufferedReader in = new BufferedReader(isr);

        String inputLine;

        while ((inputLine = in.readLine()) != null)
        {
          System.out.println(inputLine);
        }

        ins.close();
        in.close();

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:2)

事实证明在基本之前没有空格:

con.setRequestProperty("Authorization", "Basic " + authStringEnc);

它需要:

conn.setRequestProperty("User-Agent", "Mozilla/5");

如果您要创建自己的信任库,那么对于执行此操作的任何人来说,您都需要添加网站/网址SSL证书链。在Firefox中,您可以点击挂锁>更多信息>安全>查看证书。从那里,您可以突出显示带链的证书导出,然后使用keytool将其添加到您的信任库:

keytool -import -file websitecertificate.pem -alias websitecert -keystore myTrustStore

答案 1 :(得分:1)

我不认为PasswordAuthentication正在做你想要的。但基本的auth很容易处理。如果你在Java8中它只是Base64.getEncoder()。encodeToString((“USERNAME”+“:”+“PASSWORD”)。getBytes())。