提交 67c907c7 编写于 作者: V vinnie

8075374: Responding to OCSP responses

Reviewed-by: mullan
上级 e7a1d062
/* /*
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -679,10 +679,14 @@ public class X509CRLSelector implements CRLSelector { ...@@ -679,10 +679,14 @@ public class X509CRLSelector implements CRLSelector {
nowPlusSkew = new Date(dateAndTime.getTime() + skew); nowPlusSkew = new Date(dateAndTime.getTime() + skew);
nowMinusSkew = new Date(dateAndTime.getTime() - skew); nowMinusSkew = new Date(dateAndTime.getTime() - skew);
} }
// Check that the test date is within the validity interval:
// [ thisUpdate - MAX_CLOCK_SKEW,
// nextUpdate + MAX_CLOCK_SKEW ]
if (nowMinusSkew.after(nextUpdate) if (nowMinusSkew.after(nextUpdate)
|| nowPlusSkew.before(crlThisUpdate)) { || nowPlusSkew.before(crlThisUpdate)) {
if (debug != null) { if (debug != null) {
debug.println("X509CRLSelector.match: update out of range"); debug.println("X509CRLSelector.match: update out-of-range");
} }
return false; return false;
} }
......
/* /*
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -151,8 +151,8 @@ public final class OCSPResponse { ...@@ -151,8 +151,8 @@ public final class OCSPResponse {
private static final int DEFAULT_MAX_CLOCK_SKEW = 900000; private static final int DEFAULT_MAX_CLOCK_SKEW = 900000;
/** /**
* Integer value indicating the maximum allowable clock skew, in seconds, * Integer value indicating the maximum allowable clock skew,
* to be used for the OCSP check. * in milliseconds, to be used for the OCSP check.
*/ */
private static final int MAX_CLOCK_SKEW = initializeClockSkew(); private static final int MAX_CLOCK_SKEW = initializeClockSkew();
...@@ -586,13 +586,14 @@ public final class OCSPResponse { ...@@ -586,13 +586,14 @@ public final class OCSPResponse {
"Unable to verify OCSP Response's signature"); "Unable to verify OCSP Response's signature");
} }
// Check freshness of OCSPResponse
if (nonce != null) { if (nonce != null) {
if (responseNonce != null && !Arrays.equals(nonce, responseNonce)) { if (responseNonce != null && !Arrays.equals(nonce, responseNonce)) {
throw new CertPathValidatorException("Nonces don't match"); throw new CertPathValidatorException("Nonces don't match");
} }
} }
// Check freshness of OCSPResponse
long now = (date == null) ? System.currentTimeMillis() : date.getTime(); long now = (date == null) ? System.currentTimeMillis() : date.getTime();
Date nowPlusSkew = new Date(now + MAX_CLOCK_SKEW); Date nowPlusSkew = new Date(now + MAX_CLOCK_SKEW);
Date nowMinusSkew = new Date(now - MAX_CLOCK_SKEW); Date nowMinusSkew = new Date(now - MAX_CLOCK_SKEW);
...@@ -602,13 +603,18 @@ public final class OCSPResponse { ...@@ -602,13 +603,18 @@ public final class OCSPResponse {
if (sr.nextUpdate != null) { if (sr.nextUpdate != null) {
until = " until " + sr.nextUpdate; until = " until " + sr.nextUpdate;
} }
debug.println("Response's validity interval is from " + debug.println("OCSP response validity interval is from " +
sr.thisUpdate + until); sr.thisUpdate + until);
debug.println("Checking validity of OCSP response on: " +
new Date(now));
} }
// Check that the test date is within the validity interval // Check that the test date is within the validity interval:
if ((sr.thisUpdate != null && nowPlusSkew.before(sr.thisUpdate)) || // [ thisUpdate - MAX_CLOCK_SKEW,
(sr.nextUpdate != null && nowMinusSkew.after(sr.nextUpdate))) // MAX(thisUpdate, nextUpdate) + MAX_CLOCK_SKEW ]
if (nowPlusSkew.before(sr.thisUpdate) ||
nowMinusSkew.after(
sr.nextUpdate != null ? sr.nextUpdate : sr.thisUpdate))
{ {
throw new CertPathValidatorException( throw new CertPathValidatorException(
"Response is unreliable: its validity " + "Response is unreliable: its validity " +
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册