Intune EJBCA Connector is a SCEP server that supports request validation through Microsoft Intune and certificate enrollment through EJBCA.
- EJBCA 6 (Developed with version 6.3.1.1)
- Microsoft Intune Tenant
- Java Application Server (Tested with Tomcat 7)
Platform | Status | Notes |
---|---|---|
Android | OK | Tested with Android 8. |
iOS | OK | Tested with iOS 11.4.1. |
Windows | OK | Tested with Windows 10. SCEP Receiver certificate must be issued by the same CA chain as the end entity certificates. |
MacOS X | OK | Tested with MacOS 10.12.6. |
-
Prepare your Microsoft Intune tenant for third-party CA integration as described in the following article:
NOTE: write down the
Application ID
under application settings and theAPI Access Key
that is generated as a part of the article. This information will be needed when configuring the connector. -
Prepare integration with EJBCA and create the following certificates if needed:
- SSL server certificate - Used by Tomcat connector to secure communication from mobile devices. Should be issued as a Java Keystore (JKS).
- SCEP Receiver certificate - Used by Intune EJBCA Connector to secure SCEP messages from mobile devices. Should be issued as a Java Keystore (JKS) and will be returned to mobile devices through the SCEP call
GetCACerts
. - EJBCA Admin certificate - Used by Intune EJBCA Connector to authenticate to EJBCA Web service. Should be issued as a Java Keystore (JKS) and given required administrator permissions.
- EJBCA SSL truststore - Used by Intune EJBCA Connector to communicate to EJBCA Web service. Should be issued as a Java Keystore (JKS). It needs only root and intermediate certificate, do not include the EJBCA server certificate or keys (Optional)
-
Prepare a Tomcat application server that is going to host the web application. It is strongly recommended to setup a secure HTTPS connector, which will be using the SSL server certificate mentioned in step 2.
-
Create configuration in
/etc/intune-ejbca-connector.yml
(See section Configuration). It should be owned and readable only by the application server as it contains sensitive information. -
Deploy
intune-ejbca-connector.war
in to webapps directory of the Tomcat server and start/restart the application server.NOTE: Verify that application as started successfully by opening https://
<hostname>
/intune-ejbca-connector in a browser, assuming a connector has been configured on port 443. It should say Ready to serve! if everything seems OK, otherwise wiew the logfile. -
Setup and assign Intune SCEP profile as described in the following article:
NOTE: SCEP Server URL must be set to the URL of the web application, ex: https://server.somehost.org/intune-ejbca-connector/scep
Configuration is using YAML syntax and the default location that the web application looks for is:
/etc/intune-ejbca-connector.yml
A different location can be specified by setting the Java
system property config.location
when starting the JVM:
-Dconfig.location=/path/to/config.yml
The following shows an example configuration:
intune:
tenant: sometenant.onmicrosoft.com
appId: a01b02c0-3d04-e05f-06a0-7b08c09d10e
appKey: TmloaWwgaGljIHZpZ2lsYXJlIGV0IHJldmVydGFtdXIgYWQgb3BlcmFuZHVtCg==
ejbca:
serviceName: EJBCA 6.3.1.1
serviceUrl: https://ca.somecompany.org:8443/ejbca/ejbcaws/ejbcaws?wsdl
keystorePath: /path/to/ra-admin-keystore.jks
keystorePassword: somepassword
scep:
keystorePath: /opt/intune-ejbca-connector/scepreceiver.jks
keystorePassword: foo123
profile:
certificateAuthority: LCSO_MobileCA
certificateProfile: CP_LCSO_Mobile
endEntityProfile: EEP_LCSO_Mobile
baseDN: OU=Mobiles,O=Lab Certificate Services Org,C=SE
Configuration is organized into different sections. We will now look into more detailed information about each section.
Section (intune:) containing configuration needed in order to connect to Intune service.
Values for appId
and appKey
should be specified as noted in step 1 in Setup Guide above.
Key | Description |
---|---|
tenant | Intune tenant to use (ex. johnnycash.onmicrosoft.com). |
appId | Application ID from Azure. |
appKey | API key to use when authenticating to cloud service. |
Section (ejbca:) containing configuration needed in order to connect to EJBCA.
Key | Description |
---|---|
serviceName | Arbitrary name and version of EJBCA service (ex. EJBCA 6.3.1.1). |
serviceUrl | EJBCA web service endpoint URL. |
keystorePath | Path to java key store containing administrator certificate to use when authenticating to EJBCA web service. |
keystorePassword | Password that protects the keystore and the private key. |
truststorePath | Path to java key store containing root and intermediate certificate to use when communicate to EJBCA web service (Optional) |
truststorePassword | Password that protects the truststore (Optional - required to use truststore) |
sslAlgorithm | SSL Algorithm to use when connecting to EJBCA (Optional - default is TLSv1.2) |
Section (scep:) containing configuration needed for the SCEP service.
Key | Description |
---|---|
keystorePath | Path to java key store containing RA/Receiver certificate, including CA certificate chain, to use during SCEP enrollment. |
keystorePassword | Password that protects the keystore and the private key. |
keystoreAlias | Alias of key to use within key store. If not set the first key entry will be used. (Optional) |
Section (profile:) containing configuration needed to issue certificates from EJBCA.
Key | Description |
---|---|
certificateAuthority | Certificate authority to use when issuing certificates to mobile devices. |
certificateProfile | Certificate profile to use for mobile device certificates. |
endEntityProfile | End entity profile to use for mobile device certificates. |
baseDN | Optional DN string to append to all certificates, ex: "O=Some Company,C=SE". |
Default Log (INFO-level) is written to standard output which will be available in the application server log (eg. catalina.out)
and to a log file named intune-ejbca-connector.log
within the application server directory.
Logging can be customized, ex. to enable DEBUG-level logging, by creating an external log configuration file which is then specified with the following JVM parameter:
-Dlogging.config=/opt/intune-ejbca-connector/logback.groovy
The following shows an example of a log configuration to enable DEBUG-level logging for the connector (Note: This configuration will only print to log file and not standard output).
import org.springframework.boot.logging.logback.ColorConverter
import org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter
conversionRule 'clr', ColorConverter
conversionRule 'wex', WhitespaceThrowableProxyConverter
appender("FILE", FileAppender) {
file = "intune-ejbca-connector.log"
append = true
encoder(PatternLayoutEncoder) {
pattern = '%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} ' +
'%clr(%5p) ' +
'%clr(%-40.40logger{39}){cyan} %clr(:){faint} ' +
'%m%n%wex'
}
}
root(ERROR, ['FILE'])
logger 'org.certificateservices', DEBUG
logger 'com.microsoft.intune', INFO
Copyright (c) 2018 CGI Certificate Services - Released under the GNU Affero General Public License.