JavaでSSLチェッカーを作成する上で参考になるチュートリアル、サイト、および書籍はありますか?私はここにあるものをしようとしています:http://www.sslshopper.com/ssl-checker.html。 自己署名付き証明書を作成したり、キーストアを使用しようとしていません。有効なSSL証明書が存在するかどうかを判断し、Certのホスト名が入力された名前と一致するかどうかを判断し、このCertが期限切れになる時期を判断する必要があります。私はこのトピックを捜したが、「Javaを使ってSSL買い物客を作る方法」は私には何ももたらさず、私の他の検索は自己署名入りの証明書を作成する方法についてのリンクだけをもたらした。どんな助けでも大歓迎です。あなたは何ができるかJavaを使用したSSLチェッカーの作成
答えて
あなたはSSLコンテキストを初期化し、必要なすべてのチェックを行うためにTrustManagers
をオーバーライドする必要があります例えばApache's HttpClient
の上に独自のチェッカーを実装しています。
ホスト名検証は、ライブラリによって自動的に実行されます。
など。かかわらず、それはだかどうかの、手動で検証を行うために、最初にサーバー証明書を取得するには
SSLSocketFactory sf = new SSLSocketFactory(
SSLContext.getInstance("TLS"),
SSLSocketFactory.STRICT_HOSTNAME_VERIFIER);
:ホスト名が証明書の情報と一致しない場合、次の例外をスローする取扱いSSLソケットを設定します有効であるかどうかを確認するには、証明書の確認を無効にした後にSSLSocket
で接続するのが最も簡単です。
何かを経由することができますSSLContext
を作成します。
SSLContext sslContext = SSLContext.getInstance("TLS");
X509TrustManager passthroughTrustManager = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
sslContext.init(null, new TrustManager[] { passthroughTrustManager },
null);
(注記:内部テスト証明書を使用する方法を探している人々のために、私はちょうど、カリフォルニア州ではなく、チェックを無効にする独自のテストを構築するお勧めしますそれらのダミーチェックが誤って生産コードに残っている場合や、テストがより現実的になるため)。
ソケットを作成して明示的に接続して起動します(実際にフォームを読むつもりはないのでそれ):
SSLSocketFactory ssf = sslContext.getSocketFactory();
SSLSocket socket = (SSLSocket) ssf.createSocket(
"the.host.name", 443);
socket.startHandshake();
ピア証明書チェーンを取得します。最初の項目は実際のサーバー証明書です。
X509Certificate[] peerCertificates = (X509Certificate[]) socket
.getSession().getPeerCertificates();
デフォルト値に基づいてX509TrustManager
を構築し、デフォルトのトラストアンカー(デフォルトの信頼できるCA証明書)に対して検証したい場合(これは事実上無効になっ上記の何passthroughTrustManager
です):
// By default on Oracle JRE, algorithm is PKIX
TrustManagerFactory tmf = TrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm());
// 'null' will initialise the tmf with the default CA certs installed
// with the JRE.
tmf.init((KeyStore) null);
X509TrustManager tm = (X509TrustManager) tmf.getTrustManagers()[0];
証明書が現在有効であるかどうか、信頼できるアンカーに対して検証されているかどうか、および正しい拡張子がRFC 3280になっているかどうかを確認します。
try {
// Assuming RSA key here.
tm.checkServerTrusted(peerCertificates, "RSA");
} catch (CertificateException e) {
// Here you may check which subclass of CertificateException to know what the error is.
}
上記はすべてJSSE APIを使用しています。
また、PKIXの詳細を詳しく調べる場合は、Java Certification Path API(JSSEで使用されています)を使用できます。
(有効な証明書のみを使用したい場合は、最初にSSLContext sslContext = SSLContext.getDefault()
を使用してソケットを作成し、ハンドシェイクしてください。)
直接サーバ証明書を取得するには、これを使用することができます:
X509Certificate serverCert = peerCertificates[0];
X509Certificate
は、日付と様々な拡張については、多くの方法があります。例えば:
Date expirationDate = serverCert.getNotAfter();
ホスト名の検証は、RFC 6125(または少なくともRFC 2818)に従うべきです。つまり、接続先のホスト名が主体別名(SAN)のDNSエントリの1つであるかどうかを確認します。それに失敗した場合は、ホスト名が証明書のCN RDNにあるかどうかを確認してください(このためには、Subject DNをRDNに分割する必要があります)。また、this discussion (on the specific case of using IP addresses)に興味があります。
どれが「手動」確認をどれだけ行いたいかによって異なります。 APIドキュメントに加えて、いくつかの仕様(RFC 5280/RFC 3280およびRFC 6125/RFC 2818以上)があります。
Security.SE上のこの質問はまた、関心のあるべき:
- What data should I validate when validating X.509 certificates using Java?
- これを実行しようとしたとき、私はnonconvertible種類を取得How are possible uses for X.509 (SSL) certificates denoted?
- 1. Javaコード使用チェッカー
- 2. Java - SSLサーバーの作成
- 3. SSLを使用したJava JMXクライアント
- 4. Javaを使用したPDF作成
- 5. JavaでのSSL接続の作成
- 6. Clangスタティック・アナライザーのカスタム・チェッカーの作成
- 7. Truststoreを使用しないJava SSL
- 8. タプルプロップ型チェッカーの作成方法は?
- 9. java用のPHPを使用したWebサービス(XML)の作成
- 10. PlayWS - マテリアライザーを使用したJavaを使用したWSClientの作成
- 11. エンタープライズアドインの作成Javaを使用して
- 12. Javaクライアントを使用したSSL証明書の検証
- 13. ウィンドウに開いたSSLを使用して独自のCAを作成する
- 14. SSL-ConfigまたはSSLContextを使用しますか?アッカでHTTP SSL Javaは
- 15. 構成チェッカー
- 16. symfony3構成チェッカー
- 17. eclipseを使用したSSL
- 18. SSLを使用したモバイルトラッキング
- 19. PHPでオープンSSLを使用してhttpsウェブサイトを作成
- 20. Javaの在庫チェッカーは法
- 21. JavaアプリケーションとSSLを使用したWebサービスクライアント
- 22. Java JNI:CからのJNIを使用したスイングウィンドウの作成
- 23. Javaを使用したConfluence Via Rest APIのページの作成
- 24. Java APIを使用したHbaseでのテーブルの作成
- 25. MarklogicのJAVA APIを使用した検索の作成
- 26. JavaとWebモジュールを使用したプロジェクトの作成
- 27. Javaプログラムを使用したOracleカーソルの作成
- 28. Java Notes API:ドミノライブラリを使用したクライアントセッションの作成
- 29. graql Java APIを使用したクエリの作成
- 30. Java 1.8とSpark2.2を使用したSparkSessionの作成
:X509Certificateに[] peerCertificates =(X509Certificateの[ ]))socket.getSession()。getPeerCertificates(); – W3B5T4R
私はOraclesのサイトから上記の例を試しても、 "inconvertible types"を取得し続けることさえありました – W3B5T4R
私はimport javax.security.cert.X509Certificateを使用していました。 import java.security.cert.X509Certificateの代わりに。 – W3B5T4R