mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8274471: Verification of OCSP Response signed with RSASSA-PSS fails
Reviewed-by: hchao, jnimeh
This commit is contained in:
parent
f2404d60de
commit
f63c4a832a
9 changed files with 65 additions and 86 deletions
|
@ -35,7 +35,6 @@ import java.security.cert.CertPathValidatorException;
|
|||
import java.security.cert.CertPathValidatorException.BasicReason;
|
||||
import java.security.cert.CRLReason;
|
||||
import java.security.cert.Extension;
|
||||
import java.security.cert.TrustAnchor;
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
|
@ -46,7 +45,6 @@ import sun.security.action.GetIntegerAction;
|
|||
import sun.security.util.Debug;
|
||||
import sun.security.util.Event;
|
||||
import sun.security.util.IOUtils;
|
||||
import sun.security.validator.Validator;
|
||||
import sun.security.x509.AccessDescription;
|
||||
import sun.security.x509.AuthorityInfoAccessExtension;
|
||||
import sun.security.x509.GeneralName;
|
||||
|
@ -166,22 +164,26 @@ public final class OCSP {
|
|||
List<Extension> extensions) throws IOException {
|
||||
OCSPRequest request = new OCSPRequest(certIds, extensions);
|
||||
byte[] bytes = request.encodeBytes();
|
||||
String responder = responderURI.toString();
|
||||
|
||||
if (debug != null) {
|
||||
debug.println("connecting to OCSP service at: " + responderURI);
|
||||
debug.println("connecting to OCSP service at: " + responder);
|
||||
}
|
||||
Event.report(Event.ReporterCategory.CRLCHECK, "event.ocsp.check",
|
||||
responderURI.toString());
|
||||
responder);
|
||||
|
||||
URL url;
|
||||
HttpURLConnection con = null;
|
||||
try {
|
||||
String encodedGetReq = responderURI.toString() + "/" +
|
||||
URLEncoder.encode(Base64.getEncoder().encodeToString(bytes),
|
||||
UTF_8);
|
||||
StringBuilder encodedGetReq = new StringBuilder(responder);
|
||||
if (!responder.endsWith("/")) {
|
||||
encodedGetReq.append("/");
|
||||
}
|
||||
encodedGetReq.append(URLEncoder.encode(
|
||||
Base64.getEncoder().encodeToString(bytes), UTF_8));
|
||||
|
||||
if (encodedGetReq.length() <= 255) {
|
||||
url = new URL(encodedGetReq);
|
||||
url = new URL(encodedGetReq.toString());
|
||||
con = (HttpURLConnection)url.openConnection();
|
||||
con.setDoOutput(true);
|
||||
con.setDoInput(true);
|
||||
|
|
|
@ -638,7 +638,10 @@ public final class OCSPResponse {
|
|||
|
||||
try {
|
||||
Signature respSignature = Signature.getInstance(sigAlgId.getName());
|
||||
respSignature.initVerify(cert.getPublicKey());
|
||||
SignatureUtil.initVerifyWithParam(respSignature,
|
||||
cert.getPublicKey(),
|
||||
SignatureUtil.getParamSpec(sigAlgId.getName(),
|
||||
sigAlgId.getEncodedParams()));
|
||||
respSignature.update(tbsResponseData);
|
||||
|
||||
if (respSignature.verify(signature)) {
|
||||
|
@ -654,8 +657,8 @@ public final class OCSPResponse {
|
|||
}
|
||||
return false;
|
||||
}
|
||||
} catch (InvalidKeyException | NoSuchAlgorithmException |
|
||||
SignatureException e)
|
||||
} catch (InvalidAlgorithmParameterException | InvalidKeyException
|
||||
| NoSuchAlgorithmException | SignatureException e)
|
||||
{
|
||||
throw new CertPathValidatorException(e);
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -170,8 +170,7 @@ public class SignatureUtil {
|
|||
// for verification with the specified key and params (may be null)
|
||||
public static void initVerifyWithParam(Signature s, PublicKey key,
|
||||
AlgorithmParameterSpec params)
|
||||
throws ProviderException, InvalidAlgorithmParameterException,
|
||||
InvalidKeyException {
|
||||
throws InvalidAlgorithmParameterException, InvalidKeyException {
|
||||
SharedSecrets.getJavaSecuritySignatureAccess().initVerify(s, key, params);
|
||||
}
|
||||
|
||||
|
@ -180,8 +179,7 @@ public class SignatureUtil {
|
|||
public static void initVerifyWithParam(Signature s,
|
||||
java.security.cert.Certificate cert,
|
||||
AlgorithmParameterSpec params)
|
||||
throws ProviderException, InvalidAlgorithmParameterException,
|
||||
InvalidKeyException {
|
||||
throws InvalidAlgorithmParameterException, InvalidKeyException {
|
||||
SharedSecrets.getJavaSecuritySignatureAccess().initVerify(s, cert, params);
|
||||
}
|
||||
|
||||
|
@ -189,8 +187,7 @@ public class SignatureUtil {
|
|||
// for signing with the specified key and params (may be null)
|
||||
public static void initSignWithParam(Signature s, PrivateKey key,
|
||||
AlgorithmParameterSpec params, SecureRandom sr)
|
||||
throws ProviderException, InvalidAlgorithmParameterException,
|
||||
InvalidKeyException {
|
||||
throws InvalidAlgorithmParameterException, InvalidKeyException {
|
||||
SharedSecrets.getJavaSecuritySignatureAccess().initSign(s, key, params, sr);
|
||||
}
|
||||
|
||||
|
@ -342,10 +339,10 @@ public class SignatureUtil {
|
|||
* Create a Signature that has been initialized with proper key and params.
|
||||
*
|
||||
* @param sigAlg signature algorithms
|
||||
* @param key public or private key
|
||||
* @param key private key
|
||||
* @param provider (optional) provider
|
||||
*/
|
||||
public static Signature fromKey(String sigAlg, Key key, String provider)
|
||||
public static Signature fromKey(String sigAlg, PrivateKey key, String provider)
|
||||
throws NoSuchAlgorithmException, NoSuchProviderException,
|
||||
InvalidKeyException{
|
||||
Signature sigEngine = (provider == null || provider.isEmpty())
|
||||
|
@ -358,10 +355,10 @@ public class SignatureUtil {
|
|||
* Create a Signature that has been initialized with proper key and params.
|
||||
*
|
||||
* @param sigAlg signature algorithms
|
||||
* @param key public or private key
|
||||
* @param key private key
|
||||
* @param provider (optional) provider
|
||||
*/
|
||||
public static Signature fromKey(String sigAlg, Key key, Provider provider)
|
||||
public static Signature fromKey(String sigAlg, PrivateKey key, Provider provider)
|
||||
throws NoSuchAlgorithmException, InvalidKeyException{
|
||||
Signature sigEngine = (provider == null)
|
||||
? Signature.getInstance(sigAlg)
|
||||
|
@ -369,17 +366,12 @@ public class SignatureUtil {
|
|||
return autoInitInternal(sigAlg, key, sigEngine);
|
||||
}
|
||||
|
||||
private static Signature autoInitInternal(String alg, Key key, Signature s)
|
||||
private static Signature autoInitInternal(String alg, PrivateKey key, Signature s)
|
||||
throws InvalidKeyException {
|
||||
AlgorithmParameterSpec params = SignatureUtil
|
||||
.getDefaultParamSpec(alg, key);
|
||||
try {
|
||||
if (key instanceof PrivateKey) {
|
||||
SignatureUtil.initSignWithParam(s, (PrivateKey) key, params,
|
||||
null);
|
||||
} else {
|
||||
SignatureUtil.initVerifyWithParam(s, (PublicKey) key, params);
|
||||
}
|
||||
SignatureUtil.initSignWithParam(s, key, params, null);
|
||||
} catch (InvalidAlgorithmParameterException e) {
|
||||
throw new AssertionError("Should not happen", e);
|
||||
}
|
||||
|
|
|
@ -312,7 +312,7 @@ public class AlgorithmId implements Serializable, DerEncoder {
|
|||
*
|
||||
* @return DER encoded parameters, or null not present.
|
||||
*/
|
||||
public byte[] getEncodedParams() throws IOException {
|
||||
public byte[] getEncodedParams() {
|
||||
return (encodedParams == null ||
|
||||
algid.toString().equals(KnownOIDs.SpecifiedSHA2withECDSA.value()))
|
||||
? null
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1997, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
|
@ -820,13 +820,7 @@ public class X509CRLImpl extends X509CRL implements DerEncoder {
|
|||
* null if no parameters are present.
|
||||
*/
|
||||
public byte[] getSigAlgParams() {
|
||||
if (sigAlgId == null)
|
||||
return null;
|
||||
try {
|
||||
return sigAlgId.getEncodedParams();
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
return sigAlgId == null ? null : sigAlgId.getEncodedParams();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1030,13 +1030,7 @@ public class X509CertImpl extends X509Certificate implements DerEncoder {
|
|||
* null if no parameters are present.
|
||||
*/
|
||||
public byte[] getSigAlgParams() {
|
||||
if (algId == null)
|
||||
return null;
|
||||
try {
|
||||
return algId.getEncodedParams();
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
return algId == null ? null : algId.getEncodedParams();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue