Error: "Subject Alternative Name Missing" or NET :: ERR_CERT_COMMON_NAME_INVALID or "Your connection is not private"
JCP - CryptoPro Java Provider
KeyStore - CertStore
KeyStore - FloppyStore
KeyStore - HDImageStore
KeyStore - MemoryStore
KeyStore - MemoryStore0- MemoryStore9
KeyStore - OCFBase
JCSP - CryptoPro Java CSP Provider
KeyStore β FLASH
KeyStore - HDIMAGE
KeyStore β REGISTRY
KeyStore β ARDS JaCarta
KeyStore β Aladdin Token JC
<property name="java.protocol.handler.pkgs" value="javax.net.ssl"/> <property name="sun.security.ssl.allowUnsafeRenegotiation" value="true"/> <property name="java.util.logging.ConsoleHandler.level" value="ALL"/> <property name="javax.net.ssl.keyStoreProvider" value="JCP"/> <property name="javax.net.ssl.keyStoreType" value="HDImageStore"/> <property name="javax.net.ssl.keyStorePassword" value="myPass"/> <property name="javax.net.ssl.trustStoreProvider" value="JCP"/> <property name="javax.net.ssl.trustStoreType" value="HDImageStore"/> <property name="javax.net.ssl.trustStorePassword" value="myPass"/> <property name="javax.net.ssl.trustStore" value="../standalone/configuration/truststore.cpks"/> <property name="ru.CryptoPro.ssl.SSLLogger.level" value="FINE"/> <property name="ru.CryptoPro.ssl.SSLLogger.handlers" value="java.util.logging.ConsoleHandler"/> <property name="ru.CryptoPro.reprov.enableCRLDP" value="true"/> <property name="com.sun.security.enableCRLDP" value="true"/> <property name="com.ibm.security.enableCRLDP" value="true"/> <property name="ocsp.enable" value="false"/> <property name="com.sun.net.ssl.checkRevocation" value="false"/> <property name="javax.net.ssl.supportGVO" value="true"/>
<management> <security-realms>
<security-realm name="SecureRealm"> <server-identities> <ssl protocol="TLSv1.2"> <keystore path="ssl-keystore.jks" relative-to="jboss.server.config.dir" keystore-password="myPass" alias="my_domain_net"/> </ssl> </server-identities> <authentication> <truststore path="ssl-truststore.jks" relative-to="jboss.server.config.dir" keystore-password="myPass"/> </authentication> </security-realm>
<subsystem xmlns="urn:jboss:domain:undertow:3.1"> <buffer-cache name="default"/> <server name="default-server">
<http-listener name="default" max-post-size="104857600" socket-binding="http"/>
<https-listener name="https" verify-client="REQUESTED" security-realm="SecureRealm" socket-binding="https"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
<socket-binding name="https" port="${jboss.https.port:19443}"/>
<subsystem xmlns="urn:jboss:domain:undertow:3.1"> <buffer-cache name="default"/> <server name="default-server">
<host name="default-host" alias="localhost">
setting up your host: <host name="myApp" alias="my.domain.net "> <location name="/" handler="welcome-content"/> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> </host>
<subsystem xmlns="urn:jboss:domain:security:1.2"> <security-domains>
<security-domain name="myApp" cache-type="default"> <authentication> <login-module code="CertificateRoles" flag="required"> <module-option name="verifier" value="org.jboss.security.auth.certs.AnyCertVerifier"/> <module-option name="securityDomain" value="myApp"/> <module-option name="rolesProperties" value="file:/JBOSS/jboss-eap-7.0/standalone/configuration/apps/myApp/roles.properties"/> </login-module> </authentication> <jsse keystore-password="myPass" keystore-url="file:/JBOSS/jboss-eap-7.0/standalone/configuration/ssl-keystore.jks" truststore-password="myPass" truststore-url="file:/JBOSS/jboss-eap-7.0/standalone/configuration/ssl-truststore.jks" client-auth="true"/> </security-domain>
#
# user=role1,role2,...
#
C\=RU,\ L\=Moscow,\ O\=Alfabank,\ OU\=ORRPP,\ CN\=Vasiliy\ Burmistrov=admin
C\=RU,\ L\=Moscow,\ O\=Alfabank,\ OU\=ORRPP,\ CN\=Ivan\ Petrov=user
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd"> <jboss-web> <security-domain>myApp</security-domain> <virtual-host>myApp</virtual-host> </jboss-web>
<security-constraint> <web-resource-collection> <web-resource-name>myApp</web-resource-name> <url-pattern>/ui1/*</url-pattern> <url-pattern>/ui2/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>*</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
<login-config> <auth-method>CLIENT-CERT</auth-method> <realm-name>myApp</realm-name> </login-config>
X509Certificate[] certChain = (X509Certificate[]) request.getAttribute("javax.servlet.request.X509Certificate"); X509Certificate userCert = certChain[0];
package ru.alfabank.orrpp.common.alfaca.ws; import java.io.FileInputStream; import java.io.IOException; import java.security.KeyStore; import java.security.PrivateKey; import java.security.cert.X509Certificate; import java.util.Hashtable; import java.util.logging.Logger; import javax.net.ssl.KeyManager; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; import org.apache.axis.components.net.JSSESocketFactory; import org.apache.axis.components.net.SecureSocketFactory; /** * SSL socket factory. */ public class SocketFactoryImpl extends JSSESocketFactory implements SecureSocketFactory { public SocketFactoryImpl(Hashtable attributes) { super(attributes); } private static final Logger LOGGER = Logger.getLogger(SocketFactoryImpl.class.getName()); private static final String SIGNER_KEY_ALIAS = "signer_CA"; private static final String TRUST_CERT_ALIAS = "trust_CA"; private static final char[] PASSWORD = "myPass".toCharArray(); /** * Read the keystore, init the SSL socket factory * * @throws IOException */ protected void initFactory() throws IOException { try { //Configuration specified in wsdd. SSLContext context = getContext(); sslFactory = context.getSocketFactory(); } catch (Exception e) { if (e instanceof IOException) { throw (IOException) e; } throw new IOException(e.getMessage()); } } /** * gets a SSL Context * * @return SSLContext * @throws Exception */ protected SSLContext getContext() throws Exception { System.setProperty("ssl.KeyManagerFactory.algorithm", "GostX509"); System.setProperty("ssl.TrustManagerFactory.algorithm", "GostX509"); System.setProperty("ssl.SocketFactory.provider", "ru.CryptoPro.ssl.SSLSocketFactoryImpl"); System.setProperty("ssl.ServerSocketFactory.provider", "ru.CryptoPro.ssl.SSLServerSocketFactoryImpl"); System.setProperty("ru.CryptoPro.ssl.Provider", "JCP"); System.out.println("javax.net.ssl.trustStore: " + System.getProperty("javax.net.ssl.trustStore")); KeyStore trustStore = KeyStore.getInstance(System.getProperty("javax.net.ssl.trustStoreType")); String trustStoreFileName = System.getProperty("javax.net.ssl.trustStore"); trustStore.load(trustStoreFileName == null ? null : new FileInputStream(trustStoreFileName), System.getProperty("javax.net.ssl.trustStorePassword").toCharArray()); KeyStore ks = KeyStore.getInstance(System.getProperty("javax.net.ssl.keyStoreType")); String keystoreFileName = System.getProperty("javax.net.ssl.keyStore"); ks.load(keystoreFileName == null ? null : new FileInputStream(keystoreFileName), System.getProperty("javax.net.ssl.keyStorePassword").toCharArray()); X509Certificate cert = (X509Certificate) ks.getCertificate(SIGNER_KEY_ALIAS); LOGGER.info("Signer found: " + ((X509Certificate) cert).getSubjectX500Principal().getName()); PrivateKey privateKey = (PrivateKey) ks.getKey(SIGNER_KEY_ALIAS, PASSWORD); X509Certificate trustCert = (X509Certificate) trustStore.getCertificate(TRUST_CERT_ALIAS); LOGGER.info("Trust found: " + ((X509Certificate) trustCert).getSubjectX500Principal().getName()); TrustManagerFactory tmf = TrustManagerFactory.getInstance("GostX509"); tmf.init(trustStore); SSLContext context = SSLContext.getInstance("GostTLS", "JTLS"); context.init(new KeyManager[] {new KeyManagerImpl(SIGNER_KEY_ALIAS, privateKey, new X509Certificate[] {cert})}, tmf.getTrustManagers(), null); return context; } }
AxisProperties.setProperty("axis.socketSecureFactory", "ru.alfabank.orrpp.common.alfaca.ws.SocketFactoryImpl");
2017-10-12 17:44:13,376 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.security.security-domain.myApp: org.jboss.msc.service.StartException in service jboss.security.security-domain.myApp: WFLYSEC0012: Unable to start the SecurityDomainService service
at org.jboss.as.security.service.SecurityDomainService.start(SecurityDomainService.java:105)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:2032)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1955)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.KeyStoreException: Default store provider (keyStore) is SUN but default config provider (cpSSL) is JCP. Check settings on the tab 'Algorithms' of JCP Pane.
at ru.CryptoPro.ssl.r.(Unknown Source)
at ru.CryptoPro.ssl.KeyManagerFactoryImpl.engineInit(Unknown Source)
at javax.net.ssl.KeyManagerFactory.init(Unknown Source)
at org.jboss.security.JBossJSSESecurityDomain.loadKeyAndTrustStore(JBossJSSESecurityDomain.java:488)
at org.jboss.security.JBossJSSESecurityDomain.reloadKeyAndTrustStore(JBossJSSESecurityDomain.java:335)
at org.jboss.as.security.service.SecurityDomainService.start(SecurityDomainService.java:102)
... 5 more
#ssl.KeyManagerFactory.algorithm=GostX509
#ssl.TrustManagerFactory.algorithm=GostX509
ssl.KeyManagerFactory.algorithm=SunX509
ssl.TrustManagerFactory.algorithm=PKIX
Source: https://habr.com/ru/post/340028/
All Articles