Hướng dẫn cách cài đặt chứng chỉ SSL trên Tomcat

keytool
. APR đơn giản hóa việc cài đặt SSL thành quy trình giống như Apache thông thường.Contents
Điều kiện tiên quyết
Đảm bảo rằng bạn đã phát hành và chuẩn bị các tệp chứng chỉ SSL đang hoạt động trước khi tiến hành cài đặt SSL. Bạn có thể tải xuống chứng chỉ đang hoạt động trực tiếp từ tài khoản của mình.
Nếu CSR được tạo bằng keytool trên máy chủ của bạn, bạn có thể thực hiện theo các bước cài đặt PKCS7 . Nếu bạn đã tạo CSR ở nơi khác và có Khóa riêng phù hợp, hãy sử dụng cài đặt dựa trên PKCS12 hoặc APR .
Quan trọng : Nếu bạn có các tệp chứng chỉ và khóa riêng , trước tiên bạn cần chuyển đổi chúng thành tệp PKCS # 12, trừ khi có APR được định cấu hình cùng với Tomcat của bạn. Sau khi các tệp được chuyển đổi, bạn có thể tiến hành các bước cài đặt PKCS # 12 tương ứng .
Kho khóa Java
PKCS # 7
Bước 1: Tải lên tệp SSL
Tải lên tệp chứng chỉ PKCS # 7 trên máy chủ. Sau đó, nhập nó bằng lệnh sau:
keytool -import -trustcacerts -alias tomcat -file certificate.p7b -keystore yourkeystore.jks
Ở đâu:
tomcat
là bí danh thực tế của kho khóa của bạncertificate.p7b
là tên / đường dẫn thực tế đến tệp chứng chỉ của bạnyourkeystore.jks
là tên / đường dẫn thực tế đến tệp kho khóa
Đảm bảo rằng tệp chứng chỉ có cùng bí danh được sử dụng để tạo kho khóa . Nếu không, lỗi “ Nhập không phải chứng chỉ X.509 ” có thể xảy ra.
Sau khi nhập thành công, bạn sẽ nhận được kết quả sau:
Certificate reply was installed in keystore
Bước 2: Chỉnh sửa cấu hình SSL
Trong bước tiếp theo, bạn sẽ cần phải sửa đổi trình kết nối cho cổng mặc định 8443 hoặc 443.
Việc sửa đổi phải được thực hiện trong ‘Tomcat installation directory’/conf/server.xml
tệp. Bạn có thể tìm thấy vị trí của thư mục chứa server.xml
tệp cấu hình bằng cách sử dụng lệnh này:
sudo find / -ipath '*tomcat*server.xml'
Rất có thể nó sẽ nằm trong /opt/tomcat/conf/server.xml
hoặc/etc/tomcat/server.xml
Dưới đây là ví dụ về trình kết nối JSSE cho cổng 443 sử dụng giao thức HTTP / 1.1 với TLS lên đến 1.3 được bật:
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443"
maxThreads="200"
scheme="https"
secure="true"
SSLEnabled="true"
keystoreFile="/opt/tomcat/ssl/yourkeystore.jks"
keystorePass="keystore_password"
clientAuth="false"
sslProtocol="TLS"/>
Ở đâu:
/opt/tomcat/ssl/yourkeystore.jks
là đường dẫn tuyệt đối và tên thực của tệp kho khóakeystore_password
là mật khẩu thực tế cho kho khóa của bạn
Bước 3: Áp dụng các thay đổi
Sau khi hoàn tất, vui lòng khởi động lại Tomcat để áp dụng các thay đổi. Nếu bạn không chắc chắn về các bước để tạo lại, vui lòng chuyển đến phần này để áp dụng các thay đổi và xác minh cài đặt SSL.
PEM
Cách cài đặt chứng chỉ SSL trên Tomcat thử thách nhất, nhưng vẫn phổ biến nhất là sử dụng chứng chỉ SSL có định dạng PEM riêng biệt.
Bước 1: Chuẩn bị các tập tin
Phương pháp này yêu cầu bạn lưu từng chứng chỉ trong các tệp riêng biệt:
- Chứng chỉ gốc CA.
- Chứng chỉ trung gian CA thứ hai (tùy chọn và có thể bị bỏ qua nếu gói CA của bạn chỉ chứa 1 chứng chỉ trung gian).
- Chứng chỉ trung gian CA.
- Chứng chỉ tổ chức cuối cho miền của bạn.
Thứ tự của chứng chỉ sẽ như sau đối với chứng chỉ PositiveSSL được sử dụng thường xuyên nhất :
keytool -import AAA Certificate Services
keytool -import USERTrust RSA Certification Authority
keytool -import Sectigo RSA Domain Validation Secure Server CA
keytool -import example.com.crt
Lưu ý: Bạn có thể tìm thêm các Gói CA tại đây .
Lưu ý: “Dịch vụ chứng chỉ AAA” chỉ được cài đặt nếu bạn chọn Gói CA chứa chứng chỉ được ký chéo.
Danh sách trên được sắp xếp theo thứ tự ngược lại có chủ đích vì đây là thứ tự chính xác mà các chứng chỉ sẽ được nhập vào kho khóa. Bạn có thể tải xuống các tệp chứng chỉ từ tài khoản Namecheap của mình cùng với gói CA. Đây là trang dành riêng với các liên kết tải xuống nếu bạn chỉ cần gói CA. Nó có thể hữu ích nếu bạn gặp phải lỗi “ keytool error: java.langException: Không thể thiết lập chuỗi từ trả lời ”.
Bước 2: Nhập tệp
Thực hiện theo các bước dưới đây theo thứ tự nhất định để nhập tệp đúng cách.
Nhập chứng chỉ gốc bằng cách chạy:
keytool -import -trustcacerts -alias root -file root.crt -keystore yourkeystore.jks
Ở đâu:
root
là bí danh của chứng chỉ gốc CA đã nhậproot.crt
là tên / đường dẫn thực tế của chứng chỉ gốc CA của bạnyourkeystore.jks
là tên / đường dẫn thực của tệp kho khóa
Lưu ý: Trong quá trình nhập chứng chỉ gốc CA, bạn có thể được nhắc với thông báo sau.
Certificate already exists in system-wide CA keystore under alias <aliasname>
Do you still want to add it to your own keystore? [no]:
Bỏ qua cảnh báo và xác nhận nhập chứng chỉ với việc gửiy
.
Nhập chứng chỉ trung gian thứ hai:
keytool -import -trustcacerts -alias intermediate2 -file intermediate_2.crt -keystore yourkeystore.jks
Ở đâu:
intermediate2
là bí danh của chứng chỉ CA trung gian thứ hai đã nhậpintermediate_2.crt
là tên / đường dẫn thực tế của chứng chỉ CA trung gian thứ hai của bạn
Nhập chứng chỉ trung gian đầu tiên:
keytool -import -trustcacerts -alias intermediate1 -file intermediate_1.crt -keystore yourkeystore.jks
Ở đâu:
intermediate1
là bí danh của chứng chỉ CA trung gian đầu tiên được nhậpintermediate_1.crt
là tên / đường dẫn thực tế của chứng chỉ CA trung gian đầu tiên của bạn
Sau khi nhập thành công từng chứng chỉ trên, bạn sẽ nhận được kết quả sau:
Certificate was added to keystore
Nhập chứng chỉ thực thể cuối cho miền của bạn:
keytool -import -trustcacerts -alias tomcat -file certificate.crt -keystore yourkeystore.jks
Ở đâu:
tomcat
là bí danh thực tế của kho khóa của bạn. Bí danh cho chứng chỉ tổ chức cuối của bạn phải giống với bí danh bạn đã sử dụng khi tạo kho khóa với Khóa riêng tư. Nếu bạn không chỉ định bí danh trong quá trình tạo kho khóa, giá trị mặc định sẽ là mykey .certificate.crt
là tên / đường dẫn thực tế của tệp chứng chỉ thực thể cuối của bạn.
Sau khi nhập chứng chỉ thực thể cuối, thông báo dưới đây sẽ được nhắc:
Certificate reply was installed in keystore
Bước 3: Chỉnh sửa trình kết nối
Trong bước tiếp theo, bạn sẽ cần phải sửa đổi trình kết nối cho cổng mặc định 8443 hoặc 443.
Việc sửa đổi phải được thực hiện trong ‘Tomcat installation directory’/conf/server.xml
tệp. Bạn có thể tìm thấy vị trí của thư mục chứa server.xml
tệp cấu hình bằng cách sử dụng lệnh dưới đây:
sudo find / -ipath '*tomcat*server.xml'
Rất có thể, nó sẽ nằm trong /opt/tomcat/conf/server.xml
hoặc/etc/tomcat/server.xml
Dưới đây là một ví dụ về trình kết nối JSSE cho cổng 443 sử dụng giao thức HTTP / 1.1 cùng với các phiên bản giao thức TLS lên đến 1.3:
<Connector
sslProtocol="TLS"/>
Ở đâu:
/opt/tomcat/ssl/yourkeystore.jks
là đường dẫn tuyệt đối và tên thực của tệp kho khóakeystore_password
là mật khẩu thực tế cho kho khóa của bạn
Bước 4: Thực thi các thay đổi
Sau khi hoàn tất, vui lòng khởi động lại Tomcat để áp dụng các thay đổi. Nếu bạn không chắc chắn về các bước để tạo lại, bạn có thể vào phần này để áp dụng các thay đổi và xác minh cài đặt SSL.
PKCS # 12
Nếu bạn không bật APR trên Apache Tomcat, thì phương pháp cài đặt SSL này là sự cân bằng tối ưu giữa phương pháp nhập PKCS # 7 và PEM. PKCS # 12 là một tiêu chuẩn chứng chỉ khi tất cả các phần bắt buộc (chứng chỉ thực thể cuối cho tên máy chủ, gói CA và Khóa riêng) được lưu trữ trong cùng một tệp.
Bước 1: Chuẩn bị các tệp SSL
Vui lòng chuyển ngay sang phần tiếp theo nếu bạn đã có chứng chỉ PKCS # 12 (.pfx / .p12). Nếu bạn chưa có, hãy chuyển đổi các tệp tương ứng trước .
Bước 2: Sửa đổi kho khóa
Tệp PKCS # 12 được coi như một kho khóa. Vì vậy, bạn sẽ chỉ cần chỉ định đường dẫn đến tệp PKCS # 12 trong chỉ thị keystoreFile. Quá trình này khá giống với các tiêu chuẩn PKCS7 và PEM .
Việc sửa đổi phải được thực hiện trong ‘Tomcat installation directory’/conf/server.xml
tệp. Bạn có thể tìm thấy vị trí của thư mục chứa server.xml
tệp cấu hình bằng cách sử dụng lệnh dưới đây:
sudo find / -ipath '*tomcat*server.xml'
Nó rất có thể sẽ ở trong /opt/tomcat/conf/server.xml
hoặc /etc/tomcat/server.xml
.
Dưới đây là một ví dụ về trình kết nối PKCS # 12 JSSE cho cổng 443 sử dụng giao thức HTTP / 1.1 cùng với các phiên bản giao thức TLS lên đến 1.3:
Ở đâu:
/opt/tomcat/ssl/somefile.pfx
là đường dẫn tuyệt đối và tên thực cho chứng chỉ PKCS # 12password_from_your_pfx
là mật khẩu thực cho tệp PKCS # 12
Lưu ý : Trong mọi trường hợp khi bạn sử dụng tệp PKCS12, "keystoreType"
chỉ thị phải được chỉ định trong cấu hình SSL để xác định rằng định dạng kho khóa là PKCS # 12 để máy chủ đọc tệp đúng cách.
Bước 3: Hoàn tất cài đặt SSL
Sau khi hoàn tất, vui lòng khởi động lại Tomcat để áp dụng các thay đổi. Nếu bạn không chắc chắn về các bước để tạo lại, hãy chuyển đến phần này để áp dụng các thay đổi và xác minh cài đặt SSL.
Cài đặt dựa trên APR
Hầu hết các bản phân phối Linux đều vận chuyển các gói cho APR xuất xưởng. Tuy nhiên, libtcnative
cần có các gói libapr1-dev
và bổ sung libssl-dev
để APR hoạt động bình thường với Tomcat (nếu bạn chưa cài đặt chúng). Thư viện Tomcat Native cũng cần được biên dịch. Chúng tôi không đề cập đến chủ đề này trong hướng dẫn này; giả sử bạn đã thiết lập APR với Tomcat. Nếu không có APR nào được thiết lập trên Apache Tomcat của bạn, hãy xem phương pháp cài đặt này .
Bước 1: Tải tệp lên
Đầu tiên, tải chứng chỉ, Khóa riêng tư và gói CA (nếu Yêu cầu ký chứng chỉ được tạo ở nơi khác) lên máy chủ.
Bước 2: Định cấu hình trình kết nối
Tiếp theo, sửa đổi trình kết nối hiện có cho cổng mặc định 8443 hoặc 443. Việc sửa đổi phải được thực hiện trong ‘Tomcat installation directory’/conf/server.xml file
.
Bạn có thể tìm thấy vị trí của thư mục chứa tệp cấu hình server.xml bằng cách sử dụng lệnh dưới đây:
sudo find / -ipath '*tomcat*server.xml'
Rất có thể nó sẽ nằm trong /opt/tomcat/conf/server.xml
hoặc/etc/tomcat/server.xml
Dưới đây là ví dụ về trình kết nối APR cho cổng 443 sử dụng giao thức HTTP / 1.1 cùng với TLS1.1 & TLS1.2 được bật:
<Connector
SSLVerifyClient="optional"
SSLProtocol="TLSv1.1+TLSv1.2"/>
Ở đâu:
/opt/tomcat/ssl/cert.crt
là đường dẫn tuyệt đối và tên thực của chứng chỉ được định dạng PEM/opt/tomcat/ssl/bundle.ca-bundle
là đường dẫn tuyệt đối và tên thực của tệp gói CA/opt/tomcat/ssl/private.key
là đường dẫn tuyệt đối và tên thực của tệp Khóa cá nhân
Lưu ý quan trọng : Trình kết nối APR yêu cầu bạn đặt lệnh SSLCertificateChainFile một cách rõ ràng. Không thể cài đặt chứng chỉ đúng cách với một tệp chứa cả chứng chỉ thực thể cuối và chuỗi gói CA, giống như thường được thực hiện trên Apache 2.4.8 trở lên. Nếu chỉ SSLCertificateFile được đặt trong trình kết nối, chứng chỉ đầu tiên từ tệp sẽ được truy xuất trong quá trình bắt tay, điều này có thể gây ra lỗi ERR_CERT_AUTHORITY_INVALID.
Quan trọng: Quyền truy cập cài đặt quyềnKhi cài đặt chứng chỉ cho trình kết nối APR, bạn có thể gặp phải thông báo lỗi sau:
Nguyên nhân là do các quyền truy cập được đặt không đúng cho các tệp chứng chỉ và Khóa cá nhân. Bạn cần đặt người dùng tomcat của mình làm chủ sở hữu của các tệp chứng chỉ và khóa Riêng tư. Sử dụng các lệnh sau để thực hiện điều này:
Đâu Hãy lưu ý rằng Tomcat nhạy cảm với quyền, do đó sẽ không thể sử dụng chứng chỉ & Khóa riêng tư hoặc các tệp kho khóa được lưu trong / root hoặc các thư mục hạn chế truy cập tương tự. |
Bước 3: Áp dụng các thay đổi
Sau khi hoàn tất, vui lòng khởi động lại Tomcat để áp dụng các thay đổi. Nếu bạn không chắc chắn về các bước để tạo lại, vui lòng chuyển đến phần này để áp dụng các thay đổi và xác minh cài đặt SSL.
Áp dụng các thay đổi
Lưu các thay đổi và khởi động lại Tomcat thông qua dịch vụ systemd nếu có bất kỳ thay đổi nào, như sau:
sudo systemctl restart tomcat
Hoặc bằng cách sử dụng mã nhị phân. Những thứ này rất có thể sẽ được tìm thấy ở vị trí sau:
/opt/tomcat/bin/shutdown.sh
/opt/tomcat/bin/startup.sh
Tuy nhiên, vị trí của tệp nhị phân Tomcat có thể khác nhau giữa các lần cài đặt. Bạn có thể tìm thấy vị trí của cả tệp nhị phân khởi động và tắt máy bằng cách thực hiện lệnh dưới đây:
sudo find / -ipath '*tomcat*\/s[h t]*.sh'
Bạn sẽ có 2 tệp trong đầu ra. Chúng sẽ được sử dụng để khởi động lại Tomcat. Chạy các lệnh dưới đây theo thứ tự sau để khởi động lại máy chủ:
sudo sh /opt/tomcat/bin/shutdown.sh
sudo sh /opt/tomcat/bin/startup.sh
Ở đâu:
/opt/tomcat/bin/shutdown.sh
là đường dẫn tuyệt đối đếnshutdown.sh
tệp từ đầu ra trước đó/opt/tomcat/bin/startup.sh
là đường dẫn tuyệt đối đếnstartup.sh
tệp từ đầu ra trước đó
Sau khi khởi động lại, vui lòng kiểm tra cài đặt SSL bằng công cụ trực tuyến này .
Xử lý sự cố
Xem nội dung kho khóa
Sử dụng lệnh này để kiểm tra các chứng chỉ đã được giải mã đã nhập trong kho khóa. Đối với mỗi chứng chỉ được nhập chính xác, bạn sẽ thấy chi tiết của nó trong mục nhập kho khóa. Mục nhập Khóa cá nhân cũng được hiển thị trong danh sách:
keytool -list -keystore yourkeystore.jks -v
Đầu ra phải tương tự như danh sách dưới đây:
$ keytool -list -keystore yourkeystore.jks -v
Version: 3
Để xem nội dung kho khóa với các chứng chỉ được mã hóa tương ứng ở dạng văn bản thuần túy (kiểu RFC), hãy sử dụng lệnh dưới đây:
keytool -list -rfc -keystore yourkeystore.jks
Đầu ra phải tương tự như danh sách dưới đây:
$ keytool -list -rfc -keystore yourkeystore.jks
-----END CERTIFICATE-----
Trích xuất khóa cá nhân từ kho khóa
Không thể trích xuất trực tiếp khóa Riêng tư từ kho khóa, nhưng có một giải pháp khác với OpenSSL. Bạn sẽ cần đến:
- Chuyển đổi tệp kho khóa Java thành tệp chuẩn PKCS # 12;
- Lấy tệp PKCS # 12 được chuyển đổi thành tệp Khóa cá nhân được mã hóa PEM riêng biệt, tức là xuất Khóa cá nhân;
- Xem nội dung của tệp Private key mới được tạo.
Làm theo các lệnh dưới đây để bắt đầu quá trình:
-
keytool -importkeystore -srckeystore yourkeystore.jks -destkeystore somefile.pfx -srcstoretype JKS -deststoretype PKCS12 -deststorepass password_from_your_pfx
Lưu ý :
Một số phiên bản Java chạy Tomcat (hoặc một vùng chứa servlet khác sử dụng keytool làm trình bao quản lý khóa Riêng / Công khai) có các phần mở rộng tệp ưu tiên khác nhau cho PKCS # 12 (ví dụ: các phiên bản cũ hơn như JDK 1.6 trở về trước có thể tạo tệp .p12). Các phiên bản ổn định hiện tại thường tạo tệp .pfx. Nội dung tệp của tệp .p12 và .pfx về cơ bản giống nhau. |
openssl pkcs12 -in somefile.pfx -out private.key -nocerts -nodes
cat private.key
Lưu ý rằng Khóa cá nhân được xuất có thể chứa các thuộc tính bổ sung (chẳng hạn như Thuộc tính túi hoặc Thuộc tính khóa) cùng với chính mã khóa. Trong tệp đầu ra, vui lòng xóa ~ 4 dòng đầu tiên đứng trước -----BEGIN PRIVATE KEY-----
thẻ.
Cảnh báo định dạng kho khóa độc quyền
Nếu bạn đã cài đặt phiên bản JDK cũ hơn phiên bản 9, kho khóa sẽ được tạo ở định dạng JKS (không nên nhầm lẫn với phần mở rộng tệp .jks). Môi trường openjdk cập nhật hiện tại sẽ đưa ra cảnh báo sau cho kho khóa như vậy:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format ..."
Bạn có thể bỏ qua cảnh báo và cài đặt chứng chỉ như bình thường. Tuy nhiên, để an toàn, bạn có thể nên chuyển đổi kho khóa JKS thành định dạng PKCS # 12 để tương thích. Bạn có thể sử dụng lệnh dưới đây để chuyển đổi loại kho khóa này:
keytool -importkeystore -srckeystore yourkeystore.jks -destkeystore yourkeystore.jks -deststoretype pkcs12
yourkeystore.jks
Tên / đường dẫn thực tế đến tệp kho khóa của bạn ở đâu .
Sau khi hoàn tất, bạn có thể kiểm tra loại kho khóa bằng cách liệt kê nội dung kho khóa .
Kết quả đầu ra thành công sẽ đưa ra cảnh báo cho biết kho khóa trước đó ở định dạng JKS đã được sao lưu trong một tệp riêng biệt:
Migrated "yourkeystore.jks" to PKCS12. The JKS keystore is backed up as "yourkeystore.jks.old".