NET HISP Reference Implementation Overview

advertisement
NHIN DIRECT
.NET HISP Reference Implementation Overview (versions 1.*)
Project Overview
The .NET HISP Reference Implementation is intended to serve both as an “out of the box” system for
providing NHIN Direct messaging services, and as an extensible set of components that can be
integrated into an existing environment.
The loosely-coupled components that make up the reference implementation include:








The Security Agent that performs S/MIME encoding and decoding, and enforces the NHIN Direct
Security & Trust requirements.
An SMTP gateway that inserts the agent code in front of any standard SMTP email server,
handles error conditions, etc... The gateway can also drop/pickup messages from file system
folders as a loosely-coupled integration point for non-SMTP systems.
A configuration system that holds account, preference and certificate information in a
database, and exposes web services for retrieving and manipulating configurations.
A web-based configuration UI that sits on top of the default configuration system.
A DNS responder service for MX and CERT record distribution.
An audit logging system that accepts audit events for storage.
Miscellaneous utility code such as a DNS resolver, MIME parsing tools used by other
components, and policy enablement engine.
An XDD gateway that enables communication between IHE/NHIN nodes and the NHIN Direct
SMTP backbone.
The following diagram provides an overview of the full implementation; subsequent sections will detail
the functionality, interfaces and dependencies of each component.
License and Dependencies
The reference code is licensed under the BSD license per the terms of the NHIN Direct project.
The code is built to install on Windows Server 2008 and requires use of the built-in SMTP service that
comes with the OS. The built-in configuration database requires the use of the free SQL Server Express
2008, although we do not plan to use any SQL Server-specific database functionality, so other databases
should be usable. No other licensed code is required to run the system.
The code will build against the .NET 3.5 libraries using MSBuild. Mono is not an explicit target of the
reference implementation, although when reasonable we will attempt to use functionality that will build
and run in that environment.
Component Overviews
Each of these components will require their own specifications and documentation. Here we are
providing broad outlines that in particular discuss how the components will fit together from a systems
perspective.
Security Agent
The security agent is a standalone assembly that signs and encrypts outgoing messages, and decrypts
and verifies incoming ones. It does all of its processing synchronously and maintains no state. The toplevel functions provided by the agent simply correspond to these two actions:


