2016-06-18 7 views
1

ParseユーザーはParse環境をVPSに移行する必要があります(これは私の質問の場合です)。またはHeroku、AWShttps(SSL用自己署名付き証明書)を使用してVPS上のParse Serverに接続

Parse.initialize(new Parse.Configuration.Builder(this) 
       .applicationId("myAppId") 
       .clientKey(null) 
       .addNetworkInterceptor(new ParseLogInterceptor()) 
       .server("https://VPS_STATIC_IP_ADDRESS/parse/").build()); 

要求のこの種を使用して行われます。t以下のように、新しい解析インタフェースを使用して接続を初期化することを可能にするAndroid向けの新しい解析SDK(1.13.0)があるなど、)これらのプラットフォームを必要とします適切な.js(nodejs)コネクタファイルは、ポート443がポート1337(ポートリスナー)にローカルに接続されるように既に編集されており、ブラウザのParse Serverにアクセスするときに機能します(リモート:もちろんVPS外から)。 seを適用することは可能です署名付き証明書を発行し、さらに進んでください。しかし、Androidアプリ(ランチャー)が接続しようとすると、自己署名証明書ではできません。 Parse SDK内で自己署名証明書を適用する可能性はありますか?

P.S.この問題に関するバグがあり、これが1.13.1 Parseバージョンがリリースされた理由は本当ですか?はいの場合、このバージョンのjarライブラリを入手するにはどうすればよいですか?

ありがとうございました!

+0

あなたはたぶんタイトをタイトルに修正する必要があります... – Croc

答えて

0

私はちょうどこの1つを解決しました - アンドロイド用のParse SDKは、SelfSigned証明書のボックスサポートを備えていません。 コードを自分で修正する必要があります。

ファーストステップ - あなたのターゲットのサポートは、バージョンのために、より高度である場合は、コードの関連部分はParseHttpClient

public static ParseHttpClient createClient(int socketOperationTimeout, 
     SSLSessionCache sslSessionCache) { 
    String httpClientLibraryName; 
    ParseHttpClient httpClient; 
    if (hasOkHttpOnClasspath()) { 
     httpClientLibraryName = OKHTTP_NAME; 
     httpClient = new ParseOkHttpClient(socketOperationTimeout, sslSessionCache); 
    } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     httpClientLibraryName = URLCONNECTION_NAME; 
     httpClient = new ParseURLConnectionHttpClient(socketOperationTimeout, sslSessionCache); 
    } else { 
     httpClientLibraryName = APACHE_HTTPCLIENT_NAME; 
     httpClient = new ParseApacheHttpClient(socketOperationTimeout, sslSessionCache); 
    } 
    PLog.i(TAG, "Using " + httpClientLibraryName + " library for networking communication."); 
    return httpClient; } 

であるその後、キットカット - 次にあなたがParseURLConnectionHttpClientコンストラクタで追加する必要があります。

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier(){ 

      public boolean verify(String hostname, SSLSession session) { 
       if(hostname.equals("YOUR TARGET SERVER")) { 
        return true; 
       } 
       return false; 
      }}); 

他の場合(古いバージョン)、コードがApacheに落ちてしまい、私はそれを扱うことができませんでした。次のようにしました。私のアプリケーションにokhttpライブラリを追加しました(バージョン2.4を採用しました。そのビルド、最新のものは別のパッケージ名を持っています)、パス上でokhttpが見つかるので、コードは最初の条件に入るでしょう。 if条件の注文を置き換えて、KITKAT以下のバージョンでのみ発生するようにしてください。 ParseOkHttpClientは、以下の自己署名証明書のコードを追加で

public void initCert() { 
    try { 
     Log.i("PARSE","initCert"); 

     CertificateFactory cf = CertificateFactory.getInstance("X.509"); 
     String yairCert = "-----BEGIN CERTIFICATE-----\n" + 
       YOUR CERTIFICATE HERE 
       "-----END CERTIFICATE-----\n"; 
     InputStream caInput = new ByteArrayInputStream(yairCert.getBytes()); 
     Certificate ca = null; 
     try { 
      ca = cf.generateCertificate(caInput); 
      System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN()); 
     } catch (CertificateException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       caInput.close(); 
      } catch (IOException e) { 
       Log.e("PARSE_BUG","Failure on Cert installing",e); 
       e.printStackTrace(); 
      } 
     } 

     // Create a KeyStore containing our trusted CAs 
     String keyStoreType = KeyStore.getDefaultType(); 
     KeyStore keyStore = KeyStore.getInstance(keyStoreType); 
     keyStore.load(null, null); 
     keyStore.setCertificateEntry("ca", ca); 

     // Create a TrustManager that trusts the CAs in our KeyStore 
     String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); 
     TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); 
     tmf.init(keyStore); 

     // Create an SSLContext that uses our TrustManager 
     SSLContext context = SSLContext.getInstance("TLS"); 
     context.init(null, tmf.getTrustManagers(), null); 
     Log.i("PARSE","Initiating Self Signed cert"); 
     okHttpClient.setSslSocketFactory(context.getSocketFactory()); 
     try { 
      cf = CertificateFactory.getInstance("X.509"); 
     } catch (CertificateException e) { 
      Log.e("PARSE_BUG","Failure on Cert installing",e); 
      e.printStackTrace(); 
     } 
    } catch (IOException e) { 
     Log.e("PARSE_BUG","Failure on Cert installing",e); 
     e.printStackTrace(); 
    } catch (CertificateException e) { 
     Log.e("PARSE_BUG","Failure on Cert installing",e); 
     e.printStackTrace(); 

    } catch (NoSuchAlgorithmException e) { 
     Log.e("PARSE_BUG","Failure on Cert installing",e); 
     e.printStackTrace(); 
    } catch (KeyStoreException e) { 
     Log.e("PARSE_BUG","Failure on Cert installing",e); 
     e.printStackTrace(); 
    } catch (KeyManagementException e) { 
     Log.e("PARSE_BUG","Failure on Cert installing",e); 
     e.printStackTrace(); 
    } 

そして、最後の部分は、それはあまりにもコンストラクタで起こるはず、このメソッドを呼び出す+ホスト名を確認しています。 initCert(); { リターン真okHttpClient.setHostnameVerifier(新規のHostnameVerifier(){ @Overrideパブリックブール(文字列sいるSSLSessionいるSSLSessionを確認){ (s.equals( "ターゲットサーバ")であれば);} falseを返します。 } });

それはそれです。 PARSEをローカルにビルドしてアプリにデプロイすると、魅力的に機能します。

お楽しみください

関連する問題