Skip to content

Commit bf91b37

Browse files
author
kasemir
committed
Log client's security info
1 parent f766a9c commit bf91b37

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

core/pva/src/main/java/org/epics/pva/common/SecureSockets.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ public static Socket createClientSocket(final InetSocketAddress address, final b
191191
//
192192
// #1: ObjectId: 1.3.6.1.4.1.37427.1 Criticality=false
193193
// 0000: 43 45 52 54 3A 53 54 41 54 55 53 3A 64 30 62 62 CERT:STATUS:d0bb...
194-
//
194+
//
195195
// Certificate[2]:
196196
// Owner: OU=EPICS Certificate Authority, O=ca.epics.org, C=US, CN=EPICS Root CA
197197
// Issuer: OU=EPICS Certificate Authority, O=ca.epics.org, C=US, CN=EPICS Root CA

core/pva/src/main/java/org/epics/pva/server/ServerTCPHandler.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,20 @@
1212
import java.net.InetSocketAddress;
1313
import java.net.Socket;
1414
import java.nio.ByteBuffer;
15+
import java.security.cert.Certificate;
16+
import java.security.cert.X509Certificate;
1517
import java.util.Objects;
1618
import java.util.logging.Level;
1719

20+
import javax.net.ssl.SSLSession;
21+
import javax.net.ssl.SSLSocket;
22+
1823
import org.epics.pva.common.CommandHandlers;
1924
import org.epics.pva.common.PVAAuth;
2025
import org.epics.pva.common.PVAHeader;
2126
import org.epics.pva.common.RequestEncoder;
2227
import org.epics.pva.common.SearchResponse;
28+
import org.epics.pva.common.SecureSockets;
2329
import org.epics.pva.common.SecureSockets.TLSHandshakeInfo;
2430
import org.epics.pva.common.TCPHandler;
2531
import org.epics.pva.data.PVASize;
@@ -68,6 +74,30 @@ public ServerTCPHandler(final PVAServer server, final Socket client, final TLSHa
6874
this.server = Objects.requireNonNull(server);
6975
this.tls_info = tls_info;
7076

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+
71101
server.register(this);
72102
startReceiver();
73103
startSender();

0 commit comments

Comments
 (0)