關於MySql的SSL-Connection

原因

之前在寫一些有關增刪改查的項目中,都是用的postgresql數據庫,用到的服務器是wildfly,用的直接是用bin/jboss-cli.sh這個來配置的數據源,沒有仔細研究一下究竟用jboss-cli.sh配置的數據源到底進行了那些修改.在最近換成用MySQL之後,出現了這麼一個問題:
Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
這是我從Wildlfy終端日誌中粘出來的,其實這個只是一個警告,不是錯誤.具體的意思是,說要你建立ssl鏈接,但是服務器本身沒有身份認證,這種方式不推薦使用.但是你在鏈接的時候是要說明的,如果沒有顯示聲明不適用ssl鏈接,它默認是使用的,就會導致如上警告.

具體操作

其實之前在用hibernate/jpa,甚至說是用jdbc的時候,仔細看一下你jdbc的connection url裏面,其實是有這麼一段的:

Connection connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false","root", "letmein");

在jpa的persistence.xml文件中也有:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
  <persistence-unit name="defaultPersistenceUnit"  transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
      <!-- 使用MySQL方言 -->
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
      <!-- 數據庫連接的URL地址 -->
      <property name="hibernate.connection.url"
        value="jdbc:mysql://localhost:3306/spring"/>
      <!-- 數據庫連接的驅動 -->
      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
      <!-- 數據庫連接的用戶名 -->
      <property name="hibernate.connection.username" value="root"/>
      <!-- 數據庫連接的密碼 -->
      <property name="hibernate.connection.password" value="314"/>
      <!-- 顯示SQL語句 -->
      <property name="hibernate.show_sql" value="true"/>

      <property name="hibernate.connection.useUnicode" value="true"/>
      <property name="hibernate.connection.characterEncoding" value="UTF-8"/>

      <!-- 在顯示SQL語句時格式化語句 -->
      <property name="hibernate.format_sql" value="true"/>
      <property name="hibernate.use_sql_comments" value="false"/>
      <!-- 自動輸出schema創建DDL語句 -->
      <property name="hibernate.hbm2ddl.auto" value="create"/>

      <!-- 數據庫連接超時後自動重連 -->
      <property name="hibernate.connection.autoReconnect" value="true"/>
      <property name="connection.autoReconnectForPools" value="true"/>
      <property name="connection.is-connection-validation-required" value="true"/>
    </properties>
  </persistence-unit>
</persistence>

例如,當使用到wildlfy數據源的時候,需要配置的就不是這裏了,而是在standalone.xml中:
ps:在wildlfy中配置數據源的方式:
這裏寫鏈接內容
以下是使用mysql數據源時需要的配置:

<datasource jndi-name="java:jboss/datasources/mysqlDS" pool-name="mysqlDSPool">
    <connection-url>jdbc:mysql://localhost:3306/ejos?useSSL=false</connection-url>
    <driver>mysql</driver>
        <security>
            <user-name>root</user-name>
            <password>314</password>
        </security>
    <validation>  
        <valid-connection-checker class-name="org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker"/>  
        <validate-on-match>true</validate-on-match>  
        <background-validation>false</background-validation>  
        <background-validation-millis>60000</background-validation-millis>  
    <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.mysql.MySQLExceptionSorter"/>  
    </validation>
</datasource>

上面的connection-url需要加上對ssl的限定,不使用,下面是對鏈接的驗證.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章