mk_kiki
@mk_kiki

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

開発用WEBサーバーとAndroidでHTTPS通信する方法

解決したいこと

WEBサーバーと通信するAndroidアプリを開発中です。
WEBサーバーは開発用サーバーです。
HTTPS通信時に記事中のエラーが発生しました。
解決方法を教えてください。

発生している問題・エラー

HttpsURLConnection.connect() コール後に下記の例外が発生しています。

javax.net.ssl.SSLPeerUnverifiedException: Hostname exsample.com not verified:
    certificate: sha1/uc+mc16yB4TFeOHlohvkRGQ1ZbY=
    DN: O=Default Company Ltd,L=Default City,C=JP
    subjectAltNames: []

自分で試したこと

開発用WEBサーバーにて証明書を作成

プライベートCA(認証局) 秘密鍵・証明書作成
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt -reqexts v3_req -extensions v3_ca
クライアント用秘密鍵・証明書署名要求(CSR)作成

クライアント用秘密鍵作成

openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 -out client.key

クライアント用証明書要求作成

openssl req -new -key client.key -out client.csr

クライアント用証明書作成

sudo openssl x509 -req -in client.csr -CA certificate.crt -CAkey privateKey.key -CAcreateserial -out client.crt -days 365

/etc/httpd/conf.d/ssl.conf にクライアント用秘密鍵、クライアント用証明書を設定し、ブラウザからアクセスできることを確認しました。

Androidに自己署名証明書を設定

参考URL
https://developer.android.com/privacy-and-security/security-ssl?hl=ja
https://developer.android.com/privacy-and-security/security-config?hl=ja

0

2Answer

Comments

  1. @mk_kiki

    Questioner

    https://kazuhira-r.hatenablog.com/entry/20180803/1533302929
    手順に沿ってsubjectAltNameにホスト名を追加したところSSLPeerUnverifiedExceptionが解消されました。
    プライベートCA(認証局) 秘密鍵・証明書作成は不要でした。

    ご回答ありがとうございました。

Hostname exsample.com not verified:

exsample.com というスペルミスした名前が気になります。ここの名前(接続しようとしているホスト名)と、実際の開発サーバのホスト名と、 Android のカスタム CA 設定に書いたホスト名はすべて一致していますか?

1Like

Comments

  1. @mk_kiki

    Questioner

    確認ありがとうございます。
    実際のホスト名のため、example.comに修正した際にスペルミスしておりました。

    プライベートCA証明書のCAは空白です。
    クライアント用証明書のCAは、開発サーバーのホスト名=接続しようとしているホスト名になっております。

    Android には、プライベートCA証明書、クライアント用証明書のどちらを設定してもSSLPeerUnverifiedExceptionが発生しています。

Your answer might help someone💌