keytool -genkeypair -alias http2-alias -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650

 

server:

  ssl:

    enabled: true

    key-store: classpath:keystore.p12

    key-store-password: your-password

    key-store-type: PKCS12

    key-alias: http2-alias

  http2:

    enabled: true

 

@Configuration

public class Http2Config {

    @Bean

    public WebServerFactoryCustomizer<TomcatServletWebServerFactory> getWebServerFactoryCustomizer() {

        return factory -> {

            Connector httpConnector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);

            httpConnector.setPort(8080);

            factory.addConnectorCustomizers(connector -> connector.addUpgradeProtocol(new Http2Protocol()));

            factory.addAdditionalTomcatConnectors(httpConnector);

        };

    }

}

 

 

openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' -keyout server.key -out server.cert

 

import express from 'express';

import { createSecureServer } from 'http2';

import fs from 'fs';

 

const app = express();

 

app.get('/api/data', (req, res) => {

  res.json({ message: 'Hello from HTTP/2!' });

});

 

const options = {

  key: fs.readFileSync('server.key'),

  cert: fs.readFileSync('server.cert'),

};

 

createSecureServer(options, app).listen(3443, () => {

  console.log('HTTP/2 API running on https://localhost:3443');

});