ホーム>source

AKS plataformにマイクロサービスを展開しており、このマイクロサービスはSSL証明書を使用する外部APIに接続する必要があります。 Javaキーストアを使用せずにSSL証明書を構成する方法があるとしたら、私のプロジェクトは、SpringブートとWebFluxを使用してJava言語で開発されています。 どのようにjksファイルとWebfluxを使用できるが、機能しない例を見つけました。

次のコードを使用してSslContextを生成します。

<前>ウィズウィズ

そして、次を使用してWebClientを生成します。

<前>ウィズウィズ

よろしくお願いします。 よろしく。

public SslContext getSslContext(){ SslContext sslContext; try { KeyStore ks = KeyStore.getInstance("JKS"); try (InputStream is = getClass().getResourceAsStream("/my- truststore.jks")) { ks.load(is, "truststore-password".toCharArray()); } X509Certificate[] trusted = Collections.list(ks.aliases()).stream().map(alias -> { try { return (X509Certificate) ks.getCertificate(alias); } catch (KeyStoreException e) { throw new RuntimeException(e); } }).toArray(X509Certificate[]::new); sslContext = SslContextBuilder.forClient().trustManager(trusted).build(); } catch (GeneralSecurityException | IOException e) { throw new RuntimeException(e); } }
あなたの答え
  • 解決した方法 # 1

    まあ、何日か研究した結果、Java KeyStore(JKS)を使用せずに証明書を使用する方法を見つけました。このため、PEM形式の証明書が必要です。この証明書をプロパティとしてパラメーターファイルにコピーし、直接呼び出します。

    <前>ウィズウィズ

    この後、要求を出し、必要な応答を得ることができます。

    public class SslConfig { @Value("${ocp.http-client.certificate}") private String certificate; private final static String certificateType = "X.509"; private final static String alias = "root"; private static SslContext sslContext; public WebClient getSslWebClient (){ try { sslContext = getSslContext(); } catch (Exception e) { e.printStackTrace(); } SslContext finalSslContext = sslContext; TcpClient tcpClient = TcpClient.create().secure(sslContextSpec -> sslContextSpec.sslContext(finalSslContext)); HttpClient httpClient = HttpClient.from(tcpClient); ClientHttpConnector httpConnector = new ReactorClientHttpConnector(httpClient); return WebClient.builder().clientConnector(httpConnector).build(); } //Se configura el contexto sobre el cual se trabajara la comunicacion SSL public SslContext getSslContext(){ try { ByteArrayInputStream is = new ByteArrayInputStream(certificate.getBytes()); final KeyStore keyStore = readKeyStore(is); X509Certificate[] trusted = Collections.list(keyStore.aliases()).stream().map(alias -> { try { return (X509Certificate) keyStore.getCertificate(alias); } catch (KeyStoreException e) { System.out.println(e.getMessage()); throw new RuntimeException(e); } }).toArray(X509Certificate[]::new); sslContext = SslContextBuilder.forClient().trustManager(trusted).build(); }catch (GeneralSecurityException | SSLException e ){ System.out.println(e.getMessage()); throw new RuntimeException(e); } catch (IOException e) { e.printStackTrace(); } return sslContext; } private static KeyStore readKeyStore(InputStream is) throws KeyStoreException, CertificateException, IOException, NoSuchAlgorithmException { KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); ks.load(null, null); CertificateFactory cf = CertificateFactory.getInstance(certificateType); Certificate cert = null; while (is.available() > 0) { cert = cf.generateCertificate(is); } ks.setCertificateEntry(alias, cert); return ks; } }

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ java - NoClassDefFoundError:org/testng/TestNG