Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
忽略ssl问题后仍出错:找不到请求目标的有效证书路径_Ssl - Fatal编程技术网

忽略ssl问题后仍出错:找不到请求目标的有效证书路径

忽略ssl问题后仍出错:找不到请求目标的有效证书路径,ssl,Ssl,我面临一个奇怪的问题。在开发应用程序时,我使用SpringSocial向用户提供Facebook帐户登录。我现在使用ssl脚本忽略证书检查,如下所示。问题是,当我尝试从Facebook访问令牌时,这个脚本可以工作,但当我尝试访问用户配置文件时,它会抛出一个错误 sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径 我还尝试为本地主机创建一个自签名证书,并将其添加到java密钥库中,但没有任何帮助 Fac

我面临一个奇怪的问题。在开发应用程序时,我使用SpringSocial向用户提供Facebook帐户登录。我现在使用ssl脚本忽略证书检查,如下所示。问题是,当我尝试从Facebook访问令牌时,这个脚本可以工作,但当我尝试访问用户配置文件时,它会抛出一个错误

sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径

我还尝试为本地主机创建一个自签名证书,并将其添加到java密钥库中,但没有任何帮助

Facebook Controller.java

@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命令:

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);

    • 我终于让它在我这边起作用了

      1。我必须将Facebook Graph SSL证书导入我的服务器密钥库

      • 转到并将证书作为base 64文件下载
      • 将证书导入密钥库。默认密钥库密码是
        changeit
      Keytool命令:

      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);