[解決済み] 自己署名証明書による HTTPS 接続の受け入れ
質問
HTTPS接続を行うために
HttpClient
しかし、問題は、この証明書が、以下のように認識された認証局 (CA) によって署名されていないことです。
ベリサイン
,
GlobalSIgn
などが、Android Trusted Certificates のセットにリストアップされていますが、私はずっと
javax.net.ssl.SSLException: Not trusted server certificate
.
すべての証明書を単純に受け入れるソリューションを見たことがありますが、ユーザーに尋ねたい場合はどうすればよいのでしょうか?
ブラウザと同じようなダイアログを表示して、ユーザーが続けるかどうか決められるようにしたいのですが。できれば、ブラウザと同じcertificatestoreを使用したいです。何かアイデアはありますか?
どのように解決するのですか?
まず、検証のレベルを設定する必要があります。 そのようなレベルは、それほど多くはありません。
- allow_all_hostname_verifier
- ブラウザ互換ホスト名検証子
- strict_hostname_verifier
setHostnameVerifier()メソッドは、新しいライブラリであるapacheでは廃止されていますが、Android SDKのバージョンでは正常に動作します。
そこで
ALLOW_ALL_HOSTNAME_VERIFIER
というメソッドファクトリに設定します。
SSLSocketFactory.setHostnameVerifier()
.
次に、プロトコルのファクトリーを https に設定する必要があります。これを行うには、単に
SchemeRegistry.register()
メソッドを使用します。
次に
DefaultHttpClient
で
SingleClientConnManager
.
また、以下のコードでは、デフォルトで私たちのフラグ(
ALLOW_ALL_HOSTNAME_VERIFIER
というメソッドで
HttpsURLConnection.setDefaultHostnameVerifier()
以下のコードは私のために動作します。
HostnameVerifier hostnameVerifier = org.apache.http.conn.ssl.SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER;
DefaultHttpClient client = new DefaultHttpClient();
SchemeRegistry registry = new SchemeRegistry();
SSLSocketFactory socketFactory = SSLSocketFactory.getSocketFactory();
socketFactory.setHostnameVerifier((X509HostnameVerifier) hostnameVerifier);
registry.register(new Scheme("https", socketFactory, 443));
SingleClientConnManager mgr = new SingleClientConnManager(client.getParams(), registry);
DefaultHttpClient httpClient = new DefaultHttpClient(mgr, client.getParams());
// Set verifier
HttpsURLConnection.setDefaultHostnameVerifier(hostnameVerifier);
// Example send http request
final String url = "https://encrypted.google.com/";
HttpPost httpPost = new HttpPost(url);
HttpResponse response = httpClient.execute(httpPost);
関連
-
Gradle の同期に失敗しました。com.android.tools.build:gradle が見つかりませんでした。
-
telnet'が内部コマンドまたは外部コマンドとして認識されない 解決方法
-
android block certificate validation CertPathValidatorException: 認証パスのトラストアンカーが見つかりません
-
プロセス 'command 'F:\sdkbuild-tools', 26.0.2 AAAPT.exe' finished with non-zero exit value 1
-
[解決済み] OpenSSLを使用して自己署名入りSSL証明書を生成する方法を教えてください。
-
[解決済み] 自己署名入りの証明書をgitに受け入れさせるにはどうしたらいいですか?
-
[解決済み] HttpClient over HTTPSを使用してすべての証明書を信頼する
-
[解決済み】自己署名付きlocalhost証明書をChromeが受け入れるようにする方法
-
[解決済み] [Solved] javax.net.ssl.SSLHandshakeException の解決: sun.security.validator.ValidatorException: PKIX パスの構築に失敗しました エラー?
-
[解決済み] 特定の接続で異なる証明書を使用するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
aapt2エラー:ログを確認する(具体的な原因の探り方)
-
Android のパッケージングに失敗し、Android リソースのリンクに失敗したことを示すプロンプトが表示される
-
Android studioのインストールと問題発生、Emulator: PANIC: AVDのシステムパスが見つかりません。
-
Android ProgressBarのスタイルカラーを変更する
-
android bluetooth--Bluetooth on、検索、ペアリング、接続
-
Android Studioのgitの使用とgitの設定パス
-
Android Studio http://schemas.android.com/apk/res/android 「URIが登録されていません」の解決方法について
-
[解決済み] HttpClient over HTTPSを使用してすべての証明書を信頼する
-
[解決済み] POSTデータによるPHPリダイレクト
-
[解決済み] Apache HttpClient 4.0でのSSL証明書エラーを無視する方法