The server selected protocol version TLS10 is not accepted

錯誤環境:使用 OpenJDK 11 連線 SQL Server 2008 時,發生了找不到 openjdk 驅動程式無法使用安全通訊端層 (SSL) 加密建立與 SQL Server 的安全連接。錯誤: “The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]”。 ClientConnectionId:e98d4e86-b063-47d6-8bc7-7e0c482b146d 的結果。

發生原因:眾說紛云。
一、升級至 JAVA11 後、TLSv1 & TLSv1.1 被預設 Disabled。
二、SQL Server 2008 要求加密連線、需更新。

解決方法
在不動到 Server 的情況下,嘗試改寫連線方式及各種無腦測試後、以最簡單的方式解決了。

在 java.security 這個設定檔中,找到 jdk.tls.disabledAlgorithms ,刪掉其中的 TLSv1 、即可連線成功。

TLSv1

  • 在 Google 時發現,很多文章都會寫此檔案放在 %JAVAHOME%\JAVA\jreXXX\lib\security 中、一開始時一直沒找到;後來我反而是在 %JAVAHOME%\jdk-11.0.13.8-hotspot\Conf\Security 中找到的。有可能是因為版本的不同所以導致資料夾不同,有時候多注意一下,以免浪費了不必要的時間。

20230822 Tips:
在 Mac OS 中尋找 Java 安裝位置

/usr/libexec/java_home -v

20240124 Tips:
最近試著升級成 jdk 17 & SpringBoot 3.2.1 時、遇到了以下問題:

“encrypt” 屬性設定為 “true” 且 “trustServerCertificate” 屬性設為 “false”,但驅動程式無法使用安全通訊端層 (SSL) 加密建立 SQL Server 的安全連線: 錯誤: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target。 ClientConnectionId:77468a01-4798-4f83-a45c-b1b4e5833e6b

除了之前把 TLSv1 去除掉之外、需要在 application.properties 中再增加設定:

spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://127.0.0.1:1433;databaseName=LYS_ERP;encrypt=false

雖然是可以連絡了、但還是會出現以下警告訊息:
TLSv1 was negotiated. Please update server and client to use TLSv1.2 at minimum.

主要問題還是在於 SQL 2008 、就先撐著吧、看何時解決不了不得不升級囉!

How to install MSSQL Server on Mac using Docker

因為開發的原因、所以需要在 Mac 上安裝 SQL Server 。

Docker 官網

下載並安裝 Docker 。

前往 Dockerhub 找到需要的 Image 檔案:

Dockerhub-SQL Server

  • 目前在官網上只看到 2019 & 2017 的版本、所以我選擇了 2017 的版本。

DockerSQLserver

打開終端機(Terminal)、輸入以下指令:

docker pull mcr.microsoft.com/mssql/server:2017-latest

DockerPull

Pull 完後、在剛剛的網頁往下拉一點、會看到執行方法:

Howtouseimage

在終端機在執行以下命令:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=yourStrong(!)Password" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
  • 要特別注意的是 Copy 下來的命令檔、需先修改密碼(要求強密碼、否則執行會有問題);另外、因為剛 Pull 的是 2017 、所以版本號也必需要改。我在此行命令中另外加上了 –name 讓執行後的名稱變成我想要的。

Setup

以上完成後、開啟 Docker App 、並 Run 剛剛安裝的 Image 就可以啟動了:

RunDocker

取代 SQLServer Mangament 的 Azure Data Studio:

Azure Data Studio

操作介面和 Visual Studio Code 幾乎一模一樣;經測試、雖然連接 SQL 2008 會跳出警告版本不相容,但目前使用起來沒什麼大問題。

AzureDataStudio

How to install Node.js and npm on macOS with Homebrew

先檢查在 Mac 中是否有安裝了 Homebrew。

brew -v

如果沒有看到版本號、代表還沒安裝;先進到 Homebrew 官網、並在終端機中輸入以下內容:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

確認 Homebrew 安裝完成後、輸入以下:

brew update
brew install node

安裝完成後、檢查是否安裝成功:

node -v

npm -v 

完成。