<?xml version="1.0" encoding="UTF-8"?>
<!--
   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.
 -->
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

	<properties>
		<title>Using OpenMeetings with RTMPS and HTTPS</title>
		<author email="sebawagner@apache.org">
			OpenMeetings Team
		</author>
	</properties>

	<body>

		<section name="Using OpenMeetings with RTMPS and HTTPS">

			<p>There are 3 ways the client communicates with the server: </p>
			<ul>
				<li>The flash-client uses RTMP protocol to transfer Audio/Video and
					to send and receive the user data (login et cetera) to the server
					and back
				</li>
				<li>The browser uses HTTP protocol to load the SWF and to upload and
					download the files (documents, pdfs, images) to the server and
					back.
				</li>
				<li>The screensharing client uses RTMP protocol to transfer screen
					data and remote control to the server and back
				</li>
			</ul>

		</section>

		<section name="Prerequisites">

			<ul>
				<li>You need OpenMeetings 1.9.x for this, OpenMeetings 1.8.x does
					not
					have those options.
				</li>
				<li>Install OpenMeetings according to the install instructions and
					check that it runs without problems
				</li>
				<li>Rename the existing keystore file red5/conf/keystore to
					keystore.bak
				</li>
			</ul>

		</section>

		<section name="Configuring RTMPS for the Flash Client">

			<ol>
				<li>
					Create a new keystore and key, use the same password for both:<br/>
					(copied from
					<a
						href="http://trac.red5.org/wiki/Documentation/Tutorials/Red5DeveloperTips/SSLTLS%29:"
						rel="nofollow">http://trac.red5.org/wiki/Documentation/Tutorials/Red5DeveloperTips/SSLTLS):</a>
					<div class="xmlcode">
						keytool -keysize 2048 -genkey -alias red5 -keyalg RSA -keystore red5/conf/keystore<br/>
						Enter keystore password:<br/>
						Re-enter new password:<br/>
						What is your first and last name?<br/>
						[Unknown]:  &lt;your hostname, e.g demo.openmeetings.de&gt;<br/>
						What is the name of your organizational unit?<br/>
						[Unknown]:  Dev<br/>
						What is the name of your organization?<br/>
						[Unknown]:  OpenMeetings<br/>
						What is the name of your City or Locality?<br/>
						[Unknown]:  Henderson<br/>
						What is the name of your State or Province?<br/>
						[Unknown]:  Nevada<br/>
						What is the two-letter country code for this unit?<br/>
						[Unknown]:  US<br/>
						Is CN=demo.openmeetings.de, OU=Dev, O=OpenMeetings, L=Henderson, ST=Nevada, C=US correct?<br/>
						[no]:  yes<br/>
						Enter key password for &lt;red5&gt;<br/>
					</div>
				</li>
		
				<li>Generate a CSR: keytool -certreq -keyalg RSA -alias red5 -file
					red5.csr -keystore red5/conf/keystore
				</li>
				<li>Submit CSR to your CA of choice and receive a signed certificate
				</li>
				<li>Import your chosen CA's root certificate into the keystore (may
					need to download it from their site - make sure to get the root CA and
					not the intermediate one): keytool -import -alias root -keystore
					red5/conf/keystore
					-trustcacerts -file root.crt (note: you may receive a warning that
					the certificate already exists in the system wide keystore - import
					anyway)
				</li>
				<li>Import the intermediate certificate(s) you normally receive with
					the certificate:
					keytool -import -alias intermed -keystore red5/conf/keystore -trustcacerts
					-file intermediate.crt
				</li>
				<li>Import the certificate you received: keytool -import -alias red5
					-keystore red5/conf/keystore -trustcacerts -file
					demo.openmeetings.de.crt
				</li>
                <li>
                Create additional certificate as described above.
                Add this certificate to the following keystores: <tt>red5/conf/keystore.screen</tt> and <tt>red5/conf/keystore</tt>.
                </li>
			</ol>

		</section>
		
		<section name="Set up RTMPS">
		
		  <ol>
		      <li>
		      Uncomment <tt>&lt;!-- RTMPS --&gt;</tt> section in <tt>red5/conf/red5-core.xml</tt>
		      </li>

				<li>
					Edit <tt>red5/conf/red5.properties</tt> and set
					<tt>rtmps.port=5443</tt>
					and
					<tt>rtmps.keystorepass=password</tt>
					(password = password you set on your new
					keystore)
				</li>
			
				<li>
					Edit red5/webapps/openmeetings/public/config.xml and set
					<tt>&lt;rtmpsslport&gt;5443&lt;/rtmpsslport&gt;</tt>
					,
					<tt>&lt;useSSL&gt;yes&lt;/useSSL&gt;</tt>
					and
					<tt>&lt;proxyType&gt;best&lt;/proxyType&gt;</tt>
				</li>

				<li>Restart red5 and try to connect - your connection should now be
					made via RTMPS (close port 1935 to be sure)
				</li>   
					  
		  </ol>
		
		</section>

		<section name="SSL for the web interface">
	
			<p>If you want to use SSL for the web interface in addition to RTMPS,
				you need to make some further modifications. This is mainly to secure
				the server against MITM attacks, additionally some other features
				like file uploads also use a plain HTTP connection if this is not
				done. The following instructions assume that you have already set up
				RTMPS successfully. </p>
			<ol>
				<li>
					Edit <tt>red5/conf/jee-container.xml</tt> file:<br/>
					Comment <tt>Tomcat without SSL enabled</tt> section<br/>
					UNComment <tt>Tomcat with SSL enabled</tt> section
				</li>
				<li>
					Edit red5/webapps/openmeetings/public/config.xml and set
					<tt>&lt;protocol&gt;https&lt;/protocol&gt;</tt>
				</li>
				<li>
					Edit red5/webapps/openmeetings/public/config.xml and set
					<tt>red5httpport</tt> to <tt>https</tt> port
				</li>
				<li>In webapps/openmeetings/WEB-INF/conf/axis2.xml add (below the existing http transportReceiver (around line 225))
					<div class="xmlcode">&lt;transportReceiver name="https" class="org.apache.axis2.transport.http.AxisServletListener"&gt;<br/>
    &#160;&#160;&#160;&#160;&lt;parameter name="port"&gt;443&lt;/parameter&gt;<br/>
&lt;/transportReceiver&gt;</div>
				</li>
				<li>Edit red5/conf/red5.properties and set <tt>https.port=443</tt> </li>
				<li>
					Restart red5 and try to connect to
					<a href="https://your.server" rel="nofollow">https://your.server</a>
					- you should be redirected to the OpenMeetings
					app and all access should be via HTTPS or RTMPS (close port 5080 to
					be sure).
				</li>
            </ol>
            
	   </section>

		<section name="Credits">
	
			<p>Credits goto: Nexus and Holger Rabbach for their help and
				contribution and configuration documention! </p>
	
		</section>
	

	</body>

</document>

