当前位置: 首页 > 知识库问答 >
问题:

如何在带证书的spring boot中调用https webserivce

慕光霁
2023-03-14
@Configuration
public class WSClient {
   @Bean(name = "PaymentWebService")
   public PaymentWebService PaymentWebServiceCLient() throws MalformedURLException {
          JaxWsProxyFactoryBean factory;
          factory = new JaxWsProxyFactoryBean();
          factory.setServiceClass(PaymentWebService.class);
          factory.setAddress("http://localhost:8080/soap-api/merchantAuth_1.0");
          return (PaymentWebService) factory.create();
   }
}

共有1个答案

易瀚漠
2023-03-14

1.获得您想要的证书webservice。

2.使用此验证创建密钥库。

3.带有密钥库的SSL配置客户端:

@Configuration
public class WebServiceClient {

@Inject
private PaymentProperties paymentProperties;

@Autowired
private ResourceLoader resourceLoader;

@Bean(name = "PaymentWebService")
public PaymentWebService PaymentWebServiceCLient() throws MalformedURLException {

    JaxWsProxyFactoryBean factory;
    factory = new JaxWsProxyFactoryBean();
    factory.setServiceClass(PaymentWebService.class);
    // factory.setAddress("http://localhost:8080/ws/merchantAuth_1.0");
    factory.setAddress(paymentProperties.getWsPublicUrl());

    PaymentWebService service = (PaymentWebService) factory.create();
    try {
        final Client client = ClientProxy.getClient(service);
        setupSsl((HTTPConduit) ClientProxy.getClient(service).getConduit());
    } catch (Exception e) {
    }
    return service;
}

private void setupSsl(HTTPConduit httpConduit) throws Exception {

    final TLSClientParameters tlsCP = new TLSClientParameters();

    final String keyStoreLoc = paymentProperties.getSsl().getKeyStore();
    final String keyPassword = paymentProperties.getSsl().getKeyStorePassword();
    final String keystoreType = paymentProperties.getSsl().getKeyStoreType();

    final KeyStore keyStore = KeyStore.getInstance(keystoreType);
    Resource resource1 = resourceLoader.getResource(keyStoreLoc);
    keyStore.load(resource1.getInputStream(), keyPassword.toCharArray());
    final KeyManager[] myKeyManagers = getKeyManagers(keyStore, keyPassword);
    tlsCP.setKeyManagers(myKeyManagers);

    final String trustStoreLoc = paymentProperties.getSsl().getTrustStore();
    final String trustStorePassword = paymentProperties.getSsl().getTrustStorePassword();
    final String trustStoreType = paymentProperties.getSsl().getTrustStoreType();

    final KeyStore trustStore = KeyStore.getInstance(trustStoreType);
    Resource resource2 = resourceLoader.getResource(trustStoreLoc);
    trustStore.load(resource2.getInputStream(), trustStorePassword.toCharArray());
    final TrustManager[] myTrustStoreKeyManagers = getTrustManagers(trustStore);
    tlsCP.setTrustManagers(myTrustStoreKeyManagers);

    httpConduit.setTlsClientParameters(tlsCP);
}

private static TrustManager[] getTrustManagers(KeyStore trustStore)
        throws NoSuchAlgorithmException, KeyStoreException {
    String alg = KeyManagerFactory.getDefaultAlgorithm();
    TrustManagerFactory fac = TrustManagerFactory.getInstance(alg);
    fac.init(trustStore);
    return fac.getTrustManagers();
}

private static KeyManager[] getKeyManagers(KeyStore keyStore, String keyPassword)
        throws GeneralSecurityException, IOException {
    String alg = KeyManagerFactory.getDefaultAlgorithm();
    char[] keyPass = keyPassword != null ? keyPassword.toCharArray() : null;
    KeyManagerFactory fac = KeyManagerFactory.getInstance(alg);
    fac.init(keyStore, keyPass);
    return fac.getKeyManagers();
}
}
 类似资料:
  • 如何使用java中的Rest-Assured对需要证书的endpoint进行GET调用。我有格式的证书。在PEM文件中有证书和私钥。

  • 问题内容: 注意:这旨在作为常见问题的规范答案。 我有一个带有字段()的Spring 类(),但是该字段是我尝试使用它时所用的。日志显示同时创建了bean和bean,但是每当尝试在服务bean上调用方法时,我都会得到一个。Spring为什么不自动接线该领域? 控制器类: 服务等级: 应该自动连接的服务bean,但不是: 当我尝试时,出现以下异常: 问题答案: 带注释的字段是因为Spring不知道您

  • 我不必去修复一些不起作用的东西,但我试着去理解为什么有些东西会起作用,因为我认为它不应该起作用。 我使用的是OpenJDK11/Ubuntu 16.04。我打了个HTTPS电话。SSL握手成功。 证书链包含3个证书: 当然是API证书。由中间CA发行(issuer=CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US) 中级CA证书。由根C

  • 问题内容: 我想用PyCrypto在python中加密一些数据。 但是使用时出现错误: 密钥是使用以下命令生成的: 代码是: 问题答案: PyCrypto不支持X.509证书。您必须首先使用以下命令提取公钥: 然后,您可以在上使用。 如果您不想或不能使用openssl,则可以获取PEM X.509证书,并使用纯Python进行认证,如下所示:

  • 我试图使用证书对本地托管的Kubernetes集群(V1.6.4)进行身份验证。这是在使用Jenkins的Kubernetes插件的上下文中进行的。 > 将客户端证书转换为PKCS: 在Jenkins中,使用证书创建凭据 : :和上载文件 :(在证书创建过程中指定) null 2017年09月05日上午10:22:03 IO.fabric8.kubernetes.client.config try

  • 我必须使用证书调用服务器API,所以我已经将cer文件导入到密钥库中并完成编码,但仍然得到了javax.net.ssl.SSLHandShakeException:Sun.Security.Validator.ValidatoreXception:PKIX路径构建失败:Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目