Czy jest możliwe skonfigurowanie obiektu WebServiceTemplate za pomocą magazynu kluczy Java?Korzystanie z obiektu WebServiceTemplate za pomocą magazynu kluczy
edit
Szukam sposobu, aby skonfigurować lokalizację magazynu kluczy w config wiosny
Czy jest możliwe skonfigurowanie obiektu WebServiceTemplate za pomocą magazynu kluczy Java?Korzystanie z obiektu WebServiceTemplate za pomocą magazynu kluczy
edit
Szukam sposobu, aby skonfigurować lokalizację magazynu kluczy w config wiosny
myślę, że można programowo załadować kluczy oparte użyciu KeyStore.Builder:
Może więc masz klasę, która ma szablon usługi sieciowej lub rozszerza ją, a następnie ustawia ścieżkę pliku magazynu kluczy w swojej konfiguracji wiosennej i czyni ją fasoli inizialing (@PostConstruct w Spring 3?), Która następnie ładuje magazyn kluczy.
File f = new File(keyStorePath);
KeyStore.Builder builder = KeyStore.Builder.newInstance("type",provider,file,protection);
KeyStore keystore = builder.getKeyStore();
Ok - faktycznie używać go z webservicetemplate myślę, musi być oparta na całym zwrotnego kluczy jako udokumentowane tutaj: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html#d0e4462
czy może za pomocą sprężyny org.springframework.ws.transport.http .HttpsUrlConnectionMessageSender, na którym można ustawić menedżera kluczy. To może być użyte przez twój webservicetemplate.
Trochę tak:
<bean id="template" class="org.springframework.ws.client.core.WebServiceTemplate">
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender">
<property name=""></property>
</bean>
</property>
</bean>
HTH
należy zainstalować certyfikaty potrzebne do kluczy (prawdopodobnie plików cacerts) z JDK używane do uruchamiania serwera aplikacji za pomocą polecenia keytool.
Oto przykład polecenie:
keytool -import -trustcacerts -alias someAlias -file someCert.crt -keystore yourKeystore
Edit: Na podstawie zaktualizowanego pytanie wygląda to może być to, czego szukasz: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html
opóźnienie w odpowiedzi na tego wątku ale i tak: Zauważ, że gdy masz kluczy i wszystkiego innego powołania, może być w szoku, aby stwierdzić, że WebServiceTemplate nie obsługuje połączeń HTTPS!
Upewnij się, że ustawiono właściwość messageSender
na org.springframework.ws.transport.http.CommonsHttpMessageSender
. Domyślna implementacja WebServiceMessageSender
nie obsługuje protokołu HTTPS.
Zakładam, że masz na myśli, że chcesz skonfigurować plik kluczy używany przez JSSE, ponieważ jest to szablon. JSSE zawsze będzie zawsze sprawdzać właściwości systemu javax.net.ssl.keyStore/javax.net.ssl.keyStorePassword, aby znaleźć plik kluczy. Możesz skonfigurować te właściwości na wiosnę za pomocą InitializingBean w ten sposób.
Należy zauważyć, że jeśli pracujesz na serwerze aplikacji, JSSE może być już skonfigurowana przed inicjalizacją Spring. W tym przypadku musisz użyć interfejsu serwera aplikacji do ustawienia magazynu kluczy - zwykle przy użyciu -D params w linii poleceń.
<bean id="jsseInitializer" lazy-init="false" class="com.blah.JsseInitializer">
<property name="trustStoreLocation" value="${pnet.batch.trustStore.location}"/>
<property name="trustStorePassword" value="${pnet.batch.trustStore.password}"/>
<property name="keyStoreLocation" value="${pnet.batch.keyStore.location}"/>
<property name="keyStorePassword" value="${pnet.batch.keyStore.password}"/>
</bean>
public class JsseInitializer implements InitializingBean {
private String trustStoreLocation;
private String trustStorePassword;
private String keyStoreLocation;
private String keyStorePassword;
public String getTrustStoreLocation() {
return trustStoreLocation;
}
public void setTrustStoreLocation(String trustStoreLocation) {
this.trustStoreLocation = trustStoreLocation;
}
public String getTrustStorePassword() {
return trustStorePassword;
}
public void setTrustStorePassword(String trustStorePassword) {
this.trustStorePassword = trustStorePassword;
}
public String getKeyStoreLocation() {
return keyStoreLocation;
}
public void setKeyStoreLocation(String keyStoreLocation) {
this.keyStoreLocation = keyStoreLocation;
}
public String getKeyStorePassword() {
return keyStorePassword;
}
public void setKeyStorePassword(String keyStorePassword) {
this.keyStorePassword = keyStorePassword;
}
public void afterPropertiesSet() throws Exception {
System.setProperty("javax.net.ssl.trustStore", trustStoreLocation);
System.setProperty("javax.net.ssl.trustStorePassword", trustStorePassword);
System.setProperty("javax.net.ssl.keyStore", keyStoreLocation);
System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword);
}
}
Odpowiedzi i pytania, które znalazłem w tym poście, utrzymywały mnie przez pewien czas w pogoni za ogonem.W końcu dostałem tę pracę dla aplikacji I wdrożonej do WebLogic 11g importując kluczy do kluczy na moim serwerze WebLogic:
C: \ bea \ jrockit_160_14_R27.6.5-32 \ jre \ bin> keytool -importkeystore -srckeystore \ workspace \ myProject \ webservice.keystore
Następnie zmieniłem konfigurację magazynu kluczy WebLogic tak, aby wskazywała na ten magazyn kluczy. Możesz to zrobić za pomocą konsoli WL: Środowisko-> Serwery-> AdminServer-> Keystores. Zmień magazynów kluczy: wybór do „Tożsamość klienta i klienta Trust”, a następnie wypełnić w ścieżce w Tożsamości (przychodzące), a Zaufanie (wychodzące) sekcje Twojej lokalizacji kluczy. W Windows XP mój był w \ Documents a Settings \ mój id \ .keystore.
Nie dostarczyłem hasła i uważam, że jest opcjonalne.
Zamieszczam tę odpowiedź po sześciu latach, ale szczerze mówiąc, nie ma ani jednego postu, na którym podano kompletne i zwięzłe rozwiązanie. Wszystko, czego potrzebujesz, to moduły spring-ws-core (2.1.4.RELEASE +) i spring-we-security (2.2.4.RELEASE +). Następnym krokiem jest skonfigurowanie niestandardowego magazynu kluczy i magazynu zaufanych certyfikatów jako fasoli, a następnie wprowadzenie ich do szablonu usługi WWW w konfiguracji wiosna.
<bean id="myKeyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
\t <property name="location" value="file:/tmp/config/my-keystore.jks"/>
\t <property name="password" value="password"/>
</bean>
<bean id="myTrustStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
\t <property name="location" value="file:/tmp/config/my-truststore.jks"/>
\t <property name="password" value="different_password"/>
</bean>
<bean id="template" class="org.springframework.ws.client.core.WebServiceTemplate">
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.HttpsUrlConnectionMessageSender">
<property name="trustManagers">
\t \t <bean class="org.springframework.ws.soap.security.support.TrustManagersFactoryBean">
\t \t \t <property name="keyStore" ref="mytrustStore" />
\t \t </bean>
\t </property>
\t <property name="keyManagers">
\t \t <bean class="org.springframework.ws.soap.security.support.KeyManagersFactoryBean">
\t \t \t <property name="keyStore" ref="myKeyStore" />
\t \t \t <property name="password" value="password" />
\t \t </bean>
\t </property>
</bean>
</property>
</bean>
W Summery nie trzeba pisać żadnego kodu, sprawa stosowanie można łatwo osiągnąć za pomocą sprężyny config.
@Taylor L - Dzięki, ale tak naprawdę szukam sposobu na skonfigurowanie lokalizacji magazynu kluczy wiosną. Zaktualizuję moje pytanie, aby to odzwierciedlić. –
Spójrz na to: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html –
L - Ta strona jest dobrym referencją. Ale w jaki sposób powinienem podłączyć WebServiceTemplate z magazynem kluczy ... –