こんにちは。タイトルにあるように、Android アプリでキャディを利用した Web サイトのサブドメインに接続できません。アプリのバックエンドを Heroku から自分の digitalocean ドロップレットに移行しており、アプリは Heroku を使用していたときに機能していました。
表示されるエラー メッセージは次のとおりです。
W/System.err: javax.net.ssl.SSLException: hostname in certificate didn't match: <sub.domain.com> != <domain.com> OR <domain.com>
W/System.err: at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:185)
W/System.err: at org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54)
W/System.err: at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:114)
W/System.err: at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:95)
W/System.err: at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:388)
W/System.err: at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
W/System.err: at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
W/System.err: at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
W/System.err: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
W/System.err: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
関連する Android コードは次のとおりです。
try {
HttpClient client = new DefaultHttpClient();
final HttpPostHC4 post = new HttpPostHC4(url);
String json = "";
ArrayList<NameValuePair> nameValuePairs = new ArrayList<>();
for (Map.Entry<String, String> entry : valuePair.entrySet()) {
nameValuePairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
}
UrlEncodedFormEntityHC4 entity = new UrlEncodedFormEntityHC4(nameValuePairs, "UTF-8");
content = entity.getContent();
System.out.println(entity);
post.setEntity(entity);
final HttpResponse response = client.execute(post);
code = response.getStatusLine().getStatusCode();
responseText = EntityUtils.toString(response.getEntity());
} catch (Exception exc) {
exc.printStackTrace();
if (responseText != null) {
System.out.println(responseText);
}
}
そして、これは私のキャディファイルの関連セクションです
sub.domain.com {
root /var/www/sub.domain.com/public
log /var/www/sub.domain.com/storage/logs/caddy-access.log
errors /var/www/sub.domain.com/storage/logs/caddy-error.log
fastcgi / /run/php/php7.0-fpm.sock php {
index index.php
}
rewrite {
r .*
ext /
to /index.php?{query}
}
}
Web ブラウザーでサブドメインに接続できるので、なぜこれが起こっているのかよくわかりません。ホスト名の検証を無効にすることにあまり熱心ではないので、Caddy 側で修正する方法があるかどうか疑問に思っています。