Saya memiliki klien layanan web Java, yang menggunakan layanan web melalui 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);
}
Ketika saya terhubung ke URL layanan ( https://AAA.BBB.CCC.DDD:9443/ISomeService
), saya mendapatkan pengecualian java.security.cert.CertificateException: No subject alternative names present
.
Untuk memperbaikinya, saya pertama kali menjalankan openssl s_client -showcerts -connect AAA.BBB.CCC.DDD:9443 > certs.txt
dan mendapatkan konten berikut dalam file 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, sekarang saya perlu
- ekstrak bagian
certs.txt
antara-----BEGIN CERTIFICATE-----
dan-----END CERTIFICATE-----
, - memodifikasinya sehingga nama sertifikat sama dengan
AAA.BBB.CCC.DDD
dan - kemudian impor hasil menggunakan
keytool -importcert -file fileWithModifiedCertificate
(di manafileWithModifiedCertificate
adalah hasil operasi 1 dan 2).
Apakah ini benar?
Jika demikian, bagaimana tepatnya saya dapat membuat sertifikat dari langkah 1 bekerja dengan alamat alamat IP ( AAA.BBB.CCC.DDD
)?
Pembaruan 1 (23.10.2013 15:37 MSK): Sebagai jawaban atas pertanyaan serupa , saya membaca yang berikut ini:
Jika Anda tidak mengontrol server itu, gunakan nama host-nya (asalkan setidaknya ada CN yang cocok dengan nama host itu di sertifikat yang ada).
Apa sebenarnya arti "menggunakan"?