|
12 | 12 | import java.net.InetSocketAddress; |
13 | 13 | import java.net.Socket; |
14 | 14 | import java.nio.ByteBuffer; |
| 15 | +import java.security.cert.Certificate; |
| 16 | +import java.security.cert.X509Certificate; |
15 | 17 | import java.util.Objects; |
16 | 18 | import java.util.logging.Level; |
17 | 19 |
|
| 20 | +import javax.net.ssl.SSLSession; |
| 21 | +import javax.net.ssl.SSLSocket; |
| 22 | + |
18 | 23 | import org.epics.pva.common.CommandHandlers; |
19 | 24 | import org.epics.pva.common.PVAAuth; |
20 | 25 | import org.epics.pva.common.PVAHeader; |
21 | 26 | import org.epics.pva.common.RequestEncoder; |
22 | 27 | import org.epics.pva.common.SearchResponse; |
| 28 | +import org.epics.pva.common.SecureSockets; |
23 | 29 | import org.epics.pva.common.SecureSockets.TLSHandshakeInfo; |
24 | 30 | import org.epics.pva.common.TCPHandler; |
25 | 31 | import org.epics.pva.data.PVASize; |
@@ -68,6 +74,30 @@ public ServerTCPHandler(final PVAServer server, final Socket client, final TLSHa |
68 | 74 | this.server = Objects.requireNonNull(server); |
69 | 75 | this.tls_info = tls_info; |
70 | 76 |
|
| 77 | + // Log client's security info |
| 78 | + if (tls_info != null && |
| 79 | + client instanceof SSLSocket socket && |
| 80 | + logger.isLoggable(Level.FINE)) |
| 81 | + { |
| 82 | + final SSLSession session = socket.getSession(); |
| 83 | + logger.log(Level.FINE, "Client name: '" + SecureSockets.getPrincipalCN(session.getPeerPrincipal()) + "'"); |
| 84 | + for (Certificate cert : session.getPeerCertificates()) |
| 85 | + if (cert instanceof X509Certificate x509) |
| 86 | + { |
| 87 | + logger.log(Level.FINE, "* " + x509.getSubjectX500Principal()); |
| 88 | + if (session.getPeerPrincipal().equals(x509.getSubjectX500Principal())) |
| 89 | + logger.log(Level.FINE, " - Client CN"); |
| 90 | + if (x509.getBasicConstraints() >= 0) |
| 91 | + logger.log(Level.FINE, " - Certificate Authority"); |
| 92 | + logger.log(Level.FINE, " - Expires " + x509.getNotAfter()); |
| 93 | + if (x509.getSubjectX500Principal().equals(x509.getIssuerX500Principal())) |
| 94 | + logger.log(Level.FINE, " - Self-signed"); |
| 95 | + |
| 96 | + byte[] value = x509.getExtensionValue("1.3.6.1.4.1.37427.1"); |
| 97 | + logger.log(Level.FINE, " - Status PV: " + SecureSockets.decodeDERString(value)); |
| 98 | + } |
| 99 | + } |
| 100 | + |
71 | 101 | server.register(this); |
72 | 102 | startReceiver(); |
73 | 103 | startSender(); |
|
0 commit comments