<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Stroom – certificate</title>
    <link>/tags/certificate/</link>
    <description>Recent content in certificate on Stroom</description>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Mon, 12 Jul 2021 00:00:00 +0000</lastBuildDate>
    
	  <atom:link href="/tags/certificate/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: SSL Certificate Generation</title>
      <link>/docs/howtos/install/installcertificateshowto/</link>
      <pubDate>Mon, 12 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>/docs/howtos/install/installcertificateshowto/</guid>
      <description>
        
        
        &lt;h2 id=&#34;assumptions&#34;&gt;Assumptions&lt;/h2&gt;
&lt;p&gt;The following assumptions are used in this document.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the user has reasonable RHEL/Centos System administration skills&lt;/li&gt;
&lt;li&gt;installations are on Centos 7.3 minimal systems (fully patched)&lt;/li&gt;
&lt;li&gt;either a Stroom Proxy or Stroom Application has already been deployed&lt;/li&gt;
&lt;li&gt;processing node names are &lt;code&gt;stroomp00.strmdev00.org&lt;/code&gt; and &lt;code&gt;stroomp01.strmdev00.org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;the first node, &lt;code&gt;stroomp00.strmdev00.org&lt;/code&gt; also has a CNAME &lt;code&gt;stroomp.strmdev00.org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;in the scenario of a Stroom Forwarding Proxy, the node name is &lt;code&gt;stroomfp0.strmdev00.org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;in the scenario of a Stroom Standalone Proxy, the node name is &lt;code&gt;stroomsap0.strmdev00.org&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;stroom runs as user &lt;code&gt;stroomuser&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;the use of self signed certificates is appropriate for test systems, but users should consider appropriate CA infrastructure in production environments&lt;/li&gt;
&lt;li&gt;in this document, when a screen capture is documented, data entry is identified by the data surrounded by &lt;code&gt;&amp;lt;__&lt;/code&gt; &lt;code&gt;__&amp;gt;&lt;/code&gt; . This excludes enter/return presses.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;create-certificates&#34;&gt;Create certificates&lt;/h2&gt;
&lt;p&gt;The first step is to establish a self signed certificate for our Stroom service. If you have a certificate server, then certainly gain an
appropriately signed certificate. For this HOWTO, we will stay with a self signed solution and hence no certificate authorities are
involved. If you are deploying a cluster, then you will only have one certificate for all nodes. We achieve this by setting up an
alias for the first node in the cluster and then use that alias for addressing the cluster. That is, we have set up a
CNAME, &lt;code&gt;stroomp.strmdev00.org&lt;/code&gt; for &lt;code&gt;stroomp00.strmdev00.org&lt;/code&gt;. This means within the web service we deploy, the ServerName will be &lt;code&gt;stroomp.strmdev00.org&lt;/code&gt;
on each node. Since it&amp;rsquo;s one certificate we only need to set it up on one node then deploy the certificate key files to other nodes.&lt;/p&gt;
&lt;p&gt;As the certificates will be stored in the &lt;code&gt;stroomuser&#39;s&lt;/code&gt; home directory, we become the stroom user

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;sudo -i -u stroomuser&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h3 id=&#34;use-host-variable&#34;&gt;Use host variable&lt;/h3&gt;
&lt;p&gt;To make things simpler in the following bash extracts, we establish the bash variable &lt;code&gt;H&lt;/code&gt; to be used in filename generation. The variable name
is set to the name of the host (or cluster alias) your are deploying the certificates on. In our multi node HOWTO example we are using, we
would use the host CNAME &lt;code&gt;stroomp&lt;/code&gt;. Thus we execute&lt;/p&gt;

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;export H=stroomp&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Note in our the Stroom Forwarding Proxy HOWTO we would use the name &lt;code&gt;stroomfp0&lt;/code&gt;. In the case of our Standalone Proxy we would use &lt;code&gt;stroomsap0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We set up a directory to house our certificates via

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;cd ~stroomuser
rm -rf stroom-jks
mkdir -p stroom-jks stroom-jks/public stroom-jks/private
cd stroom-jks&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Create a server key for Stroom service (enter a password when prompted for both initial and verification prompts)

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;openssl genrsa -des3 -out private/$H.key 2048&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

as per&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Generating RSA private key, 2048 bit long modulus
.................................................................+++
...............................................+++
e is 65537 (0x10001)
Enter pass phrase for private/stroomp.key: &amp;lt;__ENTER_SERVER_KEY_PASSWORD__&amp;gt;
Verifying - Enter pass phrase for private/stroomp.key: &amp;lt;__ENTER_SERVER_KEY_PASSWORD__&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Create a signing request. The two important prompts are the password and Common Name. All the rest can use the defaults offered.
The requested password is for the server key and you should use the host (or cluster alias) your are deploying the certificates on for
the Common Name. In the output below we will assume a multi node cluster certificate is being generated, so will use &lt;code&gt;stroomp.strmdev00.org&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;
  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;openssl req -sha256 -new -key private/$H.key -out $H.csr&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

as per&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Enter pass phrase for private/stroomp.key: &amp;lt;__ENTER_SERVER_KEY_PASSWORD__&amp;gt;
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter &#39;.&#39;, the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server&#39;s hostname) []:&amp;lt;__ stroomp.strmdev00.org __&amp;gt; 
Email Address []:

Please enter the following &#39;extra&#39; attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We now self sign the certificate (again enter the server key password)

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;openssl x509 -req -sha256 -days 720 -in $H.csr -signkey private/$H.key -out public/$H.crt&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

as per&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd/CN=stroomp.strmdev00.org
Getting Private key
Enter pass phrase for private/stroomp.key: &amp;lt;__ENTER_SERVER_KEY_PASSWORD__&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and noting the &lt;code&gt;subject&lt;/code&gt; will change depending on the host name used when generating the signing request.&lt;/p&gt;
&lt;p&gt;Create insecure version of private key for Apache auto-boot (you will again need to enter the server key password)

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;openssl rsa -in private/$H.key -out private/$H.key.insecure&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

as per&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Enter pass phrase for private/stroomp.key: &amp;lt;__ENTER_SERVER_KEY_PASSWORD__&amp;gt;
writing RSA key
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and then move the insecure keys as appropriate

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;mv private/$H.key private/$H.key.secure
chmod 600 private/$H.key.secure
mv private/$H.key.insecure private/$H.key&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;We have now completed the creation of our certificates and keys.&lt;/p&gt;
&lt;h3 id=&#34;replication-of-keys-directory-to-other-nodes&#34;&gt;Replication of Keys Directory to other nodes&lt;/h3&gt;
&lt;p&gt;If you are deploying a multi node Stroom cluster, then you would replicate the directory &lt;code&gt;~/stroomuser/stroom-jks&lt;/code&gt; to each node in the cluster. That is,
tar it up, copy the tar file to the other node(s) then &lt;code&gt;untar&lt;/code&gt; it. We can make use of the other node&amp;rsquo;s mounted file system for this process.
That is one could execute the commands on the first node, where we created the certificates

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;cd ~stroomuser
tar cf stroom-jks.tar stroom-jks
mv stroom-jks.tar /stroomdata/stroom-data-p01&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

then on the another node, say &lt;code&gt;stroomp01.strmdev00.org&lt;/code&gt;, as the stroomuser we extract the data.

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;sudo -i -u stroomuser
cd ~stroomuser
tar xf /stroomdata/stroom-data-p01/stroom-jks.tar &amp;amp;&amp;amp; rm -f /stroomdata/stroom-data-p01/stroom-jks.tar&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h3 id=&#34;protection-ownership-and-selinux-context&#34;&gt;Protection, Ownership and SELinux Context&lt;/h3&gt;
&lt;p&gt;Now ensure protection, ownership and SELinux context for these key files on &lt;strong&gt;ALL&lt;/strong&gt; nodes via

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;chmod 700 ~stroomuser/stroom-jks/private ~stroomuser/stroom-jks
chown -R stroomuser:stroomuser ~stroomuser/stroom-jks
chcon -R --reference /etc/pki ~stroomuser/stroom-jks&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;h2 id=&#34;stroom-proxy-to-proxy-key-and-trust-stores&#34;&gt;Stroom Proxy to Proxy Key and Trust Stores&lt;/h2&gt;
&lt;p&gt;In order for a Stroom Forwarding Proxy to communicate to a central Stroom proxy over https, the JVM running the forwarding proxy needs
relevant keystores set up.&lt;/p&gt;
&lt;p&gt;One would set up a Stroom&amp;rsquo;s forwarding proxy SSL certificate as per &lt;a href=&#34;#create-certificates&#34;&gt;above&lt;/a&gt;, with the change that the
hostname would be different. That is, in the initial setup, we would set the hostname variable &lt;code&gt;H&lt;/code&gt; to be the hostname of the forwarding
proxy. Lets say it is &lt;code&gt;stroomfp0&lt;/code&gt; thus we would set&lt;/p&gt;
&lt;p&gt;
  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;export H=stroomfp0&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

