2011-11-25 33 views
5

Vì vậy, tôi đang gặp một chút vấn đề ở đây với các wsdls và chọn nhiều chứng chỉ trong java. Ví dụ, một thẻ thông minh có nhiều chứng chỉ trên đó, để ký, mã hóa, nhận dạng. Tôi có một WSDL mà tạo ra các mã cho các kết nối khách hàng auth nhưng như xa như tôi có thể nói, bạn cung cấp cho wsdl một đường dẫn đến keystore bằng cách thiết lập tài sản, như thế nàyXác thực ứng dụng khách WSDL và nhiều Certs

System.setProperty("javax.net.ssl.keyStore", 
    keyStore); 
    System.setProperty("javax.net.ssl.keyStorePassword", 
    keyStorePassword); 

Tôi đang theo tutorial này . Hiện tại, đối với nhiều chứng chỉ trong kho khóa, như trong thẻ thông minh, điều này thể hiện sự cố vì không có cách nào để chỉ định loại chứng chỉ bạn muốn sử dụng trên thẻ thông minh đó. Có vẻ như wsdl chọn cert đầu tiên trong kho khóa, có thể là chứng chỉ sai để xác thực.

Câu hỏi của tôi là 2 lần:

  1. Có cách nào khác hơn là làm một System.setProperty để nói với wsdl mà giấy chứng nhận sử dụng không? Tôi có thể làm gì để chỉ định chứng chỉ nào vì hầu hết mã được tạo bởi wsdl bằng cách sử dụng wsconsume?

  2. Chỉ System.setProperty() chỉ cho phép bạn chỉ định đường dẫn. Có cách nào để chỉ định một đối tượng không? Cách tôi nhận được giấy chứng nhận tắt của smartcard là bằng cách sử dụng lớp SunPKCS11 (như được tìm thấy here). Tuy nhiên, điều này trả về cho tôi một đối tượng keystore, và theo như tôi biết System.setProperty() muốn một đường dẫn.

Cảm ơn sự giúp đỡ của bạn!

Trả lời

1

Cuối cùng tôi đã tìm thấy câu trả lời cho câu hỏi của mình. Hãy nhớ rằng tôi đang sử dụng CXF.

Vì vậy, khi tôi gọi wsdl2java trên wsdl, tôi nhận được một loạt các mã được tạo. Có hai phần đặc biệt là xử lý ủy quyền aptly tên Authorization và AuthorizationService. Trong mã của tôi, để gọi những liên kết này, tôi thực hiện như sau

AuthorizationService authSvc = new AuthorizationService(); 
Authorization authWs = authSvc.getAuthorizationPort(); 

Tại thời điểm này, bạn sẽ cần phải xây dựng keyManager và trustmanager của riêng bạn bằng cách tạo ra một keystore mới từ chứng chọn. Một nơi tốt để bắt đầu là this

Sau đó, bạn cần phải xây dựng TLSClientParameters

TLSClientParameters params = new TLSClientParameters(); 
params.setKeyManagers(keyManagers); 
params.setTrustManagers(trustManagers); 

Sau đó tạo HTTPConduit của bạn.

HTTPConduit conduit = (HTTPConduit) ClientProxy.getClient(authWs).getConduit(); 
conduit.setTlsClientParameters(params); 

Và sau đó bạn có thể sử dụng dịch vụ web của mình với chứng chỉ mà người dùng đã chọn.

Các vấn đề liên quan