मेरे पास एक जावा वेब सेवा क्लाइंट है, जो 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 का परिणाम है)।
क्या ये सही है?
यदि हां, तो मैं आईपी-आधारित Adddress ( AAA.BBB.CCC.DDD
) के साथ चरण 1 से प्रमाण पत्र कैसे बना सकता हूं ?
अपडेट 1 (23.10.2013 15:37 MSK): इसी तरह के प्रश्न के उत्तर में , मैंने निम्नलिखित पढ़ा:
यदि आप उस सर्वर के नियंत्रण में नहीं हैं, तो इसके होस्ट नाम का उपयोग करें (बशर्ते कि कम से कम एक CN मिलान हो जो मौजूदा प्रमाणपत्र में होस्ट नाम हो)।
वास्तव में "उपयोग" का क्या अर्थ है?