Tôi có một ứng dụng khách dịch vụ web Java, sử dụng dịch vụ web qua HTTPS.
import javax.xml.ws.Service;
@WebServiceClient(name = "ISomeService", targetNamespace = "http://tempuri.org/", wsdlLocation = "...")
public class ISomeService
extends Service
{
public ISomeService() {
super(__getWsdlLocation(), ISOMESERVICE_QNAME);
}
Khi tôi kết nối với URL dịch vụ ( https://AAA.BBB.CCC.DDD:9443/ISomeService
), tôi nhận được ngoại lệ java.security.cert.CertificateException: No subject alternative names present
.
Để khắc phục, lần đầu tiên tôi chạy openssl s_client -showcerts -connect AAA.BBB.CCC.DDD:9443 > certs.txt
và nhận được nội dung sau trong tệp certs.txt
:
CONNECTED(00000003)
---
Certificate chain
0 s:/CN=someSubdomain.someorganisation.com
i:/CN=someSubdomain.someorganisation.com
-----BEGIN CERTIFICATE-----
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=someSubdomain.someorganisation.com
issuer=/CN=someSubdomain.someorganisation.com
---
No client certificate CA names sent
---
SSL handshake has read 489 bytes and written 236 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 512 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : RC4-MD5
Session-ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Session-ID-ctx:
Master-Key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Key-Arg : None
Start Time: 1382521838
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
AFAIK, bây giờ tôi cần
- trích xuất phần
certs.txt
giữa-----BEGIN CERTIFICATE-----
và-----END CERTIFICATE-----
, - sửa đổi nó để tên chứng chỉ bằng
AAA.BBB.CCC.DDD
và - sau đó nhập kết quả bằng cách sử dụng
keytool -importcert -file fileWithModifiedCertificate
(trong đófileWithModifiedCertificate
là kết quả của hoạt động 1 và 2).
Điều này có chính xác?
Nếu vậy, chính xác thì làm cách nào để tôi có thể làm cho chứng chỉ từ bước 1 hoạt động với adddress ( AAA.BBB.CCC.DDD
) dựa trên IP ?
Cập nhật 1 (23,10.2013 15:37 MSK): Trong câu trả lời cho một câu hỏi tương tự , tôi đọc như sau:
Nếu bạn không kiểm soát máy chủ đó, hãy sử dụng tên máy chủ của nó (miễn là có ít nhất CN khớp với tên máy chủ đó trong chứng chỉ hiện có).
Chính xác thì "sử dụng" có nghĩa là gì?