2011-06-30 18 views
9

Tôi đang cố gắng thiết lập SSL trong bản cài đặt Tomcat 6 cục bộ của mình. Đối với điều này, tôi theo quan chức này How-To làm như sau:Định dạng kho khóa không hợp lệ với SSL trong Tomcat 6

$JAVA_HOME/bin/keytool -genkey -v -keyalg RSA -alias 
      tomcat -keypass changeit -storepass changeit 
$JAVA_HOME/bin/keytool -export -alias tomcat -storepass 
      changeit -file /root/server.crt 

Sau đó thay đổi $ CATALINA_BASE/conf/server.xml, trong bình luận này:

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" 
      maxThreads="150" scheme="https" secure="true" 
      clientAuth="false" sslProtocol="TLS" 
      keystoreFile="/root/.keystore" keystorePass="changeit" /> 

Sau khi khởi động Tomcat, tôi có được điều này Ngoại lệ:

INFO: Initializing Coyote HTTP/1.1 on http-8080 
30.06.2011 10:15:24 org.apache.tomcat.util.net.jsse.JSSESocketFactory getStore 
SCHWERWIEGEND: Failed to load keystore type JKS with path /root/.keystore 
due to Invalid keystore format 
java.io.IOException: Invalid keystore format 
     at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633) 
     at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38) 
     at java.security.KeyStore.load(KeyStore.java:1185) 

Khi tôi nhìn vào keystore với keytool -list tôi nhận được

[email protected]:~# $JAVA_HOME/bin/keytool -list 
Enter key store password: changeit 
Key store type: gkr 
Key store provider: GNU-CRYPTO 

Key store contains 1 entry(ies) 

Alias name: tomcat 
Creation timestamp: Donnerstag, 30. Juni 2011 - 10:13:40 MESZ 
Entry type: key-entry 
Certificate fingerprint (MD5): 6A:B9:...C:89:1C 

Rõ ràng, các loại kho khóa khác nhau. Làm cách nào để thay đổi loại và điều này có khắc phục được sự cố của tôi không? Cảm ơn bạn!

Trả lời

13

Dường như keytool bạn đang sử dụng GNU implementation, không phải là một từ Oracle/Sun hoặc OpenJDK. Từ đầu ra của keytool -list, nó tạo ra một loại cửa hàng gkr, là GNU Keyring Store.

Tôi không chắc liệu Apache Tomcat chạy của bạn có sử dụng OpenJDK hay Sun/Oracle JRE hay không, trong trường hợp này định dạng này sẽ không được hỗ trợ mà không có nhà cung cấp bảo mật bổ sung.

Nếu bạn chạy Apache Tomcat với một JRE GNU hỗ trợ gkr (hoặc ít nhất là một JRE mà bạn đã thêm một nhà cung cấp an ninh có hỗ trợ gkr), bạn có thể thử keystoreType="gkr" trong cấu hình <Connector /> của bạn. Tuy nhiên, cách dễ nhất có thể là sử dụng keytool như được cung cấp bởi Oracle hoặc OpenJDK và sử dụng JKS storetype (đây sẽ là loại mặc định nếu bạn chạy Apache Tomcat với OpenJDK hoặc Sun/Oracle JRE). Nó có thể được cài đặt với JRE của bạn nhưng nó không giống như $JAVA_HOME bạn đang sử dụng điểm đến một Oracle hoặc OpenJDK JAVA_HOME. Một số bản phân phối Linux có cơ chế cài đặt nhiều JRE và định cấu hình các liên kết (update-alternatives trong họ Debian/Ubuntu).

(Là một phụ lưu ý, nó thường không được khuyến khích để chạy Apache Tomcat như là người chủ, mà bạn dường như đang làm từ $HOME/.keystore/root/.keystore trong ví dụ của bạn.)

+0

Cảm ơn bạn rất nhiều vì câu trả lời của bạn :-) Có một số câu hỏi phụ nhỏ ^^ mà người dùng nên chạy Tomcat? Làm thế nào để biết keytool-stuff này? Đây sẽ là điều cuối cùng để suy nghĩ rằng có rất nhiều phiên bản khác nhau trên máy tính của tôi ?! Và cuối cùng: tôi đã tạo ra một .keystore và một server.crt với các lệnh được đề cập. Tomcat bắt đầu hoàn toàn, nhưng trình duyệt vẫn đề cập rằng chứng chỉ không đáng tin cậy ... Tôi sẽ tạo một tiền thưởng để cung cấp cho bạn thêm một số điểm :-) – strauberry

