2009-10-12 40 views
6

Tôi thua lỗ vì tôi không phải là người Tomcat. Tôi cần sử dụng dịch vụ web của bên thứ ba và họ yêu cầu Xác thực ứng dụng qua SSL, vì vậy họ đã tạo và cấp cho tôi chứng chỉ SSL. Thật không may điều này là như xa như họ hỗ trợ nó và không thể cho tôi bất kỳ hướng nào về cách thực sự sử dụng nó. Tôi đang mắc kẹt bằng cách sử dụng bên thứ 3 này vì vậy thật không may tôi phải đưa lên với sự thiếu hỗ trợ của họ. Vì vậy, những gì tôi có là một ứng dụng Java mà một nhà cung cấp đang cung cấp cho chúng tôi (người dường như chưa bao giờ phải đối phó với điều này), một máy chủ ứng dụng Tomcat chạy 6.0.20 trên CentOS 5.3, và SSL cert từ lần thứ 3. buổi tiệc.Xác thực ứng dụng khách Tomcat bằng SSL

Tôi cần làm gì vào thời điểm này? Tất cả những gì tôi có thể tìm thấy trực tuyến là cách thiết lập kho khóa để ứng dụng của tôi có thể sử dụng Xác thực ứng dụng đối với những thứ kết nối với nó, không phải khi cần kết nối với người khác hoặc cách sử dụng SSL qua cổng 8443 (mà tôi biết làm thế nào để làm và đã thiết lập).

+0

Tôi có xu hướng đồng ý với nhà cung cấp dịch vụ web, dựa trên thông tin bạn đã cung cấp. Họ đã chọn sử dụng cơ chế xác thực được hỗ trợ rộng rãi, tiêu chuẩn. Họ không có kinh doanh (trừ khi bạn trả tiền cho họ để tham khảo ý kiến) cho bạn biết làm thế nào để * thực hiện * giao diện mà họ đã chỉ định. May mắn thay, vì họ đã chọn một tiêu chuẩn được sử dụng rộng rãi, bạn có nhiều tài nguyên mà bạn có thể biến (nhiều trong số đó — như StackOverflow — là miễn phí), và học một công nghệ có thể có lợi cho bạn trong các ngữ cảnh khác. – erickson

+0

Kẹp của tôi với chúng chạy sâu hơn chỉ là một vấn đề này. Chúng tôi không chỉ trả tiền để có quyền truy cập * đối với dịch vụ, nhưng chúng tôi cũng phải trả cho mỗi giao dịch, vì vậy tôi mong đợi ít nhất một chút trợ giúp (ngoài một vài tệp PDF mơ hồ hầu như không có chi tiết kỹ thuật trong đó) . Tất cả các nhà cung cấp dịch vụ bên thứ 3 khác của tôi ít nhất đưa ra cho tôi các ví dụ mã hoặc có thể chỉ cho tôi đúng hướng khi tôi có câu hỏi. – dragonmantank

Trả lời

3

Dưới đây là câu trả lời thực sự dài: http://java.sun.com/javase/6/docs/technotes/guides/security/jsse/JSSERefGuide.html

Không dùng từ ngữ của tôi cho nó, nhưng tôi tin rằng, như một khách hàng, khách hàng auth sẽ tự động được thực hiện khi máy chủ yêu cầu nó.

Nếu định cấu hình tomcat là câu hỏi, bạn đã đọc http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html chưa? Đặc biệt, lưu ý thuộc tính clientAuth của phần tử Connector.

+0

Vì vậy, tất cả những gì tôi phải làm là tạo một kho khóa (không sử dụng thuộc tính Port tôi đoán) và khi ứng dụng của tôi truy cập bên thứ 3 (thông qua SOAP), nó sẽ nhận yêu cầu xác thực SSL và gửi cùng khách hàng SSL tôi có? – dragonmantank

+0

Nếu họ cung cấp cho bạn chứng chỉ mà bạn phải sử dụng để kết nối với họ, họ cũng phải cung cấp cho bạn khóa riêng. Thông thường, bạn sẽ tạo cả hai, giữ khóa riêng và gửi cho họ một bản sao của chứng chỉ để đặt trên máy chủ của họ. Nhưng vâng, lấy khóa cá nhân và chứng chỉ đó vào kho khóa, lấy chứng chỉ cho máy chủ của họ vào một truststore và đưa chúng vào một SSLContext để tạo các ổ cắm ssl. –

1

Tôi không biết rằng đây là về cấu hình Tomcat, ngoài việc có thể chuyển các thuộc tính hệ thống cho ứng dụng web chạy trong Tomcat.

Nhà cung cấp ứng dụng web thực sự có thể cho bạn biết cách lấy kết nối máy khách từ phần mềm của họ để sử dụng chứng chỉ ứng dụng khách cụ thể khi thực hiện kết nối SSL với dịch vụ web từ xa. Ví dụ:

Ví dụ, họ có thể yêu cầu ứng dụng của họ triển khai KeyManager tùy chỉnh cho kết nối SSL có thể tra cứu chứng chỉ ứng dụng khách và khóa cá nhân từ vị trí có thể định cấu hình.

Nếu họ chưa thực hiện điều đó, có thể họ đang sử dụng Trình quản lý khóa SunX509 mặc định.

