顯示具有 SSL 標籤的文章。 顯示所有文章
顯示具有 SSL 標籤的文章。 顯示所有文章

星期五, 2月 14, 2020

Get free Domain Name and SSL Certificate

If you have a Public IP Address and Linux OS running:
  • get a free Domain Name from noip or duckdns
  • install Docker
  • follow this guideline

星期二, 1月 01, 2019

Java Restful WebServices

為了想在最少的準備之下開發 Java Restful WebServices,研究了以下的做法:
  1. 參考這篇這篇所述,在 Docker 已安裝的前提下,藉由 Maven webapp plugin,不依賴任何 IDE,建立專案的目錄結構。需要在一個空的目錄下這命令(請自行替換適合的 groupId):
    docker run -it --rm -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=com.acme -DartifactId=my-webapp
  2. 將這群目錄、檔案的擁有權取回:
    sudo chown -R `whoami`. my-webapp
  3. 進入 my-webapp 子目錄,補上 src/main/java/com/acme/TestService.java,內容可參考這篇(如果用複製的話,要注意雙引號可能需要替換)。
  4. 續上,增加 servlet 與 servlet-mapping 補足 src/main/webapp/WEB-INF/web.xml 的內容,尤其要注意 param-value 與程式中所述的套件、所在路徑一致。
  5. 續上,增加三個 dependency 補足 pom.xml 的內容。若在意未來的路徑名稱,也可以增設 build/finalName。
  6. 再用 Maven 於 target 目錄產出 war 檔:
    docker run -it --rm -v "$(pwd)":/usr/src/mymaven -w /usr/src/mymaven maven mvn package
接下來的課題是,需要 Servlet Container 讓 war 跑起來,一樣是借重 Docker 與大家最熟悉的 Tomcat:
  1. 將 Tomcat 預設埠 8080 8443 都對應好:
    docker run -d --name tomcat -p 8080:8080 -p 8443:8443 tomcat
  2. 先確認瀏覽器訪問 8080 沒問題,再設法讓 Manager App 開起來,首先是修改 /usr/local/tomcat/conf/tomcat-users.xml 增加 manager-gui 角色的帳密;若要遠端訪問還有 /usr/local/tomcat/webapps/manager/META-INF/context.xml 要放寬 RemoteAddrValve。
  3. 登入 Manager App 之後,部署 war 上去,不論 http://localhost:8080/my-webapp 或 http://localhost:8080/my-webapp/rest/testservice 都應能得到正確內容。
  4. 準備 https 憑證與金鑰檔,放到 Docker Container 內,並參考這篇的說明修改 /usr/local/tomcat/conf/server.xml,對應的必要屬性至少有 certificateFile、certificateKeyFile 兩個,就可改由 https 8443 訪問取得結果。

星期三, 9月 26, 2018

Simple and Free SSL

現在這時代處處要求安全,網站若還是走 http:// 已經跟不上潮流了,但我們非得繳這些「安全稅」來維持門面嗎?假設網域的名稱解析、防火牆開 80 埠這些事都已準備好,以下我們就來看看最近的做法:
  • CentOS 7
    • 「不必」準備 Web Server,如果有也請先關掉
      • sudo yum install epel-release 安裝企業版套件庫
      • sudo yum install certbot 這次的主角
      • sudo certbot certonly -n -d acme.com -m abc@acme.com --standalone --agree-tos
    • 如果一切順利,就會在 /etc/letsencrypt/live 目錄下看到新的憑證、金鑰等檔案。
    • sudo certbot renew 就能更新憑證,而且若在未到期前執行,雖然不會生效,但也不會破壞什麼,彌補了免費憑證效期較短,經常需要更新的疑慮。
  • Windows
    • 請先裝好 IIS
    • 這裡下載、解壓縮,不需安裝,執行 letsencrypt.exe,這是一個文字介面互動式程式,可以選擇各種憑證相關工作,像「申請」、「定期更新」都有,而且這是綁 IIS 的,因此憑證檔該放什麼位置,都不需再操心。

星期二, 3月 20, 2018

Testing your private key and certificate for HTTPS

雖然各種 Web Application Server 很容易安裝私鑰與憑證來支援 HTTPS,但如何確認安裝是成功的?連連看應該有分幾個層次,否則一旦連不上,也不知道要找誰求救:
  • check ip
    • ping <Host_IP>
  • check name resolution
    • nslookup <Host_Name>
  • check port from client
    • telnet <Host> <Port>
    • echo > /dev/tcp/<Host>/<Port> && echo open || echo closed
  • check port from server
    • ss -tnlp
    • firewall-cmd --list-all
  • check response
    • curl <Url>
    • Browser
其實在最後一關,有時也必須再細分 HTTP / HTTPS,若在 Server 端一好一壞,可以檢查:
  • 檔案路徑
  • 存取權限
  • 私鑰密碼
  • 憑證串鍊
  • 加密協定
若是 Server 端正常,但 Client 端一好一壞,只剩一招:
  • openssl s_client -connect <Host>:<Port>
至少有一次檔案傳壞了就是這麼找到的。