Interface TlsServer
- All Superinterfaces:
TlsPeer
- All Known Implementing Classes:
AbstractTlsServer, DefaultTlsServer, PSKTlsServer, SRPTlsServer
-
Method Summary
Modifier and TypeMethodDescriptionThis method will be called (only) ifSecurityParameters.getStatusRequestVersion()is non-zero, meaning the client asked for a stapled response and the server undertook to answer: up to (D)TLS 1.2, that it echoed an extension of type "status_request" (RFC 6066 sec.Return server credentials to use.getExternalPSK(Vector identities) WARNING: EXPERIMENTAL FEATURE, UNSTABLE API Return theexternal PSKto select from the ClientHello.byte[]RFC 5077 3.3.intvoidgetServerExtensionsForConnection(Hashtable serverExtensions) getSessionToResume(byte[] sessionID) Return the specified session, if available.int[]voidinit(TlsServerContext context) voidnotifyClientCertificate(Certificate clientCertificate) Called by the protocol handler to report the client certificate, only ifgetCertificateRequest()returned non-null.voidnotifyClientVersion(ProtocolVersion clientVersion) voidnotifyFallback(boolean isFallback) voidnotifyOfferedCipherSuites(int[] offeredCipherSuites) voidnotifySession(TlsSession session) booleanvoidprocessClientExtensions(Hashtable clientExtensions) voidprocessClientSupplementalData(Vector clientSupplementalData) Methods inherited from interface TlsPeer
allowLegacyResumption, cancel, getCipherSuites, getCrypto, getHandshakeResendTimeMillis, getHandshakeTimeoutMillis, getHeartbeat, getHeartbeatPolicy, getKeyExchangeFactory, getMaxCertificateChainLength, getMaxHandshakeMessageSize, getProtocolVersions, getPskKeyExchangeModes, getRenegotiationPolicy, notifyAlertRaised, notifyAlertReceived, notifyCloseHandle, notifyConnectionClosed, notifyHandshakeBeginning, notifyHandshakeComplete, notifySecureRenegotiation, requiresCloseNotify, requiresExtendedMasterSecret, shouldCheckSigAlgOfPeerCerts, shouldUseExtendedMasterSecret, shouldUseExtendedPadding, shouldUseGMTUnixTime
-
Method Details
-
preferLocalSupportedGroups
boolean preferLocalSupportedGroups() -
init
-
getSessionToResume
Return the specified session, if available. Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated.- Parameters:
sessionID- the ID of the session to resume.- Returns:
- A
TlsSessionwith the specified session ID, or null. - See Also:
-
getNewSessionID
byte[] getNewSessionID() -
getExternalPSK
WARNING: EXPERIMENTAL FEATURE, UNSTABLE API Return theexternal PSKto select from the ClientHello. Note that this will only be called when TLS 1.3 or higher is amongst the offered protocol versions, and one or more PSKs are actually offered.- Parameters:
identities- aVectorofPskIdentityinstances.- Returns:
- the
TlsPSKExternalcorresponding to the selected identity, or null to not select any. - Throws:
IOException- if the handshake should be aborted. An implementation may throw aTlsFatalAlertto control the alert sent to the peer - e.g.AlertDescription.unknown_psk_identitywhen none of the offered identities is recognised, orAlertDescription.decrypt_errorwhen an identity is recognised but is invalid or expired (see RFC 8446 6.2). Returning null instead leaves PSK unselected without aborting.
-
notifySession
-
notifyClientVersion
- Throws:
IOException
-
notifyFallback
- Throws:
IOException
-
notifyOfferedCipherSuites
- Throws:
IOException
-
processClientExtensions
- Throws:
IOException
-
getServerVersion
- Throws:
IOException
-
getSupportedGroups
- Throws:
IOException
-
getSelectedCipherSuite
- Throws:
IOException
-
getServerExtensions
- Throws:
IOException
-
getServerExtensionsForConnection
- Throws:
IOException
-
getServerSupplementalData
- Throws:
IOException
-
getCredentials
Return server credentials to use. The returned value may be null, or else it MUST implement exactly one ofTlsCredentialedAgreement,TlsCredentialedDecryptor, orTlsCredentialedSigner, depending on the key exchange that was negotiated.- Returns:
- a TlsCredentials object or null for anonymous key exchanges
- Throws:
IOException
-
getCertificateStatus
This method will be called (only) ifSecurityParameters.getStatusRequestVersion()is non-zero, meaning the client asked for a stapled response and the server undertook to answer: up to (D)TLS 1.2, that it echoed an extension of type "status_request" (RFC 6066 sec. 8. Certificate Status Request) or "status_request_v2" (RFC 6961 sec. 2.2. Multiple Certificate Status Request Record) with empty "extension_data" in the extended server hello; in TLS 1.3, simply that the client offered "status_request".The status request version says which of the two shapes the client will accept; returning the other one is a fatal alert at the client:
- 1 – "status_request". Return a
CertificateStatusType.ocspstatus carrying a single response, for the end-entity certificate. - 2 – "status_request_v2" was echoed. Return a
CertificateStatusType.ocsp_multistatus carrying one entry per certificate in the chain that was sent, in the same order, with a null entry wherever no response is available.
AbstractTlsServer.allowCertificateStatus()(defaults to true) andAbstractTlsServer.allowMultiCertStatus()(defaults to false).How the returned status reaches the client depends on the negotiated version. Up to (D)TLS 1.2 it is sent as a handshake message of type "certificate_status", for the whole chain at once. In TLS 1.3 there is no such message: the response travels in a "status_request" extension of the
CertificateEntrycontaining the certificate it answers for (RFC 8446 sec. 4.4.2.1), and the protocol distributes what this callback returns across those entries - anCertificateStatusType.ocspstatus answering for the end-entity certificate, anCertificateStatusType.ocsp_multistatus answering positionally, entryiof its list for certificateiof the chain. So a TLS 1.3 server with a response for more than the end-entity certificate returns the ocsp_multi shape even though the status request version is 1. An entry the server has itself given a "status_request" extension - by attaching it to theCertificateits credentials supply, which was previously the only way to staple in TLS 1.3 - is left as it stands.OCSPStaplingServerExamplein the misc module is a worked example.- Returns:
- A
CertificateStatusto be sent to the client (or null for none). - Throws:
IOException
- 1 – "status_request". Return a
-
getCertificateRequest
- Throws:
IOException
-
getPSKIdentityManager
- Throws:
IOException
-
getSRPLoginParameters
- Throws:
IOException
-
getDHConfig
- Throws:
IOException
-
getECDHConfig
- Throws:
IOException
-
processClientSupplementalData
- Throws:
IOException
-
notifyClientCertificate
Called by the protocol handler to report the client certificate, only ifgetCertificateRequest()returned non-null. Note: this method is responsible for certificate verification and validation.- Parameters:
clientCertificate- the effective client certificate (may be an empty chain).- Throws:
IOException
-
getNewSessionTicket
RFC 5077 3.3. NewSessionTicket Handshake Message.This method will be called (only) if a NewSessionTicket extension was sent by the server. See RFC 5077 4. Recommended Ticket Construction for recommended format and protection.
- Returns:
- The ticket.
- Throws:
IOException
-