リモートサーバーとのHttps接続を作成してから、証明書を取得して確認する必要があります。
私は接続をうまく確立しました:
_try {
url = new URL(this.SERVER_URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
HttpsURLConnection secured = (HttpsURLConnection) con;
secured.connect();
}
_
しかし、getServerCertificateChain()
メソッドはHttpsURLConnection
型では定義されていないようです。
それでは、サーバー証明書チェーンを取得するにはどうすればよいですか?私の理解では、getServerCertificateChain()
は_X509Certificate
_オブジェクトの配列を返す必要があり、このクラスには、証明書の問い合わせに使用できるメソッドがあることです。
私はそれを確認する必要があります:
私は道に迷っていて、どんな助けにも感謝します!
必要なメソッドは getServerCertificates であり、getServerCertificateChain
ではありません。ニースのサンプルコード here がいくつかあります。
[〜#〜]編集[〜#〜]
自分のサンプルコードをいくつか追加しました。あなたのための良い出発点。 HttpsURLConnection および X509Certificate のJavadocを確認することを忘れないでください。
import Java.net.URL;
import Java.security.cert.Certificate;
import Java.security.cert.CertificateExpiredException;
import Java.security.cert.X509Certificate;
import javax.net.ssl.HttpsURLConnection;
public class TestSecuredConnection {
/**
* @param args
*/
public static void main(String[] args) {
TestSecuredConnection tester = new TestSecuredConnection();
try {
tester.testConnectionTo("https://www.google.com");
} catch (Exception e) {
e.printStackTrace();
}
}
public TestSecuredConnection() {
super();
}
public void testConnectionTo(String aURL) throws Exception {
URL destinationURL = new URL(aURL);
HttpsURLConnection conn = (HttpsURLConnection) destinationURL
.openConnection();
conn.connect();
Certificate[] certs = conn.getServerCertificates();
for (Certificate cert : certs) {
System.out.println("Certificate is: " + cert);
if(cert instanceof X509Certificate) {
try {
( (X509Certificate) cert).checkValidity();
System.out.println("Certificate is active for current date");
} catch(CertificateExpiredException cee) {
System.out.println("Certificate is expired");
}
}
}
}
}
すばやくグーグルすると、BouncyCastleを使用したこの例が表示されます。質問に答えるほうがいいと思います。 http://www.nakov.com/blog/2009/12/01/x509-certificate-validation-in-Java-build-and-verify-chain-and-verify-clr-with-bouncy-お城/
Kirbyとarulraj.netによって言及されたこのサンプルコードは、2011年にApache CXFから削除され、OCSPをサポートしませんでした。 Apache PDFBox プロジェクトは、このコードを「復活」させ、OCSPサポートと、元のコードに欠けていたその他の機能を追加しました。 CRL署名チェック。リリース2.0.13以降、改善されたソースコードは、CertificateVerifierクラスのサンプルサブプロジェクトで使用できます。 オンラインで利用可能 にも改善が加えられています。
コードは完全であると主張しておらず、ルートが信頼できるかどうかはまだチェックしていません。開発はJIRAの課題 PDFBOX-3017 で追跡されます。