HTTPS를 통해 웹 서비스를 사용하는 Java 웹 서비스 클라이언트가 있습니다.
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 의 결과)를 사용하여 결과를 가져옵니다 .
이 올바른지?
그렇다면 IP 기반 주소 ( AAA.BBB.CCC.DDD
) 에서 1 단계의 인증서를 정확히 어떻게 작동시킬 수 있습니까?
업데이트 1 (2013년 10월 23일 15시 37분 MSK는) : A와 답변에 비슷한 질문 , 나는 다음을 읽어
해당 서버를 제어하지 않는 경우 해당 호스트 이름을 사용합니다 (기존 인증서에 해당 호스트 이름과 일치하는 CN이 적어도있는 경우).
"사용"이란 정확히 무엇을 의미합니까?