ฉันมีไคลเอนต์บริการเว็บ Java ซึ่งใช้บริการเว็บผ่าน 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);
}
เมื่อฉันเชื่อมต่อไปยัง URL บริการ ( https://AAA.BBB.CCC.DDD:9443/ISomeService
) java.security.cert.CertificateException: No subject alternative names present
ผมได้รับข้อยกเว้น
ในการแก้ไขก่อนอื่นฉันเรียกใช้openssl s_client -showcerts -connect AAA.BBB.CCC.DDD:9443 > certs.txt
และได้รับเนื้อหาต่อไปนี้ในไฟล์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 ตอนนี้ฉันต้องการ
- สารสกัดจากส่วนหนึ่งของ
certs.txt
ระหว่าง-----BEGIN CERTIFICATE-----
และ-----END CERTIFICATE-----
, - แก้ไขเพื่อให้ชื่อใบรับรองเท่ากับ
AAA.BBB.CCC.DDD
และ - จากนั้นนำเข้าผลลัพธ์โดยใช้
keytool -importcert -file fileWithModifiedCertificate
(fileWithModifiedCertificate
ผลลัพธ์ของการดำเนินการ 1 และ 2 อยู่ที่ไหน)
ถูกต้องหรือไม่
ถ้าเป็นเช่นนั้นฉันจะทำให้ใบรับรองจากขั้นตอนที่ 1 ทำงานกับที่อยู่ IP ( AAA.BBB.CCC.DDD
) ได้อย่างไร
อัปเดต 1 (23.10.2013 15:37 MSK):ในคำตอบสำหรับคำถามที่คล้ายกันฉันอ่านสิ่งต่อไปนี้:
หากคุณไม่ได้ควบคุมเซิร์ฟเวอร์นั้นให้ใช้ชื่อโฮสต์ (โดยมีอย่างน้อย CN ตรงกับชื่อโฮสต์นั้นในใบรับรองที่มีอยู่)
"ใช้" หมายความว่าอย่างไร