Message Security Layer
JavaScript Java Other
wmiaw Merge pull request #276 from Netflix/release-mastertoken
Correct (hopefully) master token lock cleanup in MslControl.
Latest commit 62532cf May 31, 2018
Permalink
Failed to load latest commit information.
.idea Remove .idea files from repository as they are no longer compatible w… Mar 30, 2016
core Merge pull request #276 from Netflix/release-mastertoken May 30, 2018
examples Merge branch 'master' of github.com:Netflix/msl May 30, 2018
gradle/wrapper Update to Gradle v4.3.1 and Nebula v4.1.0. Dec 12, 2017
integ-tests Update package.json version to 1.1222.0. May 25, 2018
tests Merge branch 'master' of github.com:Netflix/msl May 30, 2018
.gitignore Ignore NodeJS modules and C++ Eclipse build paths. Apr 14, 2017
.travis.yml Switch Travis build to Oracle JDK 8. (Gradle target remains Java 7.) Sep 20, 2017
CHANGELOG.md Add in Required files per internal "OSS Build and Publish" page. Aug 18, 2015
LICENSE Add in Required files per internal "OSS Build and Publish" page. Aug 18, 2015
OSSMETADATA adding OSSMETADATA for NetflixOSS tracking Dec 11, 2015
README.md Merge branch 'master' into node-js Sep 1, 2017
build.gradle Update to Gradle v4.3.1 and Nebula v4.1.0. Dec 12, 2017
buildViaTravis.sh Travis Jun 2, 2016
findbugs-exclude.xml Saving progress, integ-tests are failing Jul 23, 2015
gradlew Update Gradle scripts. Mar 22, 2017
gradlew.bat Update Gradle scripts. Mar 22, 2017
installViaTravis.sh Travis Jun 2, 2016
java2js_regexes.rtf Migrate Java unit tests to new encoder abstraction and fix Java code … Jan 22, 2016
overview-public.html Point Javadoc overview HTML to GitHub documentation. Oct 3, 2014
settings.gradle Initial commit of WebSocket push example. Nov 20, 2017

README.md

Build Status

Message Security Layer

MSL Logo

Message Security Layer (MSL) is an extensible and flexible secure messaging framework that can be used to transport data between two or more communicating entities. Data may also be associated with specific users, and treated as confidential or non-replayable if so desired.

Documentation

The MSL Framework provides a complete description of the framework and its implementation requirements. The Configuration Guide presents some common client and server MSL configurations. The framework documentation and configuration guide were reviewed by an external security firm. No issues were identified.

The set of public interfaces and classes an application must implement and use is documented in the Public Javadoc. Documentation on all of the code, including internal classes and private methods, can be found in the full Javadoc.

For questions and support please contact Wesley Miaw directly. Bugs and feature requests should be filed in the Issue Tracker.

Third-Party Libraries

The Java MSL code base requires the org.json and Bouncy Castle libraries. The unit tests require JUnit 4 and Hamcrest. The integration tests require TestNG.

The JavaScript MSL code base includes some third-party libraries within the lib/ directory, most notably the Clarinet parser and jsrsasign.

All third-party libraries are subject to their respective license agreements.

Getting Started

To build an application that uses MSL for communication, you must read through and understand the MSL Framework. This is necessary because unlike other security protocols and libraries, you must make choices about how to secure your communication and authenticate your entities and users. The Configuration Guide can help you make those decisions.

The application interface to the MSL stack is MslControl. The application configuration for a single MSL network is an instance of MslContext. Your application may participate in multiple MSL networks and therefore have multiple instances of MslContext but only one MslControl should be used. Message-specific configuration, such as the user or security properties of that message, are specified in individual instances of MessageContext.

Java

IntelliJ IDEA users should import the Java MSL code as a Gradle project.

Eclipse users should use the Gradle IDE (available in the Eclipse Marketplace) and Web Tools Platform (included with the Eclipse IDE for Java EE developers) to import the Java MSL code as a Gradle project.

An example server is provided under examples/simple/src/main/java/server/. The Eclipse Gradle plugin will import this project as a web project that can be deployed onto a Tomcat server. IntelliJ users must manually configure a run configuration to deploy the project artifact into /msl-example-server. The example server is a J2EE servlet that will respond to requests from the example JavaScript client. The example server MSL configuration is specific to this server and should not be used to configure your application, but it can be used as the basis for doing so.

Integration tests are provided under integ-tests/src/main/java/. These tests can be run using the integ-tests Gradle target test. The Eclipse Gradle plugin will import this project as a web project that can be deployed onto a Tomcat server. IntelliJ users must manually configure a run configuration to deploy the project artifact into /msl-test-server.

A command line client and server is provided under examples/mslcli/src/main/java/. The command line client can be configured to work with any MSL server. The command line server is an example MSL server that must be run from the command line. See examples/mslcli/readme.txt for more details.

You may need to install the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files to use cryptographic keys above a certain size.

JavaScript

The JavaScript MSL code base assumes a JavaScript execution environment that supports the latest Web Crypto API specification. If you are using a web browser you may need to enable experimental features or feature flags to enable Web Crypto.

  • Chrome Browser 37+
    For earlier versions: chrome://flags/#enable-experimental-web-platform-features
    On Linux libnss 3.16.2+ must be separately installed.
  • Edge
  • Firefox 34+
    For earlier versions: about:config dom.webcrypto.enabled
  • Internet Explorer 11+
  • Safari 8+

Your browser may not support all Web Crypto API algorithms, key sizes, and features. If you encounter a problem with a Web Crypto operation please check the release notes for your browser version to determine if it supports what you are trying to do.

To include the JavaScript MSL stack in your JavaScript application you must include all of the MSL JavaScript source files required by your MSL configuration. An example list of the required source files can be found in src/test/javascript/msltests.html.

An example client is provided under src/examples/simple/src/main/javascript/client/. The example client is a web page that will send requests to the example Java server. The example client MSL configuration is specific to this client and should not be used to configure your application, but it can be used as the basis for doing so.

LICENSE

Copyright 2014 Netflix, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.