Seafile SSL/HTTPS on IIS was a very interesting journey when I was trying to implement such change as it gave me some interesting facts that I have notice not well documented. In this article we will assume that you have already installed a running instance of your Seafile on your Windows Server but was server via HTTP only. So lets get started:
Additional Assumption
- Seafile is running on its default ports 8000 and 8082
- You already know how to get a SSL Certificate and Apply it on your SSL
Settings for your Seafile Server
- seahub_settings.pyFILE_SERVER_ROOT = ‘https://yourdomain.with.ssl/seafhttp’
- seafile.conf
 [fileserver]
 port = 8082[seahub]
 port = 8000
 fastcgi = false
- ccnet.confSERVICE_URL = https://yourdomain.with.ssl/
Settings for your IIS Server
- Install Application Request Routing Cache for your IIS Server via Web Platform Installer or by getting it on the web
- Create a website that will point to yourdomain.with.ssl on port 80 ONLY
- Open the web.config that will be created for that website and enter the following configuration<?xml version=”1.0″ encoding=”UTF-8″?>
 <configuration>
 <system.webServer>
 <rewrite>
 <rules>
 <rule name=”Redirect to HTTPS” enabled=”true” stopProcessing=”true”>
 <match url=”(.*)” />
 <action type=”Redirect” url=”https://{HTTP_HOST}/{R:1}” />
 </rule>
 </rules>
 </rewrite>
 </system.webServer>
 </configuration>
- Create another website that will point to yourdomain.with.ssl on port 443 ONLY
- Open the web.config that will be created for that website and enter the following configuration<?xml version=”1.0″ encoding=”UTF-8″?>
 <configuration>
 <location path=”” overrideMode=”Deny”>
 </location>
 <system.webServer>
 <security>
 <requestFiltering allowDoubleEscaping=”true” />
 </security>
 <rewrite>
 <rules>
 <clear />
 <rule name=”Redirect to HTTPS” enabled=”true” stopProcessing=”true”>
 <match url=”(.*)” />
 <conditions logicalGrouping=”MatchAll” trackAllCaptures=”false”>
 <add input=”{HTTPS}” pattern=”^OFF$” />
 </conditions>
 <action type=”Redirect” url=”https://{HTTP_HOST}/{R:1}” redirectType=”Permanent” />
 </rule>
 <rule name=”seafilehttp” stopProcessing=”true”>
 <match url=”seafhttp/(.*)” />
 <conditions logicalGrouping=”MatchAll” trackAllCaptures=”false” />
 <action type=”Rewrite” url=”http://127.0.0.1:8082/{R:1}” appendQueryString=”true” logRewrittenUrl=”true” />
 </rule>
 <rule name=”seafile” enabled=”true” stopProcessing=”true”>
 <match url=”(.*)” />
 <conditions logicalGrouping=”MatchAll” trackAllCaptures=”false” />
 <action type=”Rewrite” url=”http://localhost:8000/{R:1}” appendQueryString=”true” logRewrittenUrl=”true” />
 </rule></rules> 
 <outboundRules>
 <preConditions>
 <preCondition name=”ResponseIsHtml1″>
 <add input=”{RESPONSE_CONTENT_TYPE}” pattern=”^text/html” />
 </preCondition>
 </preConditions>
 </outboundRules>
 </rewrite>
 <httpErrors errorMode=”DetailedLocalOnly” />
 </system.webServer>
 </configuration>
- Next is the critical part that most tutorial missed to include as they don’t reflect the settings on Seafile Configuration.
- Now Login to your Seafile Admin Area webpage and navigate to Settings section
- On the SERVICE_URL enter https://yourdomain.with.ssl/
- On the FILE_SERVER_ROOT enter https://yourdomain.with.ssl/seafhttp
- Now you are done and navigation, download, and upload will now work properly.
God Bless!
Thanks,
Thomie