Trong Ubuntu 18.04 , lỗi này có một nguyên nhân khác (JEP 229, chuyển từ jks
định dạng mặc định của kho khóa sang pkcs12
định dạng và tạo tệp trích dẫn Debian bằng cách sử dụng mặc định cho các tệp mới) và cách khắc phục :
# Ubuntu 18.04 and various Docker images such as openjdk:9-jdk throw exceptions when
# Java applications use SSL and HTTPS, because Java 9 changed a file format, if you
# create that file from scratch, like Debian / Ubuntu do.
#
# Before applying, run your application with the Java command line parameter
# java -Djavax.net.ssl.trustStorePassword=changeit ...
# to verify that this workaround is relevant to your particular issue.
#
# The parameter by itself can be used as a workaround, as well.
# 0. First make yourself root with 'sudo bash'.
# 1. Save an empty JKS file with the default 'changeit' password for Java cacerts.
# Use 'printf' instead of 'echo' for Dockerfile RUN compatibility.
/usr/bin/printf '\xfe\xed\xfe\xed\x00\x00\x00\x02\x00\x00\x00\x00\xe2\x68\x6e\x45\xfb\x43\xdf\xa4\xd9\x92\xdd\x41\xce\xb6\xb2\x1c\x63\x30\xd7\x92' > /etc/ssl/certs/java/cacerts
# 2. Re-add all the CA certs into the previously empty file.
/var/lib/dpkg/info/ca-certificates-java.postinst configure
Trạng thái (2018-08-07) , lỗi đã được sửa trong Ubuntu Bionic LTS 18.04.1 và Ubuntu Cosmic 18.10.
🗹 Ubuntu 1770553: [SRU] backport ca-chứng-java từ vũ trụ (20180413ubuntu1)
🗹 Ubuntu 1769013: Xin merge ca-chứng-java 20180413 (chính) từ Debian không ổn định (chính)
🗹 Ubuntu 1739631: Fresh cài đặt với JDK 9 không thể sử dụng file cacerts pkcs12 tạo keystore
🗹 Docker-thư viện 145: hình ảnh 9-jdk có vấn đề về SSL
🗹 Debian 894979: ca-cert-java: không hoạt động với OpenJDK 9, các ứng dụng không thành công với UnlimitedAlerskymParameterException: tham số trustAnchors phải không trống
🗹 JDK-8044445: JEP 229: Tạo pkcs12 Keystores theo Mặc định
🖺 JEP 229: Tạo pkcs12 Keystores theo Mặc định
Nếu sự cố vẫn tiếp diễn sau cách giải quyết này, bạn có thể muốn đảm bảo rằng bạn thực sự đang chạy bản phân phối Java mà bạn vừa sửa.
$ which java
/usr/bin/java
Bạn có thể đặt các lựa chọn thay thế Java thành 'tự động' với:
$ sudo update-java-alternatives -a
update-alternatives: error: no alternatives for mozilla-javaplugin.so
Bạn có thể kiểm tra kỹ phiên bản Java bạn đang thực thi:
$ java --version
openjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)
Cũng có những cách giải quyết khác, nhưng những cách này có tác dụng phụ riêng sẽ cần bảo trì thêm trong tương lai, không phải trả bất cứ điều gì.
Cách giải quyết tốt nhất tiếp theo là thêm hàng
javax.net.ssl.trustStorePassword=changeit
đến các tập tin
/etc/java-9-openjdk/management/management.properties
/etc/java-11-openjdk/management/management.properties
cái nào tồn tại
Cách giải quyết ít vấn đề thứ ba là thay đổi giá trị của
keystore.type=pkcs12
đến
keystore.type=jks
trong các tập tin
/etc/java-9-openjdk/security/java.security
/etc/java-11-openjdk/security/java.security
Bất cứ điều gì tồn tại, và sau đó loại bỏ cacerts
tệp và tạo lại nó theo cách được mô tả trên hàng cuối cùng của tập lệnh giải pháp ở đầu bài.