Đối với KeyManager mặc định, bạn có thể sử dụng keytool để tạo kho khóa chứa chứng chỉ ứng dụng khách và khóa cá nhân mà chứng chỉ mô tả. Sau đó, bạn có thể chỉ định lưu trữ khóa đó bằng các thông số hệ thống sau:

-Djavax.net.ssl.keyStore="/path/to/keystore" 
-Djavax.net.ssl.keyStorePassword="<password>" 

Bạn cần phải định cấu hình Tomcat để chuyển vào các thuộc tính này.

2

Cập nhật:

Hãy thử cách sau để cho phép xác thực khách hàng trong Tomcat.

Để làm cho tomcat tận dụng lợi thế của Xác thực ứng dụng khách, chúng tôi yêu cầu ba chứng chỉ. nghĩa là Chứng chỉ máy chủ cho Tomcat, Chứng chỉ ứng dụng khách cho trình duyệt và Chứng chỉ CA sẽ ký cả hai chứng chỉ được đề cập ở trên. Ở đây, tôi sẽ chỉ cách làm điều đó trong Windows.

Có hai cách.

1) Bạn phải có tệp CSR, tức là Yêu cầu ký chứng chỉ.Bạn có thể gửi cho Tổ chức phát hành chứng chỉ như Verisign hoặc Comodo hoặc nhiều người khác như họ. Họ sẽ cung cấp cho bạn chứng chỉ. Hoặc

2) Bạn có thể tạo Tổ chức phát hành chứng chỉ của riêng mình và ký giấy chứng nhận. Nhưng nó được khuyến khích để làm điều này cho chỉ sử dụng cá nhân.

Bạn nên cài đặt Java và OpenSSL để thực hiện các bước dưới đây.

Để tạo Yêu cầu ký chứng chỉ, bạn nên có khóa. Để tạo loại khóa lệnh sau trong CMD.

openssl genrsa -out Serverkey.key 1024

này sẽ tạo ra một tập tin "Serverkey.key". Kích thước khóa là 1024. Bạn có thể cung cấp cho nó theo yêu cầu của bạn.

Bây giờ, tạo tệp CSR với sự trợ giúp của lệnh sau.

openssl req -new -key Serverkey.key out ServerReq.csr -config /path/to/openssl.cnf

Khi bạn thực hiện lệnh này, bạn sẽ được yêu cầu cung cấp một số thông tin. Sau đó, bạn sẽ tìm thấy tệp CSR trong thư mục của mình. Bạn có thể gửi tệp này tới CA. Trong trường hợp, bạn đang làm điều này để sử dụng cá nhân của bạn, và bạn muốn có CA của riêng bạn, tạo ra một khóa và CSR cho CA của bạn với sự giúp đỡ của hai lệnh trên. Sau khi bạn có CSR cho CA, bạn có thể đăng nhập bằng khóa của CA với sự trợ giúp của lệnh sau.

openssl x509 -req -days 365 -in CAReq.csr -signkey CAKey.key out ca.crt

Khi bạn có chứng chỉ CA, bạn có thể sử dụng nó để ký giấy chứng nhận khác.

openssl x509 -req -days 365 -CA ca.crt -CAkey CAKey.key -CAcreateserial -in ServerReq.csr out server.crt

Bạn có thể sử dụng lệnh tương tự cho khách hàng giấy chứng nhận cũng.

Trình duyệt là khách hàng của chúng tôi tại đây, sẽ chấp nhận chứng chỉ định dạng P12. Định dạng P12 là một tệp chứa chứng chỉ của bạn cũng như khóa.

Để chuyển đổi CRT thành P12, hãy sử dụng lệnh sau.

openssl pkcs12 -Xuất -in server.crt -inkey ServerKey.key -chain -CAfile ca.crt out ServerCert.p12

Trong tomcat, có một truststore mà sẽ có của CA. chứng chỉ và một kho lưu trữ khác sẽ có khóa và chứng chỉ của máy chủ (tệp p12).

Để nhập chứng chỉ của CA vào kho tin cậy, hãy sử dụng lệnh sau.

keytool -import -alias CertAuth -keystore caCerts.jks -file CA.crt

Bạn có thể cung cấp bí danh như bất kỳ điều gì bạn muốn. Lưu ý mật khẩu mà bạn cung cấp khi được hỏi sau khi thực hiện lệnh trên. Chúng tôi sẽ sử dụng mật khẩu đó trong tệp server.xml. Tương tự áp dụng cho lệnh dưới đây.

Để nhập chứng chỉ định dạng p12 vào kho khóa, hãy sử dụng lệnh sau.

keytool -importkeystore -destkeystore tomcat.keystore -srckeystore -ServerCert.p12 -srcstoretype pkcs12 -alias 1

Bây giờ, thay đổi server.xml của tomcat như sau.

<Connector port="8443" 
      protocol="org.apache.coyote.http11.Http11NioProtocol" 
      SSLEnabled="true" scheme="https" secure="true" 
      truststoreFile="path/to/truststorefile" truststorePass="password" 
      keystoreFile="path/to/keystorefile" keystorePass="password" 
      clientAuth="true" sslProtocol="TLS" 
      /> 

Bây giờ, nhập chứng chỉ định dạng P12 của khách hàng vào trình duyệt. Sau đó, khởi động máy chủ tomcat và thử truy cập https://localhost:8443. Bạn có thể truy cập vào blog để biết phiên bản chi tiết của câu trả lời này. Hi vọng điêu nay co ich.

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