and then proceed as &lt;a href=&#34;#use-host-variable&#34;&gt;above&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note that you also need the public key of the central Stroom server you will be connecting to. For the following, we will assume
the central Stroom proxy is the &lt;code&gt;stroomp.strmdev00.org&lt;/code&gt; server and its public key is stored in the file &lt;code&gt;stroomp.crt&lt;/code&gt;. We will store
this file on the forwarding proxy in &lt;code&gt;~stroomuser/stroom-jks/public/stroomp.crt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So once you have created the forwarding proxy server&amp;rsquo;s SSL keys and have deployed the central proxy&amp;rsquo;s public key, we next
need to convert the proxy server&amp;rsquo;s SSL keys into DER format. This is done by executing the following.

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;cd ~stroomuser/stroom-jks
export H=stroomfp0
export S=stroomp
rm -f ${H}_k.jks ${S}_t.jks
H_k=${H}
S_k=${S}
# Convert public key
openssl x509 -in public/$H.crt -inform PERM -out public/$H.crt.der -outform DER&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;When you convert the local server&amp;rsquo;s private key, you will be prompted for the server key password.

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;# Convert the local server&amp;#39;s Private key
openssl pkcs8 -topk8 -nocrypt -in private/$H.key.secure -inform PEM -out private/$H.key.der -outform DER&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;as per&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;Enter pass phrase for private/stroomfp0.key.secure: &amp;lt;__ENTER_SERVER_KEY_PASSWORD__&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We now import these keys into our Key Store. As part of the Stroom Proxy release, an Import Keystore application has been provisioned. We identify where it&amp;rsquo;s found with the command&lt;/p&gt;

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;find ~stroomuser/*proxy -name &amp;#39;stroom*util*.jar&amp;#39; -print | head -1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;which should return &lt;em&gt;/home/stroomuser/stroom-proxy/lib/stroom-proxy-util-v5.1-beta.10.jar&lt;/em&gt; or similar depending on the release version.
To make execution simpler, we set this as a shell variable as per&lt;/p&gt;

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;Stroom_UTIL_JAR=`find ~/*proxy -name &amp;#39;stroom*util*.jar&amp;#39; -print | head -1`&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;We now create the keystore and import the proxy&amp;rsquo;s server key&lt;/p&gt;

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;java -cp ${Stroom_UTIL_JAR} stroom.util.cert.ImportKey keystore=${H}_k.jks keypass=$H alias=$H keyfile=private/$H.key.der certfile=public/$H.crt.der&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;as per&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;One certificate, no chain
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We now import the destination server&amp;rsquo;s public key&lt;/p&gt;

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;keytool -import -noprompt -alias ${S} -file public/${S}.crt -keystore ${S}_k.jks -storepass ${S}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;as per&lt;/p&gt;
&lt;pre&gt;&lt;code class=&#34;language-text&#34;&gt;Certificate was added to keystore
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We now add the key and trust store location and password arguments to our Stroom proxy environment files.&lt;/p&gt;

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;PWD=`pwd`
echo &amp;#34;export JAVA_OPTS=\&amp;#34;-Djavax.net.ssl.trustStore=${PWD}/${S}_k.jks -Djavax.net.ssl.trustStorePassword=${S} -Djavax.net.ssl.keyStore=${PWD}/${H}_k.jks -Djavax.net.ssl.keyStorePassword=${H}\&amp;#34;&amp;#34; &amp;gt;&amp;gt; ~/env.sh
echo &amp;#34;JAVA_OPTS=\&amp;#34;-Djavax.net.ssl.trustStore=${PWD}/${S}_k.jks -Djavax.net.ssl.trustStorePassword=${S} -Djavax.net.ssl.keyStore=${PWD}/${H}_k.jks -Djavax.net.ssl.keyStorePassword=${H}\&amp;#34;&amp;#34; &amp;gt;&amp;gt; ~/env_service.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;At this point you should restart the proxy service. Using the commands&lt;/p&gt;

  






&lt;div class=&#34;code-toolbar&#34;&gt;
  &lt;pre 
    class=&#34;command-line language-bash&#34; 
    data-user=&#34;user&#34; 
    data-host=&#34;localhost&#34; 
    data-continuation-str=&#34;\&#34;
    data-filter-output=&#34;(out)&#34;&gt;&lt;code class=&#34;language-bash&#34;&gt;cd ~stroomuser
source ./env.sh
stroom-proxy/bin/stop.sh
stroom-proxy/bin/start.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;then check the logs to ensure it started correctly.&lt;/p&gt;

      </description>
    </item>
    
  </channel>
</rss>
