Home / Class/ OcspClient Class — netty Architecture

OcspClient Class — netty Architecture

Architecture documentation for the OcspClient class in OcspClient.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  b3812cec_6383_4848_72ed_d7aa9ab08546["OcspClient"]
  1fc80aa3_ba19_9b50_d3a5_47eaa0a7dc98["OcspClient.java"]
  b3812cec_6383_4848_72ed_d7aa9ab08546 -->|defined in| 1fc80aa3_ba19_9b50_d3a5_47eaa0a7dc98
  a95f2426_2f96_5a1e_b38a_6852764f680c["query()"]
  b3812cec_6383_4848_72ed_d7aa9ab08546 -->|method| a95f2426_2f96_5a1e_b38a_6852764f680c
  665d2265_ea4a_1a24_17a6_15e9efedc3f9["validateResponse()"]
  b3812cec_6383_4848_72ed_d7aa9ab08546 -->|method| 665d2265_ea4a_1a24_17a6_15e9efedc3f9
  4b22f2c1_501c_bdd1_fafa_7de113198125["validateNonce()"]
  b3812cec_6383_4848_72ed_d7aa9ab08546 -->|method| 4b22f2c1_501c_bdd1_fafa_7de113198125
  af12db0d_0585_7f39_ea00_ea888c0f0445["validateSignature()"]
  b3812cec_6383_4848_72ed_d7aa9ab08546 -->|method| af12db0d_0585_7f39_ea00_ea888c0f0445
  50598886_9268_4a91_78f1_ceeb719d9600["validateCertificateChain()"]
  b3812cec_6383_4848_72ed_d7aa9ab08546 -->|method| 50598886_9268_4a91_78f1_ceeb719d9600
  eed38e08_ff7d_6979_6ead_826c58934b20["String()"]
  b3812cec_6383_4848_72ed_d7aa9ab08546 -->|method| eed38e08_ff7d_6979_6ead_826c58934b20
  d2ac9bea_c790_2932_2c32_116afd26b876["OcspClient()"]
  b3812cec_6383_4848_72ed_d7aa9ab08546 -->|method| d2ac9bea_c790_2932_2c32_116afd26b876

Relationship Graph

Source Code

handler-ssl-ocsp/src/main/java/io/netty/handler/ssl/ocsp/OcspClient.java lines 86–410

final class OcspClient {

    private static final InternalLogger logger = InternalLoggerFactory.getInstance(OcspClient.class);

    private static final SecureRandom SECURE_RANDOM = new SecureRandom();
    private static final int OCSP_RESPONSE_MAX_SIZE = SystemPropertyUtil.getInt(
            "io.netty.ocsp.responseSize", 1024 * 10);

    static {
        logger.debug("-Dio.netty.ocsp.responseSize: {} bytes", OCSP_RESPONSE_MAX_SIZE);
    }

    /**
     * Query the certificate status using OCSP
     *
     * @param x509Certificate       Client {@link X509Certificate} to validate
     * @param issuer                {@link X509Certificate} issuer of client certificate
     * @param validateResponseNonce Set to {@code true} to enable OCSP response validation
     * @param ioTransport           {@link IoTransport} to use
     * @return {@link Promise} of {@link BasicOCSPResp}
     */
    static Promise<BasicOCSPResp> query(final X509Certificate x509Certificate,
                                        final X509Certificate issuer, final boolean validateResponseNonce,
                                        final IoTransport ioTransport, final DnsNameResolver dnsNameResolver) {
        final EventLoop eventLoop = ioTransport.eventLoop();
        final Promise<BasicOCSPResp> responsePromise = eventLoop.newPromise();
        eventLoop.execute(new Runnable() {
            @Override
            public void run() {
                try {
                    CertificateID certificateID = new CertificateID(new JcaDigestCalculatorProviderBuilder()
                            .build().get(HASH_SHA1), new JcaX509CertificateHolder(issuer),
                            x509Certificate.getSerialNumber());

                    // Initialize OCSP Request Builder and add CertificateID into it.
                    OCSPReqBuilder builder = new OCSPReqBuilder();
                    builder.addRequest(certificateID);

                    // Generate 16-bytes (octets) of nonce and add it into OCSP Request builder.
                    // Because as per RFC-8954#2.1:
                    //
                    //   OCSP responders MUST accept lengths of at least
                    //   16 octets and MAY choose to ignore the Nonce extension for requests
                    //   where the length of the nonce is less than 16 octets.
                    byte[] nonce = new byte[16];
                    SECURE_RANDOM.nextBytes(nonce);
                    final DEROctetString derNonce = new DEROctetString(nonce);
                    builder.setRequestExtensions(new Extensions(new Extension(id_pkix_ocsp_nonce, false, derNonce)));

                    // Get OCSP URL from Certificate and query it.
                    URL uri = new URL(parseOcspUrlFromCertificate(x509Certificate));

                    // Find port
                    int port = uri.getPort();
                    if (port == -1) {
                        port = uri.getDefaultPort();
                    }

                    // Configure path
                    String path = uri.getPath();
                    if (path.isEmpty()) {
                        path = "/";
                    } else {
                        if (uri.getQuery() != null) {
                            path = path + '?' + uri.getQuery();
                        }
                    }

                    Promise<OCSPResp> ocspResponsePromise = query(eventLoop,
                            Unpooled.wrappedBuffer(builder.build().getEncoded()),
                            uri.getHost(), port, path, ioTransport, dnsNameResolver);

                    // Validate OCSP response
                    ocspResponsePromise.addListener((GenericFutureListener<Future<OCSPResp>>) future -> {
                        // If Future was successful then we have received OCSP response
                        // We will now validate it.
                        if (future.isSuccess()) {
                            try {
                                BasicOCSPResp resp = (BasicOCSPResp) future.getNow().getResponseObject();
                                validateResponse(responsePromise, resp, derNonce, issuer, validateResponseNonce);
                            } catch (Throwable t) {

Frequently Asked Questions

What is the OcspClient class?
OcspClient is a class in the netty codebase, defined in handler-ssl-ocsp/src/main/java/io/netty/handler/ssl/ocsp/OcspClient.java.
Where is OcspClient defined?
OcspClient is defined in handler-ssl-ocsp/src/main/java/io/netty/handler/ssl/ocsp/OcspClient.java at line 86.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free