分类目录归档:商用密码学习

国密算法包括对称密码算法、非对称密码算法和杂凑算法,即SM1、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)等。其中,SM1是一种分组密码算法,用于加密和解密数据,该算法未公开;SM2是一种非对称加密算法,基于离散对数实现,常用于数字签名和密钥交换;SM3是一种杂凑算法,用于数据完整性校验和消息认证码,该算法为不可逆的算法,未公开;SM4是一种分组密码算法,可用于替代DES/AES等国际密码算法,拥有和AES算法相同的密钥长度和分组长度,均为128比特;SM7是一种分组加密算法,该算法没有公开,SM7适用于非接IC卡应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通、公交一卡通);SM9是基于标识的非对称密码算法,用椭圆曲线对实现的基于标识的数字签名算法、密钥交换协议、密钥封装机制和公钥加密与解密算法,包括数字签名生成算法和验证算法,并给出了数字签名与验证算法及其相应的流程;祖冲之密码算法是一种流加密算法,该算法可适用于3GPP LTE通信中的加密和解密。

java通过ssl连接mysql(待验证)

一、数据库端配置:

在 MySQL 中设置 SSL 参数通常涉及到编辑 MySQL 服务器的配置文件。这个文件的位置可能因操作系统和安装方式而异,常见的文件名有 my.cnf(在 Unix 和 Unix-like 系统)或 my.ini(在 Windows 系统中)。以下是一些基本的 SSL 配置示例:

服务器端配置(my.cnf)

[mysqld] 部分添加以下参数:

[mysqld]
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
# 可选参数
ssl-cipher=HIGH:MEDIUM:+3DES:!aNULL:!eNULL:!MD5:!RC4
ssl-verify-server-cert=1
  • ssl-ca:指定包含受信任的 SSL CA 证书的文件。
  • ssl-cert:指定 MySQL 服务器的证书文件。
  • ssl-key:指定 MySQL 服务器的私钥文件。
  • ssl-cipher:指定允许的 SSL 加密算法列表。
  • ssl-verify-server-cert:指定是否验证客户端证书(1 表示验证,0 表示不验证)。

客户端配置(my.cnf)

[client] 部分添加以下参数:

[client]
ssl-ca=/path/to/ca.pem
ssl-cert=/path/to/client-cert.pem
ssl-key=/path/to/client-key.pem
# 可选参数
ssl-cipher=HIGH:MEDIUM:+3DES:!aNULL:!eNULL:!MD5:!RC4
  • ssl-ca:指定包含受信任的 SSL CA 证书的文件。
  • ssl-cert:指定客户端的证书文件。
  • ssl-key:指定客户端的私钥文件。
  • ssl-cipher:指定允许的 SSL 加密算法列表。

使用 SSL 连接到 MySQL

在命令行客户端连接到 MySQL 时,可以添加 SSL 参数:

mysql --ssl-ca=/path/to/ca.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem -h <hostname> -u <username> -p

注意事项

  • 确保路径和文件名正确无误。
  • 如果服务器和客户端使用相同的证书和密钥文件,可以省略客户端配置,并依赖于服务器端的默认设置。
  • 服务器和客户端的 SSL 版本必须兼容。
  • 在生产环境中,应该使用由信任的 CA 签发的证书,而不是自签名的证书。
  • 重启 MySQL 服务以使配置生效。
    在配置 SSL 时,建议仔细阅读 MySQL 的官方文档,以获取适用于您的 MySQL 版本的详细信息和更多高级配置选项。

二、程序端代码:

在 Java 中通过 SSL 连接到 MySQL 数据库,您需要使用 JDBC 驱动,并确保您的 MySQL 服务器已经配置了 SSL。以下是如何在 Java 应用程序中配置 SSL 连接的步骤:

  1. 确保 MySQL 服务器已启用 SSL:您的 MySQL 服务器必须配置为支持 SSL 连接。这通常涉及到在 MySQL 配置文件中设置 SSL 证书和密钥,如前面所述。
  2. 下载 MySQL Connector/J:这是 MySQL 的 JDBC 驱动程序。您可以从 MySQL 官方网站下载最新版本的 Connector/J。
  3. 将 Connector/J 添加到您的项目:将下载的 JAR 文件添加到您的 Java 项目的类路径中。
  4. 配置 JDBC URL 以使用 SSL:在建立数据库连接时,您需要在 JDBC URL 中包含 SSL 参数。以下是一个示例 URL,它使用 SSL 连接到 MySQL:
String url = "jdbc:mysql://localhost:3306 database_name?useSSL=true&requireSSL=true";
  1. 加载 SSL 证书:如果您的 SSL 证书是由权威机构签发的,您可能不需要在客户端做任何特殊配置。但如果您使用的是自签名证书,您需要将 CA 证书添加到 Java 信任库中。这可以通过设置系统属性来完成:
System.setProperty("javax.net.ssl.trustStore", "/path/to/truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "truststore_password");
  1. 建立连接:使用标准的 JDBC 代码来建立连接。这里是一个简单的示例:
import java.sql.Connection;
import java.sql.DriverManager;
public class MySQLSSLConnection {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306 database_name?useSSL=true&requireSSL=true";
        String user = "your_username";
        String password = "your_password";
        try {
            Connection conn = DriverManager.getConnection(url, user, password);
            // 使用连接进行数据库操作
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

请根据您的实际情况替换 database_nameyour_usernameyour_password/path/to/truststoretruststore_password

  1. 处理 SSL 握手问题:如果遇到 SSL 握手问题,可能需要调整 SSL 密码套件或 SSL 协议版本。这可以通过设置额外的 JDBC URL 参数或系统属性来实现。
    请注意,SSL 连接可能会影响性能,因此在决定是否使用 SSL 时,应考虑安全性和性能之间的平衡。此外,SSL 配置可能因 MySQL 和 Java 的版本而异,因此建议查阅最新的官方文档以获取详细信息和指导。

记录资料:

RDS MySQL的SSL(Secure Socket Layer)加密功能

https://help.aliyun.com/zh/rds/apsaradb-rds-for-mysql/configure-ssl-encryption-for-an-apsaradb-rds-for-mysql-instance

https://mp.weixin.qq.com/s/5Rabt2cuysN0ojKsfmaEFg