

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tomcat &#8211; Max的程式語言筆記</title>
	<atom:link href="https://stackoverflow.max-everyday.com/tag/tomcat/feed/" rel="self" type="application/rss+xml" />
	<link>https://stackoverflow.max-everyday.com</link>
	<description>我要當一個豬頭，快樂過每一天</description>
	<lastBuildDate>Thu, 29 Aug 2024 00:37:11 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://stackoverflow.max-everyday.com/wp-content/uploads/2017/02/max-stackoverflow-256.png</url>
	<title>Tomcat &#8211; Max的程式語言筆記</title>
	<link>https://stackoverflow.max-everyday.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Tomcat version 9.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5, 6, 7, and 8 Web modules</title>
		<link>https://stackoverflow.max-everyday.com/2024/04/tomcat-version-9-0-only-supports-j2ee-1-2-1-3-1-4-and-java-ee-5-6-7-and-8-web-modules/</link>
					<comments>https://stackoverflow.max-everyday.com/2024/04/tomcat-version-9-0-only-supports-j2ee-1-2-1-3-1-4-and-java-ee-5-6-7-and-8-web-modules/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 30 Apr 2024 01:45:29 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Debug]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5696</guid>

					<description><![CDATA[在全新的 eclipse 匯入 project ...]]></description>
										<content:encoded><![CDATA[
<p>在全新的 eclipse 匯入 project 之後，無法在 tomcat 裡的 site 被新增為 resource, 顯示錯誤訊息：</p>



<pre class="wp-block-code"><code>Tomcat version 9.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5, 6, 7, and 8 Web modules</code></pre>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="592" height="608" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.38.14 AM.png?v=1714441447" alt="" class="wp-image-5697" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.38.14 AM.png?v=1714441447 592w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.38.14 AM-584x600.png?v=1714441447 584w" sizes="(max-width: 592px) 100vw, 592px" /></figure>



<p>解法，設成 Dynamic Web Module 下拉 Version 為 3.0 即可。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="967" height="728" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.40.26 AM.png?v=1714441470" alt="" class="wp-image-5698" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.40.26 AM.png?v=1714441470 967w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.40.26 AM-600x452.png?v=1714441470 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.40.26 AM-768x578.png?v=1714441470 768w" sizes="(max-width: 967px) 100vw, 967px" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2024/04/tomcat-version-9-0-only-supports-j2ee-1-2-1-3-1-4-and-java-ee-5-6-7-and-8-web-modules/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Permission denied error when binding a port</title>
		<link>https://stackoverflow.max-everyday.com/2023/11/permission-denied-error-when-binding-a-port/</link>
					<comments>https://stackoverflow.max-everyday.com/2023/11/permission-denied-error-when-binding-a-port/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Fri, 03 Nov 2023 10:59:24 +0000</pubDate>
				<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5141</guid>

					<description><![CDATA[80,443 預設會被系統鎖住, 一般程式無法b...]]></description>
										<content:encoded><![CDATA[
<p>80,443 預設會被系統鎖住, 一般程式無法bind,</p>



<p>How to make Tomcat run on 443 instead of its default port 8080?</p>



<p>比簡單的解法:</p>



<p>You need to use the&nbsp;<code>OUTPUT</code>&nbsp;chain as the packets meant for the&nbsp;<em>loopback</em>&nbsp;interface do not pass via the&nbsp;<code>PREROUTING</code>&nbsp;chain. The following should work; run as&nbsp;<code>root</code>:</p>



<pre class="wp-block-code"><code>iptables -t nat -A OUTPUT -o lo -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A OUTPUT -o lo -p tcp --dport 443 -j REDIRECT --to-port 8443</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p></p>



<h2 class="wp-block-heading" id="Permissiondeniederrorwhenbindingaport-Cause">Cause</h2>



<p>Ports below 1024 are called&nbsp;<strong>Privileged Ports</strong>&nbsp;and in Linux (and most UNIX flavors and UNIX-like systems), they are not allowed to be opened by any non-root user. This is a security feature originally implemented as a way to prevent a malicious user from setting up a malicious service on a well-known service port.</p>



<h2 class="wp-block-heading" id="Permissiondeniederrorwhenbindingaport-Resolution">Resolution</h2>



<p>There are a few different solutions to work around this:</p>



<ol class="wp-block-list">
<li>Install and configure&nbsp;<a href="https://confluence.atlassian.com/doc/using-apache-with-mod_proxy-173669.html">Apache</a>&nbsp;or&nbsp;<a href="https://confluence.atlassian.com/confkb/how-to-use-nginx-to-proxy-requests-for-confluence-313459790.html">nginx</a>&nbsp;as a reverse proxy server, which can be started as root to open the port, and then downgrade its privileges back to a normal user.</li>



<li>Set up a firewall on the server using&nbsp;<code>iptables</code>&nbsp;or an alternative, so that the lower port number is forwarded internally to a higher port number listened by Confluence.</li>



<li>Use&nbsp;<a href="http://commons.apache.org/proper/commons-daemon/jsvc.html">jsvc</a>, which is able to open ports as root, and then downgrade privileges.</li>



<li>Use&nbsp;<a href="http://en.wikipedia.org/wiki/Authbind">authbind</a>&nbsp;to grant privileges for a non-root user to open a privileged port.</li>



<li>If using Linux 2.6.24 or later, you can set up a file capability on the java executable, to give elevated privileges to allow opening privileged ports only, and no other superuser privileges:<br><code># setcap cap_net_bind_service+ep /path/to/bin/java</code>After setting this you may notice errors when starting Java like this, for example:<br><code>$ java -version /path/to/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory</code>This means that the library is being imported from a dynamic path, and not in the trusted ld.so path. See&nbsp;<a href="http://bugs.sun.com/view_bug.do?bug_id=7157699">http://bugs.sun.com/view_bug.do?bug_id=7157699</a>&nbsp;for details. To fix this, you need to locate the library, and add its path to the ld.so configuration. Note that the below is an example, and this may differ depending on Linux distribution. Replace JAVA_HOME with the correct location:<br><code>$ find JAVA_HOME -name 'libjli.so' JAVA_HOME/lib/amd64/jli/libjli.so &nbsp; # echo "JAVA_HOME/lib/amd64/jli" &gt; /etc/ld.so.conf.d/java-libjli.conf # ldconfig -v</code>After setting this all up, you need to make sure that Confluence only starts java with the direct binary path, and not via a symbolic link, otherwise the capability will not be picked up.<br>Setting this up means that any user can open privileged ports using Java, which may or may not be acceptable for you</li>
</ol>



<p>Whilst it may get things working, it is&nbsp;<strong>not</strong>&nbsp;recommended to run Confluence as root. If there is ever any security vulnerability where an attacker may execute arbitrary code as the running user, then they will gain root access.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2023/11/permission-denied-error-when-binding-a-port/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Deploying .war at the root in Tomcat</title>
		<link>https://stackoverflow.max-everyday.com/2023/11/deploying-war-at-the-root-in-tomcat/</link>
					<comments>https://stackoverflow.max-everyday.com/2023/11/deploying-war-at-the-root-in-tomcat/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Fri, 03 Nov 2023 10:42:45 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5136</guid>

					<description><![CDATA[已經把 server.xml 裡的 Contex...]]></description>
										<content:encoded><![CDATA[
<p>已經把  server.xml 裡的 Context tag 的 docBase=&#8221;/path/file.war&#8221; path=&#8221;/&#8221; 但是神奇的是, 連到網站還是顯示 Tomcat 預設的黃色老虎.</p>



<p>把 webapp 目錄裡的 ./ROOT/ 目錄移掉, 再把path=&#8221;&#8221;  就解決了. </p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>解法:<br><a href="https://stackoverflow.com/questions/5328518/deploying-my-application-at-the-root-in-tomcat">https://stackoverflow.com/questions/5328518/deploying-my-application-at-the-root-in-tomcat</a></p>



<ol class="wp-block-list">
<li>Remove the out-of-the-box&nbsp;<code>ROOT/</code>&nbsp;directory from tomcat and rename your war file to&nbsp;<code>ROOT.war</code>&nbsp;before deploying it.</li>



<li>Deploy your war as (from your example) <code>war_name.war</code> and configure the <a href="https://tomcat.apache.org/tomcat-8.0-doc/config/context.html">context root</a> in <code>conf/server.xml</code> to use your war file :<code>&lt;Context path="" docBase="war_name"  reloadable="true">&lt;/Context></code></li>
</ol>



<p>The first one is easier, but a little more kludgy. The second one is probably the more elegant way to do it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2023/11/deploying-war-at-the-root-in-tomcat/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>如何在eclipse升級tomcat 版本</title>
		<link>https://stackoverflow.max-everyday.com/2023/10/how-to-upgrade-tomcat-version-in-eclipse/</link>
					<comments>https://stackoverflow.max-everyday.com/2023/10/how-to-upgrade-tomcat-version-in-eclipse/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Mon, 23 Oct 2023 04:57:45 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5087</guid>

					<description><![CDATA[因為已知的安全性漏洞已修補, 不得不升級 tom...]]></description>
										<content:encoded><![CDATA[
<p>因為已知的安全性漏洞已修補, 不得不升級 tomcat 版本。</p>



<h2 class="wp-block-heading">下載 Tomcat</h2>



<p>官方網站: <a href="https://tomcat.apache.org/">https://tomcat.apache.org/</a></p>



<p>選擇 Binary Distributions 裡的 Core 分類裡的 .tar.gz 來下載, 例如 tomcat 9.x:<br><a href="https://tomcat.apache.org/download-90.cgi">https://tomcat.apache.org/download-90.cgi</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>我的環境的 tomcat 目錄是在 /opt/tomcat/, 先到目的資料夾：</p>



<pre class="wp-block-code"><code>cd /opt/tomcat</code></pre>



<p></p>



<p>先把 tar.gz 搬到或下載到 /opt/tomcat/, 下載用指令：</p>



<pre class="wp-block-code"><code>sudo wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.93/bin/apache-tomcat-9.0.93.tar.gz</code></pre>



<p></p>



<p>使用下列指令解壓縮</p>



<pre class="wp-block-code"><code>sudo tar zxvf apache-tomcat-9.0.93.tar.gz</code></pre>



<figure class="wp-block-image size-full"><img decoding="async" width="771" height="148" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/MobaXterm_Personal_23.2_2024-04-12-12-32-38.png?v=1712896434" alt="" class="wp-image-5638" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/MobaXterm_Personal_23.2_2024-04-12-12-32-38.png?v=1712896434 771w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/MobaXterm_Personal_23.2_2024-04-12-12-32-38-600x115.png?v=1712896434 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/MobaXterm_Personal_23.2_2024-04-12-12-32-38-768x147.png?v=1712896434 768w" sizes="(max-width: 771px) 100vw, 771px" /></figure>



<p>上圖可以看的出來, 搬進去 /opt/tomcat 的帳號是 max, 解壓縮後目錄的擁有者的是 root</p>



<p>關於權限的設定, 下載並解壓縮好 tomcat 的 .tar.gz 之後, 由於是開發環境, 並不是實際營運的線上環境, 建議在解壓縮完後, 粗暴地修改整個目錄 chown 為 tomcat:tomcat, 修改檔案屬性 chmod 755.</p>



<pre class="wp-block-code"><code>sudo chown tomcat:tomcat -R apache-tomcat-9.0.93
sudo chmod 755 -R apache-tomcat-9.0.93</code></pre>



<p></p>



<h2 class="wp-block-heading">備份 Server 參數</h2>



<p>升級前, 請先把 eclipse workspace 裡的 Server 目錄備份下來, 不然之前輸入進去的參數需要重新來過, 很花時間.</p>



<h2 class="wp-block-heading">Eclipse 的設定</h2>



<p>在 eclipse 裡, 點 Window -&gt; Server</p>



<p>New Server, 在 Tomcat 分類展開, 選擇你的Tomcat 主版號, 我是用 Tomcat 9.0</p>



<p>接著點 &#8220;Configu runtime environments&#8230;, 可以在這裡新增下載到的版本, 順便把舊的版本也刪掉, 避免太多版本, 容易混亂.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="762" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-10_45_44-Window-1024x762.jpg?v=1698035974" alt="" class="wp-image-5091" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-10_45_44-Window-1024x762.jpg?v=1698035974 1024w, https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-10_45_44-Window-600x446.jpg?v=1698035974 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-10_45_44-Window-768x571.jpg?v=1698035974 768w, https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-10_45_44-Window.jpg?v=1698035974 1078w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p></p>



<p>以我的情境來說, 因為 [漏洞編號] CVE-2023-41080: FORM 認證功能中存在 URL 重新導向到不受信任網站的漏洞, 目標是, 是 tomcat 要從 9.0.86 升到 9.0.93,</p>



<p>刪除新的下載的 9.0.93 資料夾</p>



<pre class="wp-block-code"><code>sudo rm -rf apache-tomcat-9.0.93/webapps/ROOT
sudo rm -rf apache-tomcat-9.0.93/webapps/docs
sudo rm -rf apache-tomcat-9.0.93/webapps/examples
sudo rm -rf apache-tomcat-9.0.93/webapps/host-manager</code></pre>



<p>執行畫面:</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="755" height="203" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/MobaXterm_Personal_23.2_2024-04-12-12-54-3b.png?v=1712897696" alt="" class="wp-image-5639" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/MobaXterm_Personal_23.2_2024-04-12-12-54-3b.png?v=1712897696 755w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/MobaXterm_Personal_23.2_2024-04-12-12-54-3b-600x161.png?v=1712897696 600w" sizes="(max-width: 755px) 100vw, 755px" /></figure>



<p></p>



<p>搬動使用到的第三方 .jar 元件:</p>



<pre class="wp-block-code"><code>sudo cp apache-tomcat-9.0.86/lib/commons-io-2.11.0.jar apache-tomcat-9.0.93/lib/
sudo cp apache-tomcat-9.0.86/lib/json-20230227.jar apache-tomcat-9.0.93/lib/
sudo cp apache-tomcat-9.0.86/lib/mysql-connector-j-8.0.32.jar apache-tomcat-9.0.93/lib/</code></pre>



<p></p>



<p>接著是把用到的tomcat 以外的第三方元件, 重新修改在 eclipse project 裡的properties 裡的</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="990" height="642" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-12_48_45-Window.jpg" alt="" class="wp-image-5093" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-12_48_45-Window.jpg?v=1698036606 990w, https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-12_48_45-Window-600x389.jpg?v=1698036606 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-12_48_45-Window-768x498.jpg?v=1698036606 768w" sizes="(max-width: 990px) 100vw, 990px" /></figure>



<p>說明: </p>



<ul class="wp-block-list">
<li>先點 Classpath 圖示後, 按下右邊的Add External JARs… 加入的 .jar 檔.</li>



<li>如果是先 Remove, 再 Add External JARs&#8230;, 需要在 Order and Export 裡設勾 .jar 一起 Export.</li>



<li>如果無法瀏覽 /opt/tomcat/apache-tomat-9.0.93/ 目錄, 請把目錄權限設為 755 問題就解決了.</li>
</ul>



<p></p>



<p>在 Window -&gt; Server 裡, 並把目前的專案, 加入新 Server 裡, 成功之後, 再去刪掉舊版本的Server, 這樣子設定值比較好複製。</p>



<p><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">重要：</mark><br>由於 server.xml 的格式內容，可能在新的 tomcat 版本被調整，建議的作法是，先備份舊版設定值，然後去修改新的 tomcat 裡產生出來的 xml 檔，比較不會發生問題。</p>



<p>在增加新的 Server 時, 記得要把 resource 也一起加進去, 沒加的話, 新的 Server 會跑不動。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="607" height="737" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/mstsc_2024-04-12-13-32-3f.png?v=1712900113" alt="" class="wp-image-5642" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/mstsc_2024-04-12-13-32-3f.png?v=1712900113 607w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/mstsc_2024-04-12-13-32-3f-494x600.png?v=1712900113 494w" sizes="(max-width: 607px) 100vw, 607px" /></figure>



<p>新的 Tomcat 可以執行後, 舊的有問題的版本, 就可以直接刪除了。</p>



<p></p>



<p>由於掉刪 Servers, 可能會顯示錯誤訊息：</p>



<pre class="wp-block-code"><code>javax.servlet cannot be resolved</code></pre>



<p>解法：只要按照下列步驟在Eclipse中導入就可以了。右擊項目，選擇Properties， 進入下界面，依次點擊：</p>



<pre class="wp-block-code"><code>Java Build Path —&gt; Add Library —&gt; Server Runtime —&gt; Next</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="699" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM-1024x699.png?v=1714439498" alt="" class="wp-image-5691" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM-1024x699.png?v=1714439498 1024w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM-600x410.png?v=1714439498 600w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM-768x525.png?v=1714439498 768w, https://stackoverflow.max-everyday.com/wp-content/uploads/2024/04/Screenshot-2024-04-30-at-9.06.32 AM.png?v=1714439498 1117w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">相關文章</h2>



<p>How To Create A Self Signed SSL Certificate For Use With Tomcat?<br><a href="https://stackoverflow.max-everyday.com/2023/04/how-to-create-a-self-signed-ssl-certificate-for-use-with-tomcat/">https://stackoverflow.max-everyday.com/2023/04/how-to-create-a-self-signed-ssl-certificate-for-use-with-tomcat/</a></p>



<p>How To Store String Values In Tomcat Context.Xml<br><a href="https://stackoverflow.max-everyday.com/2023/03/how-to-store-string-values-in-tomcat-context-xml/">https://stackoverflow.max-everyday.com/2023/03/how-to-store-string-values-in-tomcat-context-xml/</a></p>



<p>How To Start A New Thread When Tomcat Start<br><a href="https://stackoverflow.max-everyday.com/2023/06/how-to-start-a-new-thread-when-tomcat-start/">https://stackoverflow.max-everyday.com/2023/06/how-to-start-a-new-thread-when-tomcat-start/</a></p>



<p>How to upgrade Tomcat version manually on existing on-premise Foundry instance in case of security vulnerabilities<br><a href="https://support.hcltechsw.com/csm?id=kb_article&amp;sysparm_article=KB0099544">https://support.hcltechsw.com/csm?id=kb_article&amp;sysparm_article=KB0099544</a></p>



<p>Server Apache Tomcat v9 at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.<br><a href="https://stackoverflow.max-everyday.com/2024/08/server-apache-tomcat-was-unable-to-start-within-45-seconds/">https://stackoverflow.max-everyday.com/2024/08/server-apache-tomcat-was-unable-to-start-within-45-seconds/</a><br></p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2023/10/how-to-upgrade-tomcat-version-in-eclipse/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Could not load the Tomcat server configuration at /conf/catalina.policy (Permission denied)</title>
		<link>https://stackoverflow.max-everyday.com/2023/10/could-not-load-the-tomcat-server-configuration-at-conf-catalina-policy-permission-denied/</link>
					<comments>https://stackoverflow.max-everyday.com/2023/10/could-not-load-the-tomcat-server-configuration-at-conf-catalina-policy-permission-denied/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Mon, 23 Oct 2023 02:22:33 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=5081</guid>

					<description><![CDATA[因為已知道漏洞已修補, 不得不升級 tomcat...]]></description>
										<content:encoded><![CDATA[
<p>因為已知道漏洞已修補, 不得不升級 tomcat 版本, 在開發環境為Linux 時, 升級 eclipse 的 tomcat 版本在加入的新的 tomcat server 顯示錯誤訊息:</p>



<pre class="wp-block-preformatted">/conf/catalina.policy (Permission denied)</pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="632" height="484" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-10_11_03-Window.jpg" alt="" class="wp-image-5082" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-10_11_03-Window.jpg?v=1698027169 632w, https://stackoverflow.max-everyday.com/wp-content/uploads/2023/10/2023-10-23-10_11_03-Window-600x459.jpg?v=1698027169 600w" sizes="(max-width: 632px) 100vw, 632px" /></figure>



<p>發生的原因, 是因為在 Linux 上, 執行 eclipse 時的帳號並不是 tomcat 所造成, 而是一般的使用者, 比較有效率但粗暴的解法, 是直接開權限 755 給 apache-tomcat-x-x-x 目錄, 例如:</p>



<pre class="wp-block-code"><code>chmod 755 -R apache-tomcat-9.0.82</code></pre>



<p>只是要解決開發環境的話, 可以這樣子設定, 但是實際上線的伺服器, 請使用 tomcat 官方預設給的權限, 才會是最佳解法, 才會有效的降低權限的風險.</p>



<p>這種執行環境設定上的問題, 太久沒遇到, 會完全忘記之怎麼解決, 畢竟久久才會升級 tomcat 一次. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2023/10/could-not-load-the-tomcat-server-configuration-at-conf-catalina-policy-permission-denied/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to create a self signed SSL certificate for use with Tomcat?</title>
		<link>https://stackoverflow.max-everyday.com/2023/04/how-to-create-a-self-signed-ssl-certificate-for-use-with-tomcat/</link>
					<comments>https://stackoverflow.max-everyday.com/2023/04/how-to-create-a-self-signed-ssl-certificate-for-use-with-tomcat/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Thu, 06 Apr 2023 07:25:28 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">https://stackoverflow.max-everyday.com/?p=4704</guid>

					<description><![CDATA[想在 tomcat 使用自己 signed 的 ...]]></description>
										<content:encoded><![CDATA[
<p>想在 tomcat 使用自己 signed 的 SSL 憑證:<br><a href="https://stackoverflow.com/questions/42541356/how-to-create-a-self-signed-ssl-certificate-for-use-with-tomcat">https://stackoverflow.com/questions/42541356/how-to-create-a-self-signed-ssl-certificate-for-use-with-tomcat</a></p>



<p>先使用指令, 產生 keystore.jks 檔案:</p>



<pre class="wp-block-code"><code>keytool -genkey -keyalg RSA -noprompt -alias tomcat -dname "CN=localhost, OU=NA, O=NA, L=NA, S=NA, C=NA" -keystore keystore.jks -validity 9999 -storepass changeme -keypass changeme</code></pre>



<p>說明:</p>



<ul class="wp-block-list">
<li>This generates a keystore.jks file with a password of changeme, </li>



<li>請把 changeme 修改為你預期的密碼字串.</li>



<li>using a keyAlias of tomcat that&#8217;s valid for 9999 days for localhost.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>server.xml 修改後, http 在 8080, https 在 8443, 完整設定值:</p>



<pre class="wp-block-code"><code>&lt;Connector port="8080" protocol="HTTP/1.1"
           redirectPort="8443"
           disableUploadTimeout="false"/&gt;
&lt;Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
          maxThreads="150" scheme="https" secure="true"
          keystoreFile="keystore.jks" keystorePass="&lt;password&gt;"
          clientAuth="false" acceptCount="100"/&gt;
</code></pre>



<p></p>



<p>但實際執行, 顯示錯誤訊息:</p>



<pre class="wp-block-preformatted">INFO: The Apache Tomcat Native library which allows using OpenSSL was not found on the java.library.path: [/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib]</pre>



<p></p>



<p>Tomcat支援三種接收請求的處理方式：BIO、NIO、APR</p>



<ul class="wp-block-list">
<li>BIO由於每個請求都要建立一個執行緒來處理，執行緒開銷比較大，不能再高併發的場景，效能也是最低的。</li>



<li>NIO是一個基於緩衝區、並能提供非阻塞I/O操作的Java API，比傳統的bio更好的併發效能。</li>



<li>APR（Apache Portable Run-time libraries）簡單理解，就是從操作系統級別解決非同步IO問題。</li>
</ul>



<p>確認gcc、apr、apr-devel、apr-util 以及 JDK是否已經安裝過，沒有就需要安裝，請依序執行以下指令:</p>



<pre class="wp-block-code"><code>rpm -qa gcc
sudo yum install gcc
rpm -qa apr
rpm -qa apr-devel
rpm -qa apr-util
which java 
java -version</code></pre>



<p></p>



<p>安裝 tomcat-native</p>



<p>官方下載點:<br><a href="https://archive.apache.org/dist/tomcat/tomcat-connectors/native/2.0.3/source/">https://archive.apache.org/dist/tomcat/tomcat-connectors/native/2.0.3/source/</a></p>



<p>cd /usr/local/src/</p>



<p>sudo wget https://archive.apache.org/dist/tomcat/tomcat-connectors/native/2.0.3/source/tomcat-native-2.0.3-src.tar.gz</p>



<p>sudo tar xf tomcat-native-2.0.3-src.tar.gz</p>



<p>cd tomcat-native-2.0.3-src/native/</p>



<p>我是使用這組參數:</p>



<pre class="wp-block-code"><code>sudo ./configure --with-apr=/usr/bin/apr-1-config \
--with-java-home=/usr/lib/jvm/java-19-openjdk-19.0.2.0.7-1.rolling.el8.x86_64 \
--with-ssl=/usr/local/src/openssl-3.0.8 \
--prefix=/opt/tomcat/apache-tomcat-9.0.82</code></pre>



<p>要知道你的 java home path , 很簡單, 先使用 which java 就會看到 java 在 /usr/bin/java , 但這個 path  其實是  symbol link, 去 list 一下就可以找到實際的  java home.</p>



<p>這個 SSL 問題比較多, 如果環境是舊的 OpenSSL 1.1.1k 需要先升級到 OpenSSL 3.0.x 版, 解法: <br>How to Install the latest OpenSSL version from Source on Linux<br><a href="https://stackoverflow.max-everyday.com/2023/04/how-to-install-the-latest-openssl-version-from-source-on-linux/">https://stackoverflow.max-everyday.com/2023/04/how-to-install-the-latest-openssl-version-from-source-on-linux/</a></p>



<p>接著. </p>



<pre class="wp-block-code"><code>make<br>make install</code></pre>



<p>apache-tomcat-9.0.82/bin/catalina.sh ，在 文件最後增加這二行:</p>



<pre class="wp-block-code"><code>LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/tomcat/apache-tomcat-9.0.82/lib
export LD_LIBRARY_PATH</code></pre>



<p>說明: 你的 tomcat 可能不是在 /opt/tomcat/  而是在其他路徑下. </p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>說明: 雖然直接把 keystore.jks 放到與 server.xml 同一層, 但實際上 tomcat 在執行時, 又會再被多搬到下一層的 ./conf/ 目錄下. </p>



<p>遇到執行環境的設定錯誤時, 常會出現錯誤訊息:</p>



<pre class="wp-block-preformatted">tomcat keystore file does not exist</pre>



<p>或錯誤訊息:</p>



<pre class="wp-block-preformatted">Caused by: java.io.FileNotFoundException: /home/max/eclipse-workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/keystore.jks (No such file or directory)<br>at</pre>



<p>最後, 我的eclipse 的 server.xml 內容如下, 增加了 conf/ 到 keystore.jks 之前:</p>



<pre class="wp-block-code"><code>    &lt;Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
    	SSLEnabled="true"
          maxThreads="150" scheme="https" secure="true"
          keystoreFile="conf/keystore.jks" keystorePass="hello-your-passowrd"
          clientAuth="false" acceptCount="100"/&gt;</code></pre>



<p>真的滿神奇的&#8230;, 加  conf/ 就可以解決.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2023/04/how-to-create-a-self-signed-ssl-certificate-for-use-with-tomcat/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>切換 Sun JDK 為 openJDK</title>
		<link>https://stackoverflow.max-everyday.com/2018/01/sun-jdk-to-openjdk/</link>
					<comments>https://stackoverflow.max-everyday.com/2018/01/sun-jdk-to-openjdk/#comments</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 30 Jan 2018 06:06:03 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">http://stackoverflow.max-everyday.com/?p=2009</guid>

					<description><![CDATA[OpenJDK和Sun的JDK Linux版是不...]]></description>
										<content:encoded><![CDATA[<p>OpenJDK和Sun的JDK Linux版是不同的。前者為開源軟體，後者則為商業軟體。</p>
<p>&nbsp;</p>
<p>Q: How to download and install prebuilt OpenJDK packages</p>
<p>A: 先下載好特定平台的壓縮檔，再解開來就可以直接使用：</p>
<p>OpenJDK 下載網址：<br />
<a href="http://jdk.java.net/9/">http://jdk.java.net/9/</a></p>
<p>解壓縮用指令：</p>
<blockquote>
<pre>$ tar xvf openjdk-9.*_bin.tar.gz</pre>
</blockquote>
<p>Max是用 maxOS 開發，所以是在 /Library/Java/JavaVirtualMachines 這個目錄下執行指令：</p>
<blockquote>
<pre>sudo tar xvf ~/Downloads/openjdk-9.0.4_osx-x64_bin.tar.gz</pre>
</blockquote>
<hr />
<p>Q: How to remove Java 8 JDK from Mac</p>
<p>A:</p>
<p><strong>Run this command to just remove the JDK</strong></p>
<pre class="lang-java prettyprint prettyprinted"><code><span class="pln">sudo rm </span><span class="pun">-</span><span class="pln">rf </span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">Java</span><span class="pun">/</span><span class="typ">JavaVirtualMachines</span><span class="pun">/</span><span class="pln">jdk</span><span class="pun">&lt;</span><span class="pln">version</span><span class="pun">&gt;.</span><span class="pln">jdk</span></code></pre>
<p><strong>Run these commands if you want to remove plugins</strong></p>
<pre class="lang-java prettyprint prettyprinted"><code><span class="pln">sudo rm </span><span class="pun">-</span><span class="pln">rf </span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">PreferencePanes</span><span class="pun">/</span><span class="typ">JavaControlPanel</span><span class="pun">.</span><span class="pln">prefPane
sudo rm </span><span class="pun">-</span><span class="pln">rf </span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">Internet</span><span class="pln">\ </span><span class="typ">Plug</span><span class="pun">-</span><span class="typ">Ins</span><span class="pun">/</span><span class="typ">JavaAppletPlugin</span><span class="pun">.</span><span class="pln">plugin
sudo rm </span><span class="pun">-</span><span class="pln">rf </span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">LaunchAgents</span><span class="pun">/</span><span class="pln">com</span><span class="pun">.</span><span class="pln">oracle</span><span class="pun">.</span><span class="pln">java</span><span class="pun">.</span><span class="typ">Java</span><span class="pun">-</span><span class="typ">Updater</span><span class="pun">.</span><span class="pln">plist
sudo rm </span><span class="pun">-</span><span class="pln">rf </span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">PrivilegedHelperTools</span><span class="pun">/</span><span class="pln">com</span><span class="pun">.</span><span class="pln">oracle</span><span class="pun">.</span><span class="pln">java</span><span class="pun">.</span><span class="typ">JavaUpdateHelper</span><span class="pln">
sudo rm </span><span class="pun">-</span><span class="pln">rf </span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">LaunchDaemons</span><span class="pun">/</span><span class="pln">com</span><span class="pun">.</span><span class="pln">oracle</span><span class="pun">.</span><span class="pln">java</span><span class="pun">.</span><span class="typ">Helper</span><span class="pun">-</span><span class="typ">Tool</span><span class="pun">.</span><span class="pln">plist
sudo rm </span><span class="pun">-</span><span class="pln">rf </span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">Preferences</span><span class="pun">/</span><span class="pln">com</span><span class="pun">.</span><span class="pln">oracle</span><span class="pun">.</span><span class="pln">java</span><span class="pun">.</span><span class="typ">Helper</span><span class="pun">-</span><span class="typ">Tool</span><span class="pun">.</span><span class="pln">plist</span></code></pre>
<hr />
<p>移掉 Sun JDK 之後，再去 run tomcat 就會顯示錯誤訊息：</p>
<blockquote><p>The archive: /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/lib/tools.jar which is referenced by the classpath, does not exist.</p></blockquote>
<p>解法，要刪掉舊的 TimCat Server 重新增加 Web Server, 並指定 JRE 為 openJDK 的版本即可。</p>
<p>附註：如果有修改 server.xml, web.xml, catelina.policy 等檔案，記得要先備份。</p>
<hr />
<p>接著 build 會出問題：</p>
<p>javax.activation classes throws NoClassDefFoundError<br />
<a href="https://bugs.openjdk.java.net/browse/JDK-8187748?jql=project%20in%20(JDK)%20AND%20component%20in%20(core-libs)%20AND%20Subcomponent%20in%20(javax.activation)">https://bugs.openjdk.java.net/browse/JDK-8187748?jql=project%20in%20(JDK)%20AND%20component%20in%20(core-libs)%20AND%20Subcomponent%20in%20(javax.activation)</a></p>
<p>原來不只我才遇到，結論：</p>
<blockquote><p>千萬不要用「太新」的版本！stable 最重要！</p></blockquote>
<p>遇到這個問題 2個解法，1是加參數去 build, 我選擇方法 2降版為 JDK 8 版，改用 openJDK 8 的下載網址：<br />
<a href="http://jdk.java.net/8/">http://jdk.java.net/8/</a></p>
<p>附註：macOS 下載 .dmg 檔案，點 2下就安裝好了。</p>
<h2>JDK 8</h2>
<h3><a id="jdk8_ubuntu" name="jdk8_ubuntu"></a>Debian, Ubuntu, <i>etc.</i></h3>
<p>On the command line, type:</p>
<blockquote class="code"><p>$ sudo apt-get install openjdk-8-jdk</p></blockquote>
<p>很多情況不會在 server 上開發，所以安裝 jre 即可</p>
<blockquote><p>$ sudo apt-get install openjdk-8-jre</p></blockquote>
<p>&nbsp;</p>
<h3><a id="jdk8_fedora" name="jdk8_fedora"></a>Fedora, Oracle Linux, CentOS, Red Hat Enterprise Linux, <i>etc.</i></h3>
<p>On the command line, type:</p>
<blockquote class="code"><p><b>$</b> sudo yum install java-1.8.0-openjdk</p></blockquote>
<p>安裝完後， jre 目錄會在：</p>
<p class="p1"><span class="s1">/usr/lib/jvm/jre/bin/ 之下</span></p>
<p>如果需要設定或存取，可以在這folder 下拿到 binary.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2018/01/sun-jdk-to-openjdk/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Apache 的SSL憑證 安裝與更新 &#8211; CentOS</title>
		<link>https://stackoverflow.max-everyday.com/2017/10/apache-ssl-centos/</link>
					<comments>https://stackoverflow.max-everyday.com/2017/10/apache-ssl-centos/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Mon, 02 Oct 2017 07:24:12 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">http://stackoverflow.max-everyday.com/?p=1442</guid>

					<description><![CDATA[以 TWCA 為例來作為說明，送出憑證申請檔 C...]]></description>
										<content:encoded><![CDATA[<p>以 TWCA 為例來作為說明，送出憑證申請檔 CSR 後你會得到 根憑證主機憑證「root.cer」、網域憑證「server.cer」、中繼憑證1「uca_1.cer」、中繼憑證1「uca_2.cer」</p>
<p>&nbsp;</p>
<p>********************************************</p>
<h4>Apache 安裝 SSL 憑證</h4>
<p>在 /etc/httpd/conf/httpd.conf 裡要設定<br />
Include conf.d/*.conf<br />
這樣 httpd 才會去讀取 conf.d 裡所有的 conf 檔</p>
<p>在 /etc/httpd/conf.d 目錄下，建立一個 ssl.conf 預設應該會有，然後修改底下幾個項目</p>
<p># 指定 x509 憑證的副檔名 crt</p>
<pre>AddType application/x-x509-ca-cert .crt</pre>
<p># 指向你剛剛用 openssl 所產出來主機金鑰 KEY</p>
<pre>SSLCertificateKeyFile /etc/ssl/private/server.key</pre>
<p># 指向剛剛從憑證中心取得的 網域憑證，網域憑證只需要複製到你指定的路徑即可。</p>
<pre>SSLCertificateFile /etc/ssl/certs/server.crt</pre>
<p># 憑證鍊</p>
<pre>SSLCertificateChainFile /etc/ssl/certs/uca.crt</pre>
<p>憑證鍊就比較麻煩，因為中繼憑證可能為一層，也可能為兩層，如果從 TWCA 拿到的是兩層的中繼憑證，你可以把 uca_1.cer 跟 uca_2.cer 作合併存為 uca.crt ，uca_2.cer 在上面。</p>
<pre>cp uca_2.cer uca.crt 
cat uca_1.cer &gt;&gt; uca.crt</pre>
<p>接著把 apache httpd 的服務重啟 sudo /etc/init.d/httpd restart 就可以啟用新的憑證了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2017/10/apache-ssl-centos/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>tornado TLSV1_ALERT_UNKNOWN_CA</title>
		<link>https://stackoverflow.max-everyday.com/2017/09/tornado-tlsv1_alert_unknown_ca/</link>
					<comments>https://stackoverflow.max-everyday.com/2017/09/tornado-tlsv1_alert_unknown_ca/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Wed, 06 Sep 2017 00:34:36 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[Python筆記]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[tornado]]></category>
		<guid isPermaLink="false">http://stackoverflow.max-everyday.com/?p=1230</guid>

					<description><![CDATA[我在自己的 NB 裡同時架了 2個 web se...]]></description>
										<content:encoded><![CDATA[<p>我在自己的 NB 裡同時架了 2個 web server, 使用 2個自己sign 的 ssl 憑證。使用行動裝置(iPad)先存取第1台 用 TimCat 架的 web server之後，再連到同一個 ip address 下的 tornado web server 會顯示錯誤訊息：</p>
<pre>[W 170906 08:19:15 iostream:1327] SSL Error on 9 ('192.168.1.55', 62014): [SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca (_ssl.c:661)</pre>
<p>而且是無窮迴圈， client side 會一直 retry&#8230;，大約每1秒可以呼叫到 8個 request。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-1231" src="https://stackoverflow.max-everyday.com/wp-content/uploads/2017/09/Screenshot-2017-09-06-08.30.08.jpg" alt="" width="640" height="375" srcset="https://stackoverflow.max-everyday.com/wp-content/uploads/2017/09/Screenshot-2017-09-06-08.30.08.jpg 640w, https://stackoverflow.max-everyday.com/wp-content/uploads/2017/09/Screenshot-2017-09-06-08.30.08-600x352.jpg 600w" sizes="(max-width: 640px) 100vw, 640px" /></p>
<p>解法當然就是 web server 分在不同台就好了&#8230;</p>
<hr />
<p>我是透過下面的指令來建立自有憑證：</p>
<p>I created SSL certificates using these steps:</p>
<p><strong>Create the CA private key:</strong></p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="pln">openssl genrsa </span><span class="pun">-</span><span class="pln">des3 </span><span class="pun">-</span><span class="pln">out servercakey</span><span class="pun">.</span><span class="pln">pem </span></code></pre>
<p><strong>Create the CA public certificate</strong> <em>(When you create a certificate, there must be one unique name (a Distinguished Name (DN)), which is different for each certificate that you create):</em></p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="pln">openssl req </span><span class="pun">-</span><span class="pln">new </span><span class="pun">-</span><span class="pln">x509 </span><span class="pun">-</span><span class="pln">key servercakey</span><span class="pun">.</span><span class="pln">pem </span><span class="pun">-</span><span class="pln">out root</span><span class="pun">.</span><span class="pln">crt </span></code></pre>
<p><strong>Create the server&#8217;s private key file:</strong></p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="pln">openssl genrsa </span><span class="pun">-</span><span class="pln">out server</span><span class="pun">.</span><span class="pln">key </span></code></pre>
<p><strong>Create the server certificate request:</strong></p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="pln">openssl req </span><span class="pun">-</span><span class="pln">new </span><span class="pun">-</span><span class="pln">out reqout</span><span class="pun">.</span><span class="pln">txt </span><span class="pun">-</span><span class="pln">key server</span><span class="pun">.</span><span class="pln">key </span></code></pre>
<p><strong>Use the CA private key file to sign the server&#8217;s certificate:</strong></p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="pln">openssl x509 </span><span class="pun">-</span><span class="pln">req </span><span class="pun">-</span><span class="kwd">in</span><span class="pln"> reqout</span><span class="pun">.</span><span class="pln">txt </span><span class="pun">-</span><span class="pln">days </span><span class="lit">3650</span> <span class="pun">-</span><span class="pln">sha1 </span><span class="pun">-</span><span class="typ">CAcreateserial</span> <span class="pun">-</span><span class="pln">CA root</span><span class="pun">.</span><span class="pln">crt </span><span class="pun">-</span><span class="typ">CAkey</span><span class="pln"> servercakey</span><span class="pun">.</span><span class="pln">pem </span><span class="pun">-</span><span class="pln">out server</span><span class="pun">.</span><span class="pln">crt </span></code></pre>
<p><strong>Create the client&#8217;s private key file:</strong></p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="pln">openssl genrsa </span><span class="pun">-</span><span class="pln">out client</span><span class="pun">.</span><span class="pln">key </span></code></pre>
<p><strong>Create the client certificate request:</strong></p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="pln">openssl req </span><span class="pun">-</span><span class="pln">new </span><span class="pun">-</span><span class="pln">out reqout</span><span class="pun">.</span><span class="pln">txt </span><span class="pun">-</span><span class="pln">key client</span><span class="pun">.</span><span class="pln">key </span></code></pre>
<p><strong>Use the CA private key file to sign the client&#8217;s certificate:</strong></p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="pln">openssl x509 </span><span class="pun">-</span><span class="pln">req </span><span class="pun">-</span><span class="kwd">in</span><span class="pln"> reqout</span><span class="pun">.</span><span class="pln">txt </span><span class="pun">-</span><span class="pln">days </span><span class="lit">3650</span> <span class="pun">-</span><span class="pln">sha1 </span><span class="pun">-</span><span class="typ">CAcreateserial</span> <span class="pun">-</span><span class="pln">CA root</span><span class="pun">.</span><span class="pln">crt </span><span class="pun">-</span><span class="typ">CAkey</span><span class="pln"> servercakey</span><span class="pun">.</span><span class="pln">pem </span><span class="pun">-</span><span class="pln">out client</span><span class="pun">.</span><span class="pln">crt </span></code></pre>
<p><strong>Creating pem file for Server:</strong></p>
<pre class="lang-py prettyprint prettyprinted"><code><span class="pln">cat server</span><span class="pun">.</span><span class="pln">crt root</span><span class="pun">.</span><span class="pln">crt </span><span class="pun">&gt;</span><span class="pln"> server</span><span class="pun">.</span><span class="pln">pem</span></code></pre>
<p>上面很多指令是多餘的，產生的檔案也都沒有使用到，tornado 只使用到 2個：</p>
<pre> server_https = HTTPServer(self.app, xheaders=True, ssl_options = {
 "certfile": os.path.join(options.certificate_path, "<span style="color: #ff0000;"><strong>server.crt</strong></span>"),
 "keyfile": os.path.join(options.certificate_path, "<span style="color: #ff0000;"><strong>server.key</strong></span>"),
 })</pre>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2017/09/tornado-tlsv1_alert_unknown_ca/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java 與 Tomcat 搭配的加密連線：HTTPS 雙向認證</title>
		<link>https://stackoverflow.max-everyday.com/2017/07/tomcat-https-keytool/</link>
					<comments>https://stackoverflow.max-everyday.com/2017/07/tomcat-https-keytool/#respond</comments>
		
		<dc:creator><![CDATA[max-stackoverflow]]></dc:creator>
		<pubDate>Tue, 25 Jul 2017 07:05:53 +0000</pubDate>
				<category><![CDATA[Java筆記]]></category>
		<category><![CDATA[電腦相關應用]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>
		<guid isPermaLink="false">http://stackoverflow.max-everyday.com/?p=993</guid>

					<description><![CDATA[今天遇到的任務是要讓Tomcat 7 支援ssl...]]></description>
										<content:encoded><![CDATA[<p>今天遇到的任務是要讓Tomcat 7 支援ssl, schema 從 http 改走 https.</p>
<p>&nbsp;</p>
<p>Step 1: 為伺服器產生簽章庫</p>
<blockquote>
<pre>keytool -genkey -v -alias tomcat -keyalg RSA -validity 10000 -keystore ./tomcat.keystore -dname "CN=localhost,OU=my,O=my,L=Taipei,ST=Taiwan,c=TW" -storepass changeit -keypass changeit</pre>
</blockquote>
<p>執行完會多一個檔案。</p>
<p>&nbsp;</p>
<p>Step 2:修改 Tomcat 目錄下的 conf/server.xml:</p>
<blockquote class="tr_bq"><p>找到 &lt;Connector port=&#8221;8443&#8243; &#8230; 這部份的設定應該是被註解掉了，把註解拿掉! 並且加上 keystoreFile 及 keystorePass 兩個屬性，內容值當然就依第一步驟產生的填入。</p></blockquote>
<blockquote class="tr_bq"><p>&lt;Connector port=&#8221;8443&#8243; protocol=&#8221;org.apache.coyote.http11.Http11Protocol&#8221;</p></blockquote>
<blockquote class="tr_bq">
<blockquote class="tr_bq"><p>               maxThreads=&#8221;150&#8243; SSLEnabled=&#8221;true&#8221; scheme=&#8221;https&#8221; secure=&#8221;true&#8221;</p>
<p class="p1"><span style="color: #ff0000;"><span class="s1">keystoreFile</span><span class="s2">=</span>&#8220;/Users/max/Documents/settings/tomcat.keystore&#8221; <span class="s1">keystorePass</span><span class="s2">=</span>&#8220;changeit&#8221; <span class="s1">keyAlias</span><span class="s2">=</span>&#8220;tomcat&#8221;</span></p>
</blockquote>
<blockquote class="tr_bq"><p>               clientAuth=&#8221;false&#8221; sslProtocol=&#8221;TLS&#8221; /&gt;</p></blockquote>
</blockquote>
<hr />
<p>醬子就完成了，耶真的連上去了。</p>
<p>&nbsp;</p>
<p>我之前試了其他篇文章，發現 <span class="s1">keystorePass</span><span class="s2">=</span>&#8220;changeit&#8221; 的密碼不知道該用 -keypass 還是用 storepass，所以最佳解法就是這2組pass 都設成一樣的，不然會出現下面的Error.</p>
<div class="line number1 index0 alt2"><code class="java plain">SEVERE: Failed to initialize end point associated with ProtocolHandler [</code><code class="java string">"http-bio-8443"</code><code class="java plain">]</code></div>
<div class="line number2 index1 alt1"><code class="java plain">java.io.IOException: Cannot recover key</code></div>
<div></div>
<div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://stackoverflow.max-everyday.com/2017/07/tomcat-https-keytool/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