+1

Để định cấu hình nhiều cài đặt Java của bạn, hãy xem [cập nhật-java-lựa chọn thay thế] (http://wiki.debian.org/Java/Sun). Có vẻ như bạn đã cài đặt Tomcat bằng gói Debian, vì vậy người dùng 'tomcat' hoặc' tomcat6' có thể đã được tạo. Có một tập lệnh '/ etc/init.d/tomcat6' sẽ bắt đầu/dừng Tomcat theo người dùng này cho bạn. '/ usr/share/doc/tomcat6/README.Debian.gz' chắc chắn sẽ có thêm thông tin về điều này. – Bruno

+0

Về chứng chỉ máy chủ, vì nó tự ký, bạn cần phải nhập thủ công trên trình duyệt bạn đang sử dụng: thêm ngoại lệ bằng tay (bạn có thể xác minh nó khớp với '.crt' bạn đã phát hành: bạn có thể xem xét nó sử dụng 'openssl x509 -text -noout -in server.crt' chẳng hạn), hoặc nhập trực tiếp tập tin' server.crt' vào trình duyệt của bạn. – Bruno

1

Như Bruno nói, tôi đã sử dụng "sai " công cụ quan trọng!

Có những keytools trên cài đặt Debian 6 tôi

[email protected]:~# locate keytool 
/etc/alternatives/keytool 
/etc/alternatives/keytool.1.gz 
/root/glassfish3/jdk/bin/keytool 
/root/glassfish3/jdk/jre/bin/keytool 
/root/glassfish3/jdk/man/ja_JP.eucJP/man1/keytool.1 
/root/glassfish3/jdk/man/man1/keytool.1 
/root/glassfish3/mq/bin/imqkeytool 
/root/glassfish3/mq/bin/imqkeytool.exe 
/usr/bin/gkeytool 
/usr/bin/gkeytool-4.4 
/usr/bin/keytool 
/usr/bin/jre1.6.0_25/bin/keytool 
/usr/bin/jre1.6.0_25/man/ja_JP.eucJP/man1/keytool.1 
/usr/bin/jre1.6.0_25/man/man1/keytool.1 
/usr/lib/jvm/java-1.5.0-gcj-4.4/bin/keytool 
/usr/lib/jvm/java-1.5.0-gcj-4.4/jre/bin/keytool 
/usr/lib/jvm/java-1.5.0-gcj-4.4/man/man1/keytool.1.gz 
/usr/lib/jvm/java-6-sun-1.6.0.24/bin/keytool 
/usr/lib/jvm/java-6-sun-1.6.0.24/jre/bin/keytool 
/usr/lib/jvm/java-6-sun-1.6.0.24/jre/man/ja/man1/keytool.1.gz 
/usr/lib/jvm/java-6-sun-1.6.0.24/jre/man/man1/keytool.1.gz 
/usr/lib/jvm/java-6-sun-1.6.0.24/man/ja/man1/keytool.1.gz 
/usr/lib/jvm/java-6-sun-1.6.0.24/man/man1/keytool.1.gz 
/usr/share/man/man1/gkeytool-4.4.1.gz 
/usr/share/man/man1/gkeytool.1.gz 
/usr/share/man/man1/keytool.1.gz 
/var/lib/dpkg/alternatives/keytool 
[email protected]:~# echo $JAVA_HOME 
/usr 

Bây giờ tôi sử dụng

/usr/lib/jvm/java-6-sun-1.6.0.24/bin/keytool -genkey -v -keyalg RSA -alias tomcat 
-keypass changeit -storepass changeit 

Để tạo tệp keystore-. Tomcat bắt đầu mà không có bất kỳ vấn đề!

0

Nếu bạn sử dụng jvm GNU và công cụ khóa, bạn có thể thêm các tùy chọn sau vào đầu nối Tomcat trong máy chủ .xml để cho nó hoạt động: keystoreType="gkr" algorithm="JessieX509"

Thuật toán được nêu tại here

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