我正在使用下面的代码发送一个OTP,但是我收到了一个错误:
PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法在responseMessage =connection.getResponseMessage()处找到被请求目标的有效证书路径;
我找到了几个解决方案,但不确定答案的实现。
public Boolean sendSmsOTP(String MobileNumber, String OTPKey) {
logDebugInfo("In sendSmsOTP ", LOG_TYPE_INFORMATIVE);
HttpURLConnection connection;
int responseCode;
String requestData, responseMessage;
URL smsUrl;
URI uri;
String mobileNumber = MobileNumber.replace("+91", "");
try {
logDebugInfo("Mobile Number : " + mobileNumber + " OTP : " + OTPKey, LOG_TYPE_INFORMATIVE);
requestData = gResourceBundle.getString("RequestSMSData");
requestData = requestData.replace("[MobileNumber]", mobileNumber.trim());
requestData = requestData.replace("[OTPKEY]", OTPKey);
requestData = requestData.replace("[ ]", "%20");
requestData = requestData.replace(" ", "%20");
System.out.println(requestData.toString());
uri = new URI(requestData);
smsUrl = uri.toURL();
logDebugInfo("URL : " + smsUrl.toString(), LOG_TYPE_INFORMATIVE);
connection = (HttpURLConnection) smsUrl.openConnection();
connection.setDoOutput(false);
connection.setDoInput(true);
System.out.println("Manish negi -> "+connection.toString());
responseMessage = connection.getResponseMessage();
logDebugInfo("Response Message from SMS server " + responseMessage, LOG_TYPE_INFORMATIVE);
responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
connection.disconnect();
System.out.println("OTP GENERATED");
return true;
} else {
connection.disconnect();
return false;
}
} catch (Exception e) {
logErrorInfo("Exception in sendSmsOTP function()..." + e.getMessage());
logDebugInfo("Exception in sendSmsOTP function()..." + e.getMessage(), LOG_TYPE_CRITICAL);
gResultMessage = gResultMessage.replace("Error Code", "CA01");
gReturnResponse = getJSONString(gErrorResponse, gResultMessage);
e.printStackTrace();
return false;
}
}此代码抛出下面给出的错误:

发布于 2018-04-30 13:00:55
根据我的经验,此错误消息通常意味着您试图建立与具有自签名证书的服务器的TLS连接。如果是这样的话,解决方案通常是将服务器的证书添加到您的客户机正在运行的JVM的证书存储区中。
如果在名为server.crt的文件中有证书,可以使用JVM附带的keytool添加证书,如下所示:
keytool -import -noprompt \
-storepass changeit \
-alias some_alias \
-keystore $JAVA_HOME/jre/lib/security/cacerts \
-file server.crt您可以使用这样的命令进行openssl:
openssl s_client -showcerts -connect www.example.com:443 </dev/null发布于 2018-05-01 09:53:49
首先,您需要安装或将服务器的证书添加到客户端JVM密钥存储库中。您可以按的另一个节点解释的那样,通过keytool安装它,也可以使用基于GUI的工具keyStore Explorer。
一旦客户端存储中有了服务器证书,就应该解决这个问题。您能否使用keyStore资源管理器工具并检查是否将证书添加到客户端密钥存储库?
https://stackoverflow.com/questions/50100922
复制相似问题