忽略ssl问题后仍出错:找不到请求目标的有效证书路径
我面临一个奇怪的问题。在开发应用程序时,我使用SpringSocial向用户提供Facebook帐户登录。我现在使用ssl脚本忽略证书检查,如下所示。问题是,当我尝试从Facebook访问令牌时,这个脚本可以工作,但当我尝试访问用户配置文件时,它会抛出一个错误 sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径 我还尝试为本地主机创建一个自签名证书,并将其添加到java密钥库中,但没有任何帮助 Facebook Controller.java忽略ssl问题后仍出错:找不到请求目标的有效证书路径,ssl,Ssl,我面临一个奇怪的问题。在开发应用程序时,我使用SpringSocial向用户提供Facebook帐户登录。我现在使用ssl脚本忽略证书检查,如下所示。问题是,当我尝试从Facebook访问令牌时,这个脚本可以工作,但当我尝试访问用户配置文件时,它会抛出一个错误 sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径 我还尝试为本地主机创建一个自签名证书,并将其添加到java密钥库中,但没有任何帮助 Fac
@RequestMapping(value = "/social/facebook")
@Component
public class FacebookController<FacebookApi> {
private static final Logger LOGGER = LoggerFactory
.getLogger(FacebookController.class);
private static final String PUBLISH_SUCCESS = "success";
private static final String FACEBOOK = "facebook";
@Autowired
private ConnectionFactoryRegistry connectionFactoryRegistry;
@Autowired
private OAuth2Parameters oAuth2Parameters;
@Autowired
@Qualifier("facebookServiceProvider")
private OAuthServiceProvider<FacebookApi> facebookServiceProvider;
@RequestMapping(value = "/signin", method = RequestMethod.GET)
public ModelAndView signin(HttpServletRequest request,
HttpServletResponse response) throws Exception {
System.out.println("Redirecting to Facebook.........");
System.out.println(System.getProperty("java.home"));
System.setProperty( "http.proxyPort", "80" );
System.setProperty( "https.proxyPort", "80" );
System.setProperty( "http.proxyHost", "10.68.248.98" );
System.setProperty( "https.proxyHost", "10.68.248.98" );
FacebookConnectionFactory facebookConnectionFactory = (FacebookConnectionFactory) connectionFactoryRegistry
.getConnectionFactory(FACEBOOK);
OAuth2Operations oauthOperations = facebookConnectionFactory
.getOAuthOperations();
oAuth2Parameters.setState("recivedfromfacebooktoken");
String authorizeUrl = oauthOperations.buildAuthorizeUrl(
GrantType.AUTHORIZATION_CODE, oAuth2Parameters);
RedirectView redirectView = new RedirectView(authorizeUrl, true, true,
true);
System.out.println("Redirecting to Facebook again.........");
return new ModelAndView(redirectView);
}
@RequestMapping(value = "/callback", method = RequestMethod.GET)
@ResponseBody
public void postOnWall(@RequestParam("code") String code,
@RequestParam("state") String state, HttpServletRequest request,
HttpServletResponse response) throws Exception {
OAuthService oAuthService = facebookServiceProvider.getService();
System.out.println(oAuthService.getVersion());
Verifier verifier = new Verifier(code);
getSSL();
Token accessToken =oAuthService.getAccessToken(Token.empty(), verifier);
//System.out.println(accessToken);
//System.out.println(accessToken.getToken());
//getSSL();
FacebookTemplate template = new FacebookTemplate(accessToken.getToken());
//System.out.println(template);
**// ERROR COMES HERE**
User facebookProfile = template.userOperations().getUserProfile();
//System.out.println(facebookProfile);
String userId = facebookProfile.getId();
//System.out.println(facebookProfile.getEmail());
//System.out.println(facebookProfile.getFirstName());
LOGGER.info("Logged in User Id : {}", userId);
response.sendRedirect("/j_spring_security_check?j_username="+userId);
//return "success";
}
@RequestMapping(value = "/callback", params = "error_reason", method = RequestMethod.GET)
@ResponseBody
public void error(@RequestParam("error_reason") String errorReason,
@RequestParam("error") String error,
@RequestParam("error_description") String description,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
try {
LOGGER.error(
"Error occurred while validating user, reason is : {}",
errorReason);
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, description);
} catch (Exception e) {
e.printStackTrace();
}
}
public void getSSL(){
SSLContext sslContext=null;
try {
sslContext= SSLContext.getInstance("SSL");
// set up a TrustManager that trusts everything
sslContext.init(null, new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
System.out.println("getAcceptedIssuers =============");
return null;
}
public void checkClientTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkClientTrusted =============");
}
public void checkServerTrusted(X509Certificate[] certs,
String authType) {
System.out.println("checkServerTrusted =============");
}
} }, new SecureRandom());
} catch (KeyManagementException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch(NoSuchAlgorithmException e){
e.printStackTrace();
}
if(sslContext!=null){
HttpsURLConnection.setDefaultSSLSocketFactory(
sslContext.getSocketFactory());
HttpsURLConnection
.setDefaultHostnameVerifier(new HostnameVerifier() {
public boolean verify(String arg0, SSLSession arg1) {
System.out.println("hostnameVerifier =============");
return true;
}
});
}
}
}
我终于让它在我这边起作用了 1。我必须将Facebook Graph SSL证书导入我的服务器密钥库
- 转到并将证书作为base 64文件下载
- 将证书导入密钥库。默认密钥库密码是
changeit
keytool -import -alias star.facebook.com -keystore <JRE_HOME>\lib\security\cacerts -file star.facebook.com
String [] fields = { "id", "email", "first_name", "last_name" };
User userProfile = facebook.fetchObject("me", User.class, fields);
系统参数
System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,TLSv1");
3.Spring Social 2.0.3.RELEASE如果由于不推荐使用的字段(“bio”)而试图访问Graph API v2.8,则无法正常检索用户配置文件
而不是…
User userProfile = facebook.userOperations().getUserProfile(); // Error
。。。使用此选项:
keytool -import -alias star.facebook.com -keystore <JRE_HOME>\lib\security\cacerts -file star.facebook.com
String [] fields = { "id", "email", "first_name", "last_name" };
User userProfile = facebook.fetchObject("me", User.class, fields);
所有参考资料:
keytool -import -alias star.facebook.com -keystore <JRE_HOME>\lib\security\cacerts -file star.facebook.com
String [] fields = { "id", "email", "first_name", "last_name" };
User userProfile = facebook.fetchObject("me", User.class, fields);
- 转到并将证书作为base 64文件下载
- 将证书导入密钥库。默认密钥库密码是
changeit
- 我终于让它在我这边起作用了
1。我必须将Facebook Graph SSL证书导入我的服务器密钥库
keytool -import -alias star.facebook.com -keystore <JRE_HOME>\lib\security\cacerts -file star.facebook.com
String [] fields = { "id", "email", "first_name", "last_name" };
User userProfile = facebook.fetchObject("me", User.class, fields);
系统参数
System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,TLSv1");
3.Spring Social 2.0.3.RELEASE如果由于不推荐使用的字段(“bio”)而试图访问Graph API v2.8,则无法正常检索用户配置文件
而不是…
User userProfile = facebook.userOperations().getUserProfile(); // Error
。。。使用此选项:
keytool -import -alias star.facebook.com -keystore <JRE_HOME>\lib\security\cacerts -file star.facebook.com
String [] fields = { "id", "email", "first_name", "last_name" };
User userProfile = facebook.fetchObject("me", User.class, fields);
所有参考资料:
keytool -import -alias star.facebook.com -keystore <JRE_HOME>\lib\security\cacerts -file star.facebook.com
String [] fields = { "id", "email", "first_name", "last_name" };
User userProfile = facebook.fetchObject("me", User.class, fields);