2010-03-10 9 views

Odpowiedz

1

myślę, że można programowo załadować kluczy oparte użyciu KeyStore.Builder:

http://java.sun.com/j2se/1.5.0/docs/api/java/security/KeyStore.Builder.html#newInstance%28java.lang.String,%20java.security.Provider,%20java.io.File,%20java.security.KeyStore.ProtectionParameter%29

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

0

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

+0

@Taylor L - Dzięki, ale tak naprawdę szukam sposobu na skonfigurowanie lokalizacji magazynu kluczy wiosną. Zaktualizuję moje pytanie, aby to odzwierciedlić. –

+0

Spójrz na to: http://static.springsource.org/spring-ws/sites/1.5/reference/html/security.html –

+0

L - Ta strona jest dobrym referencją. Ale w jaki sposób powinienem podłączyć WebServiceTemplate z magazynem kluczy ... –

1

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.

1

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); 

    } 
} 
2

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.

9

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.