ProcessIncomingMessage
ProcessOutgoingMessage
The agent depends on the code embedding the agent to provide implementations of the following
interfaces (defaults are provided as noted):
1. Retrieve configuration information (settings and private keys) for a local address. Also retrieve
instance-level configuration settings. The default implementation calls the reference
Configuration Service.
2. Retrieve public certificates for an address. The default implementation uses the reference DNS
resolver to fetch these certificates as CERT resources.
3. Resolve a certificate chain by walking from a starting certificate up to its root. The default
implementation uses the reference DNS resolver to fetch intermediate certificates.
4. Handle error and exception cases during processing. There is no default implementation of this
interface as handling rules are unique to each different site where the agent may be embedded.
Note that the security agent does NOT perform audit or other logging; it is the responsibility of
the code embedding the agent to do this.
SMTP Gateway
The SMTP Gateway is implemented as an “OnSubmission” transport event handler wired into the
Windows SMTP Service. The business logic for this handler exists in a standalone assembly called
through interop by a thin C++ COM shim that actually is registered with the service and handles
asynchronous behavior and other plumbing.
In the default configuration, the SMTP gateway is configured to sit directly between a “real” SMTP
server and the Internet. The gateway server accepts all incoming mail for local domains, passes it
through the “ProcessingIncomingMessage” method of the security agent, and relays the resulting
message to the real server. The real server accepts outgoing mail from local clients and relays it to the
gateway, which passes it through the “ProcessOutgoingMessage” method of the security agent and then
relays it out to the Internet for delivery.
Addresses may also be configured as “file type” addresses – in which case messages will be dropped to a
file system folder rather than being forward through the SMTP pipeline. The gateway will also monitor a
“pickup” file system folder through which cleartext messages can be submitted for sending.
The gateway server uses the MAIL FROM information to determine if a message is sourced remotely or
locally for purposes of appropriate inbound vs. outbound processing.
The gateway generates error and MDN (message disposition notification) and DSN (delivery status
notification) notifications based on responses from the agent. The contents and features of these can be
managed through configuration.
The SMTP Gateway depends on the following interfaces:
1. Security Agent processing. The default implementation uses the reference security agent
configured with all default interfaces. The Gateway implements error and exception handling
needs of the agent.
2. Retrieve configuration settings. The default implementation uses the reference Configuration
Service.
3. Audit logging. The default implementation uses the reference Audit Log service.
Configuration Service
The configuration service is primarily a simple database with a WCF service brokering access. The web
service is read/write and implements a security model that permits both system administrators and
specific account owners to manage their configurations.
The following schema is for directional reference purposes only; the real version will live in a specific
design document for the configuration service:
Many of the tables reference an “Owner” field --- this is a FK to either the Domains or Addresses table …
the idea being that you can have settings, certificates, etc. at the address or domain level. In general,
there is an inheritance from Addresses to Domains for these tables. However, the behavior is subtly
different and important:
1. The Certificates and Anchors tables behave as follows. When certs are requested for an Address,
if there are any associated with the address, they are returned and processing stops. If there are
none, the associated domain is checked and any certificates there are returned. This is very
important --- because it supports the flexible relationship between org/endpoint certs
required by the Direct specification.
The configuration web service will use simple WCF calls, secured using machine accounts --- access to
the service itself is not user authenticated --- so it should be called by trusted users. The configuration UI
will validate usernames and passwords using a web service created for that purpose.
In addition to utility code for managing certificates, the configuration service relies on the following
interfaces:
1. Audit logging. The default implementation uses the reference Audit Log service.
Configuration UI
The configuration UI is a simple ASP.NET MVC web site used by administrators (both system
administrators and domain/account/address administrators) to manually configure the reference
implementation. The site manages logins and then calls configuration service methods as appropriate.
The configuration UI relies on the following interfaces. Note the UI does NOT rely on audit logging; it
depends on the underlying service to perform auditing as required.
1. Retrieve and set configuration settings. The default implementation relies on the reference
configuration service.
DNS Responder and Web Service
The reference implementation will include a simple DNS responder and DNS web service that answers
MX and CERT requests using information from the configuration store. Not the configuration service
exposes administration to the DNS data in the configuration store while DNS web service is a query only
service.
The DNS responder relies on the following interfaces.
1. Retrieve configuration settings.
2. The default implementation relies on the reference DNS web service.
Monitor Service
Monitor service is an optional service. It contains the following monitoring tasks.
1. Mdn monitor is a collection of jobs. The jobs monitor MDN confirmations from Direct partners.
If a MDN is not retrieve in a specific time period a DSN will be sent to the internal sending client.
Audit Log
The reference audit log implementation will simply send all audit events to the Windows Event Log.
Utility Code
Parsing of Mime, MDN, and DSN messages used by other libraries. Resolvers in the form of DNS and
LDAP. Policy engine used to validate certificates against a policy.
Tools
Four utility tools exist today.
1. ConfigConsole: All administration of the configuration store can be performed from this
command line tool. All commands can be batched up in text files or scripted.
2. AgentConsole: A command line client DNS tool. Use this to test DNS resolution against your
DNS Resolver.
3. AdminConsole: A command line user administration tool. Create credentials for the web based
Admin UI.
4. Trust.Bundler: A trust bundle creator exposed as a PowerShell Cmdlet.
XDD Gateway (.net has only partially implemented this spec)
The reference implementation will also include an XDD gateway service for translating messages
between the SMTP backbone and an IHE/NHIN node. The service will hook into the SMTP gateway using
the loosely-coupled file system folder interface.
At the highest level, the XDD gateway will work as follows:
1. Addresses will be configurable as “file addresses”, meaning that messages sent to that address
should be saved to a file system folder rather than forwarded to a target SMTP server. It will also
be possible to configure this on a system-wide basis for all addresses.
2. SMTP-to-XDD. When a message is saved to the drop folder after agent processing, it will be
picked up by the XDD gateway, converted into an XDD message and sent to the appropriate
endpoint. If the message cannot be “stepped up”, a bounce notification will be sent.
3. XDD-to-SMTP. The reference implementation will include a web service running to listen for
XDD messages coming from locally-configured senders. These messages will be turned into
XDM-packaged SMTP messages and submitted to the SMTP gateway through the file system
pickup folder.
Document History
Joe Shook
Surescripts
3/31/2013
Sean Nolan
Microsoft
8/17/2010
Sean Nolan
Microsoft
7/24/2010
Update diagrams to
include monitor service,
trust bundle tool, trust
bundle client featurs
and db schema
changes.
Edited to update
diagram and misc. for
current understanding
and plans
Initial Draft
Download