前提・実現したいこと
OpenJDK-10.0.2 でhttps接続し、web pageを取得し、加工しようかなと思い
接続テストプログラムを書いています。
発生している問題・エラーメッセージ
OpenJDKのcacertsをkeytoolで一覧表示すると、alias名とsha256のfingerprintの一覧が得られます。
https://www.google.co.jp/のroot certのfingeprintがcacerts一覧にありません。にもかかわらず、テストプログラムでcertの表示と内容のダンプが取れています。おかしいですね。
該当のソースコード
java
1import java.io.*; 2import java.net.*; 3import javax.net.ssl.HttpsURLConnection; 4import java.security.cert.Certificate; 5 6 7 8public class HttpsTest { 9 public static void main(String[] args) { 10 String urlString = args[0]; 11 connectResult(urlString); 12 } 13 14 public static void connectResult(String urlString){ 15 HttpURLConnection urlconn = null; 16 HttpsURLConnection urlconns = null; 17 URL url = null; 18 19 try{ 20 url = new URL(urlString); 21 }catch(Exception e){ 22 System.out.println(e); 23 System.exit(1); 24 } 25 26 try{ 27 urlconn = (HttpURLConnection)url.openConnection(); 28 }catch(Exception e){ 29 System.out.println(e); 30 System.exit(1); 31 } 32 33 try{ 34 urlconn.setRequestMethod("GET"); 35 }catch(Exception e){ 36 System.out.println(e); 37 System.exit(1); 38 } 39 40 try{ 41 urlconn.connect(); 42 }catch(Exception e){ 43 System.out.println(e); 44 System.exit(1); 45 } 46 47 if(urlString.indexOf("https") > -1){ 48 urlconns = (HttpsURLConnection)urlconn; 49 try{ 50 Certificate[] certs = urlconns.getServerCertificates(); 51 for(int i= 0; i < certs.length; i++){ 52 System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"); 53 System.out.println(); 54 System.out.println(certs[i].toString()); 55 } 56 }catch(Exception e){ 57 System.out.println(e); 58 System.exit(1); 59 } 60 } 61 62 System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"); 63 System.out.println(); 64 readPage(urlconn, "UTF-8"); 65 66 urlconn.disconnect(); 67 68 return; 69 } 70 71 public static void readPage(HttpURLConnection urlconn, 72 String charset){ 73 String line = null; 74 int i = 0; 75 boolean continueFlag = false; 76 77 try{ 78 BufferedReader reader = new BufferedReader( 79 new InputStreamReader(urlconn.getInputStream(),charset)); 80 81 i = 0; 82 continueFlag = true; 83 while (continueFlag){ 84 line = reader.readLine(); 85 if (line == null){ 86 break; 87 } 88 System.out.println(line); 89 } 90 }catch(IOException e){} 91 return; 92 } 93} 94
試したこと
OracleJDK 10.0.2でも同じです。
実行方法は
java HttpsTest https://www.google.co.jp/
です。
補足情報(FW/ツールのバージョンなど)
OpenJDKでもOracleJDKでもcacertsの一覧は以下の方法でできます。
keytool -list -cacerts > certs.txt
public keyのfingerprint(sha256)はEdgeでサイトを見て、鍵の証明書をみるのが一番楽だと思います。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/09 00:53
2018/08/09 05:00
2018/08/09 15:31
2018/08/10 02:31
2018/08/10 02:35