精华内容
下载资源
问答
  • 2018-11-25 15:55:41

    使用加密连接:
    https://dev.mysql.com/doc/refman/8.0/en/encrypted-connections.html

    通过MySQL客户端和服务器之间的未加密连接,有权访问网络的人可以监视您的所有流量并检查客户端和服务器之间发送或接收的数据。
    当您必须以安全的方式通过网络移动信息时,未加密的连接是不可接受的。要使任何类型的数据不可读,请使用加密。加密算法必须包含安全元素,以抵御多种已知攻击,例如更改加密消息的顺序或重放数据两次。
    MySQL支持使用TLS(传输层安全性)协议在客户端和服务器之间建立加密连接。TLS有时被称为SSL(安全套接字层),但MySQL实际上并不使用SSL协议进行加密连接,因为它的加密很弱(请参见 第6.4.6节“加密连接协议和密码”)。
    TLS使用加密算法来确保可以信任通过公共网络接收的数据。它具有检测数据更改,丢失或重放的机制。TLS还包含使用X.509标准提供身份验证的算法。
    X.509可以识别互联网上的某个人。在基本术语中,应该有一些称为“ 证书颁发机构 ”(或CA)的实体,它将电子证书分配给需要它们的任何人。证书依赖于具有两个加密密钥(公钥和密钥)的非对称加密算法。证书所有者可以将证书提供给另一方作为身份证明。证书由其所有者的公钥组成。使用该公钥加密的任何数据只能使用由证书所有者持有的相应密钥解密。
    如果您有MySQL源代码分发,则可以使用其mysql-test/std_data目录中的演示证书和密钥文件来测试您的设置
    使用加密连接的选项,证书和秘钥文件的名称以及加密连接技术支持相关的参数

    ssl加密库:
    openssh:MySQL支持使用TLSv1,TLSv1.1和TLSv1.2协议的加密连接。
    wolfssh
    要确定是否使用OpenSSL编译服务器,请测试是否存在任何这些变量。例如,如果使用OpenSSL,则此语句返回一行;如果使用wolfSSL,则返回空结果:

    mysql> SHOW STATUS LIKE 'Rsa_public_key'\G
    

    检查是否启用加密:

    mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher';
    mysql> \s
    

    查看服务器是否支持ssh连接:

    mysql>SHOW VARIABLES LIKE 'have_ssl';
    

    配置myql服务器连接:

    有几个选项可用于指示是否使用加密连接,以及指定适当的证书和密钥文件
    服务器端连接:
    服务器端的这些选项标识服务器在允许客户端建立加密连接时使用的证书和密钥文件:
    --ssl-ca:证书颁发机构(CA)证书文件的路径名。(--ssl-capath类似但指定CA证书文件目录的路径名。)
    --ssl-cert:服务器公钥证书文件的路径名。这可以发送到客户端,并根据它具有的CA证书进行身份验证。
    --ssl-key:服务器私钥文件的路径名。
    
    [mysqld]
    ssl-ca=ca.pem
    ssl-cert=server-cert.pem
    ssl-key=server-key.pem
    

    加密连接的客户端配置

    默认情况下,如果服务器支持加密连接,MySQL客户端程序会尝试建立加密连接,并通过以下--ssl-mode选项进一步控制 :
    如果没有 --ssl-mode选项,客户端将尝试使用加密进行连接,如果无法建立加密连接,则会回退到未加密的连接。这也是具有显式--ssl-mode=PREFFERED选项的行为 。
    使用时--ssl-mode=REQUIRED,客户端需要加密连接,如果无法建立,则会失败。
    使用--ssl-mode=DISABLED,客户端使用未加密的连接。
    使用--ssl-mode=VERIFY_CA或 --ssl-mode=VERIFY_IDENTITY,客户端需要加密连接,并对服务器CA证书和(与VERIFY_IDENTITY)证书 中的服务器主机名执行验证。
    mysql --ssl-ca=ca.pem \
      --ssl-cert=client-cert.pem \
      --ssl-key=client-key.pem
    

    使用openssh生成加密证书:

    生成证书代码:

    # Create clean environment
    rm -rf newcerts
    mkdir newcerts && cd newcerts
    
    # Create CA certificate
    openssl genrsa 2048 > ca-key.pem
    openssl req -new -x509 -nodes -days 3600 \
            -key ca-key.pem -out ca.pem
    
    # Create server certificate, remove passphrase, and sign it
    # server-cert.pem = public key, server-key.pem = private key
    openssl req -newkey rsa:2048 -days 3600 \
            -nodes -keyout server-key.pem -out server-req.pem
    openssl rsa -in server-key.pem -out server-key.pem
    openssl x509 -req -in server-req.pem -days 3600 \
            -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
    
    # Create client certificate, remove passphrase, and sign it
    # client-cert.pem = public key, client-key.pem = private key
    openssl req -newkey rsa:2048 -days 3600 \
            -nodes -keyout client-key.pem -out client-req.pem
    openssl rsa -in client-key.pem -out client-key.pem
    openssl x509 -req -in client-req.pem -days 3600 \
            -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
    

    生成的文件目录:

    ➜  newcerts tree -L 2
    .
    ├── ca-key.pem:CA证书
    ├── ca.pem
    ├── client-cert.pem:客户端连接的证书
    ├── client-key.pem
    ├── client-req.pem
    ├── server-cert.pem:服务器端的证书
    ├── server-key.pem
    └── server-req.pem
    
    0 directories, 8 files
    

    验证证书:

    要查看SSL证书的内容(例如,要检查其有效的日期范围),请直接调用 openssl:

    openssl x509 -text -in ca.pem
    openssl x509 -text -in server-cert.pem
    openssl x509 -text -in client-cert.pem
    

    也可以使用以下SQL语句检查SSL证书过期信息:

    mysql> SHOW STATUS LIKE 'Ssl_server_not%';
    openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
    

    查看证书内容:

    openssl x509 -text -in ca.pem
    openssl x509 -text -in server-cert.pem
    openssl x509 -text -in client-cert.pem
    

    创建RSAkey:

    openssl genrsa -out private_key.pem 2048
    openssl rsa -in private_key.pem -pubout -out public_key.pem
    chmod 400 private_key.pem
    chmod 444 public_key.pem
    

    配置:
    在启动服务器时用有关选项指明证书文件和密钥文件的位置。在建立加密连接前,要准备三个文件,一个CA证书,是由可信赖第三方出具的证书,用来验证客户端和服务器端提供的证书。CA证书可向商业机构购买,也可自行生成。第二个文件是证书文件,用于在连接时向对方证明自已身份的文件。第三个文件是密钥文件,用来对在加密连接上传输数据的加密和解密。MySQL服务器端的证书文件和密钥文件必须首先安装,在sampdb发行版本的ssl目录里有几个供参考的样本文件:ca-cert.pem(CA证书),server-cert.pem(服务器证书),server-key.pem(服务器公共密钥)。把这几个文件拷贝到服务器的数据目录中,再在选项文件里加上以下内容:

    [mysqld]
    ssl-ca=/usr/local/mysql/data/ca-cert.pem
    ssl-cert=/usr/local/mysql/data/server-cert.pem
    ssl-key=/usr/local/mysql/data/server-key.pem
    

    要想让某个客户程序建立加密连接,必须在调用这个客户程序时用有关选项告诉它在哪里能找到其证书文件和密钥文件。在sampdb发行版的ssl目录中提供了client-cert.pem(客户证书文件),client-key.pem(客户密钥文件),CA证书与服务器使用同样的ca-cert.pem。把他们拷贝到个人目录下,并在.my.cnf选项文件中指出文件位置,如:

    [mysql]
    ssl-ca=/home/mysql/ca-cert.pem
    ssl-cert=/home/mysql/client-cert.pem
    ssl-key=/home/mysql/client-key.pem
    

    配置完成后,调用mysql程序运行\s或SHOW STATUS LIKE 'SSL%'命令,如果看到SSL:的信息行就说明是加密连接了。如果把SSL相关的配置写进选项文件,则默认是加密连接的。也可用mysql程序的–skip-ssl选项取消加密连接。如果用命令行方式启用加密连接可以这样写:

     mysql --ssl-ca=ca-cert.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem
    

    可用GRANT语句的REQUIRE SSL选项来强制用户使用加密连接。

    使用sampdb发行版的证书可以建立一个加密连接,但由于该文件已公开,所以安全性不好,我们可以在测试成功后自行建立证书或购买商业证书,以提高安全性。如何自行建立SSL证书的文档在sampdb发行版的ssl/README文件里有说明

    更多相关内容
  • android MQTT 带SSL加密连接例子demo 安卓使用BKS加密文件进行SSL加密MQTT连接
  • idea docker远程TLS加密连接

    千次阅读 2021-07-30 11:21:00
    docker远程TLS加密idea docker远程TLS加密连接一、TLS证书生成1、新建tls.sh文件并添加以下内容2、赋予运行权限3、执行脚本4、此时还剩以下文件二、docker配置远程连接1、打开文件2、ExecStart处添加以下内容3、加载...

    idea docker远程TLS加密连接

    一、TLS证书生成

    1、新建tls.sh文件并添加以下内容

    #!/bin/bash
    FILE_ADDRESS=/data/work
    mkdir -p $FILE_ADDRESS
    #DOMAIN_HOST=`ifconfig eth0 | grep "inet" | awk '{ print $2}' | sed -n '1p;1q'`
    DOMAIN_HOST=域名地址 #选择域名方案最好
    INTERNET_IP=服务器外网ip
    HOST=$DOMAIN_HOST
    # 自定义信息
    PASSWORD="密码"
    COUNTRY=CN
    PROVINCE=gd
    CITY=gz
    ORGANIZATION=dounine
    GROUP=dg
    NAME=lake
    SUBJ="/C=$COUNTRY/ST=$PROVINCE/L=$CITY/O=$ORGANIZATION/OU=$GROUP/CN=$HOST"
    # 自定义信息
    #============================================================================================
    #此形式是自己给自己签发证书,自己就是CA机构,也可以交给第三方机构去签发
    # 生成根证书RSA私钥,password作为私钥密码(身份证)
    openssl genrsa -passout pass:$PASSWORD -aes256 -out $FILE_ADDRESS/ca-key.pem 4096
    # 2.用根证书RSA私钥生成自签名的根证书(营业执照)
    openssl req -new -x509 -days 365 -passin pass:$PASSWORD -key $FILE_ADDRESS/ca-key.pem -sha256 -subj $SUBJ -out $FILE_ADDRESS/ca.pem
    #============================================================================================
    #给服务器签发证书
    # 1.服务端生成自己的私钥
    openssl genrsa -out $FILE_ADDRESS/server-key.pem 4096
    # 2.服务端生成证书(里面包含公钥与服务端信息)
    openssl req -new -sha256 -key $FILE_ADDRESS/server-key.pem -out $FILE_ADDRESS/server.csr -subj "/CN=$DOMAIN_HOST"
    # 3.通过什么形式与我进行连接,可设置多个IP地扯用逗号分隔
    echo subjectAltName=IP:$INTERNET_IP,IP:0.0.0.0 > $FILE_ADDRESS/extfile.cnf
    # 4.权威机构对证书进行进行盖章生效
    openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in $FILE_ADDRESS/server.csr -CA $FILE_ADDRESS/ca.pem -CAkey $FILE_ADDRESS/ca-key.pem -CAcreateserial -out $FILE_ADDRESS/server-cert.pem -extfile $FILE_ADDRESS/extfile.cnf
    #============================================================================================
    #给客户端签发证书
    openssl genrsa -out $FILE_ADDRESS/key.pem 4096
    openssl req -subj '/CN=client' -new -key $FILE_ADDRESS/key.pem -out $FILE_ADDRESS/client.csr
    echo extendedKeyUsage = clientAuth > $FILE_ADDRESS/extfile.cnf
    openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in $FILE_ADDRESS/client.csr -CA $FILE_ADDRESS/ca.pem -CAkey $FILE_ADDRESS/ca-key.pem -CAcreateserial -out $FILE_ADDRESS/cert.pem -extfile $FILE_ADDRESS/extfile.cnf
    #============================================================================================
    # 清理文件
    rm -rf $FILE_ADDRESS/ca-key.pem
    rm -rf $FILE_ADDRESS/{server,client}.csr
    rm -rf $FILE_ADDRESS/ca.srl
    rm -rf $FILE_ADDRESS/extfile.cnf
    # 最终文件
    # ca.pem  ==  CA机构证书
    # cert.pem  ==  客户端证书
    # key.pem  ==  客户私钥
    # server-cert.pem  == 服务端证书
    # server-key.pem  ==  服务端私钥
    

    注意 更改DOMAIN_HOSTINTERNET_IPPASSWORD

    2、赋予运行权限

    chmod +x tls.sh
    

    3、执行脚本

    bash tls.sh
    

    4、此时还剩以下文件

    文件名作用
    ca.pemCA机构证书
    ca-key.pem根证书RSA私钥
    cert.pem客户端证书
    key.pem客户私钥
    server-cert.pem服务端证书
    server-key.pem服务端私钥

    二、docker配置远程连接

    1、打开文件

     vi /usr/lib/systemd/system/docker.service
    

    2、ExecStart处添加以下内容

    		--tlsverify \
            --tlscacert=/data/work/ca.pem \
            --tlscert=/data/work/server-cert.pem \
            --tlskey=/data/work/server-key.pem \
    

    ![配置截图](https://img-blog.csdnimg.cn/ce9a78f72f9a498da19a30bb6d8ecca9.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3JlZnVzZV93d2o=,size_16,color_FFFFFF,t_70

    ①:docker搭建时默认配置
    ②:无需TLS加密远程连接docker
    ③:TLS加密远程连接docker

    3、加载上述配置,再重启docker服务

    systemctl daemon-reload && systemctl restart docker
    

    三、idea配置远程连接docker

    1、idea安装docker插件

    docker插件

    我这里已经安装了,没有安装的点击Install,然后重启docker即可

    2、下载客户端证书(关键)

    将服务器上生成的ca.pemcert.pemkey.pem三个文件保存到本地文件系统

    客户端证书

    3、配置远程连接docker

    配置远程连接

    连接成功后我们便可查看docker下的容器和镜像
    Services

    展开全文
  • 配置 MySQL 使用加密连接 通过 MySQL 客户端和服务器之间的未加密连接,可以访问网络的人可以监视您的所有流量并检查客户端和服务器之间发送或接收的数据。 当您必须以安全的方式通过网络移动信息时,未加密的连接是...

    配置 MySQL 使用加密连接

    通过 MySQL 客户端和服务器之间的未加密连接,可以访问网络的人可以监视您的所有流量并检查客户端和服务器之间发送或接收的数据。

    当您必须以安全的方式通过网络移动信息时,未加密的连接是不可接受的。要使任何类型的数据不可读,请使用加密。加密算法必须包含安全元素以抵御多种已知攻击,例如更改加密消息的顺序或重放数据两次。

    MySQL 使用 TLS(传输层安全)协议支持客户端和服务器之间的加密连接。TLS 有时被称为 SSL(安全套接字层),但 MySQL 实际上并不使用 SSL 协议进行加密连接,因为它的加密很弱。

    TLS 使用加密算法来确保通过公共网络接收的数据是可信的。它具有检测数据更改、丢失或重放的机制。TLS 还包含使用 X.509 标准提供身份验证的算法。

    X.509 使得在 Internet 上识别某人成为可能。基本上,应该有一个称为“证书颁发机构”(或 CA)的实体,可以将电子证书分配给需要它们的任何人。证书依赖于具有两个加密密钥(一个公钥和一个秘密密钥)的非对称加密算法。证书所有者可以将证书出示给另一方作为身份证明。证书由其所有者的公钥组成。使用此公钥加密的任何数据只能使用相应的私钥进行解密,该私钥由证书所有者持有。

    默认情况下,如果服务器支持加密连接,MySQL 程序会尝试使用加密进行连接,如果无法建立加密连接,则回退到未加密的连接。

    加密连接的服务器端启动配置

    在服务器端,该–ssl 选项指定服务器允许但不需要加密连接。此选项默认启用,因此无需明确指定。

    要要求客户端使用加密连接进行连接,请启用 require_secure_transport系统变量。
    服务器端的这些系统变量指定了服务器在允许客户端建立加密连接时使用的证书和密钥文件:

    • ssl_ca:证书颁发机构 (CA) 证书文件的路径名。(ssl_capath类似,但指定 CA 证书文件目录的路径名。)

    • ssl_cert:服务器公钥证书文件的路径名。可以将此证书发送到客户端并根据其拥有的 CA 证书进行身份验证。

    • ssl_key:服务器私钥文件的路径名。

    例如,要为加密连接启用服务器,请使用my.cnf 文件中的这些行启动它,并根据需要更改文件名:

    [mysqld]
    ssl_ca=ca.pem
    ssl_cert=server-cert.pem
    ssl_key=server-key.pem
    

    要另外指定客户端需要使用加密连接,请启用 require_secure_transport系统变量:

    [mysqld]
    ssl_ca=ca.pem
    ssl_cert=server-cert.pem
    ssl_key=server-key.pem
    require_secure_transport=ON
    

    加密连接的客户端配置

    有关与建立加密连接相关的客户端选项的完整列表,请参阅加密连接的 命令选项。

    默认情况下,如果服务器支持加密连接,MySQL 客户端程序会尝试建立加密连接,并通过–ssl-mode选项进一步控制 :

    • 在没有–ssl-mode选项的情况下 ,客户端尝试使用加密进行连接,如果无法建立加密连接,则回退到未加密的连接。这也是具有显式–ssl-mode=PREFFERED选项的行为 。

    • 使用–ssl-mode=REQUIRED,客户端需要加密连接,如果无法建立连接则失败。

    • 使用–ssl-mode=DISABLED,客户端使用未加密的连接。

    • 使用–ssl-mode=VERIFY_CA或 --ssl-mode=VERIFY_IDENTITY,客户端需要加密连接,并且还针对服务器 CA 证书和(使用 VERIFY_IDENTITY)针对其证书中的服务器主机名执行验证。

    如果在require_secure_transport服务器端启用系统变量导致服务器需要加密连接,则尝试建立未加密的连接会失败 。请参阅将 加密连接配置为必需。

    客户端的以下选项标识客户端在与服务器建立加密连接时使用的证书和密钥文件。他们是类似 ssl_ca, ssl_cert以及 ssl_key在服务器端使用的系统变量,但 --ssl-cert并 --ssl-key识别客户端公钥和私钥:

    • –ssl-ca:证书颁发机构 (CA) 证书文件的路径名。如果使用此选项,则必须指定服务器使用的相同证书。(–ssl-capath类似,但指定 CA 证书文件目录的路径名。)

    • –ssl-cert:客户端公钥证书文件的路径名。

    • –ssl-key:客户端私钥文件的路径名。

    • 注意:
      主机名身份验证 VERIFY_IDENTITY不适用于由服务器自动创建或使用mysql_ssl_rsa_setup手动创建的自签名证书。此类自签名证书不包含服务器名称作为 Common Name 值。

    假设您要使用没有特殊加密要求的帐户或使用CREATE USER包含该REQUIRE SSL子句的语句创建的帐户进行连接 。假设服务器支持加密连接,客户端可以使用无–ssl-mode选项或显式–ssl-mode=PREFFERED 选项的加密进行连接 :

    mysql
    

    或者:

    mysql --ssl-mode=PREFERRED
    

    对于使用REQUIRE SSL 子句创建的帐户,如果无法建立加密连接,则连接尝试失败。对于没有特殊加密要求的帐户,如果无法建立加密连接,则尝试回退到未加密连接。如果无法获得加密连接,则为防止回退和失败,请按如下方式连接:

    mysql --ssl-mode=REQUIRED
    

    如果账户有更严格的安全要求,则必须指定其他选项来建立加密连接:

    对于使用REQUIRE X509 子句创建的帐户,客户必须至少指定 --ssl-cert和 --ssl-key。此外, 建议使用–ssl-ca(或 --ssl-capath),以便验证服务器提供的公共证书。例如(在一行中输入命令):

    mysql --ssl-ca=ca.pem
          --ssl-cert=client-cert.pem
          --ssl-key=client-key.pem
    

    对于使用REQUIRE ISSUERorREQUIRE SUBJECT 子句创建的帐户,加密要求与 for 相同 REQUIRE X509,但证书必须分别与帐户定义中指定的问题或主题相匹配。

    要防止使用加密并覆盖其他 选项,请使用以下命令调用客户端程序 : --ssl-xxx–ssl-mode=DISABLED

    mysql --ssl-mode=DISABLED
    

    要确定当前与服务器的连接是否使用加密,请检查Ssl_cipher状态变量的会话值 。如果该值为空,则连接未加密。否则,连接被加密并且该值指示加密密码。例如:

    mysql> SHOW SESSION STATUS LIKE 'Ssl_cipher';
    +---------------+---------------------------+
    | Variable_name | Value                     |
    +---------------+---------------------------+
    | Ssl_cipher    | DHE-RSA-AES128-GCM-SHA256 |
    +---------------+---------------------------+
    

    对于mysql客户端,另一种方法是使用STATUSor\s 命令并检查该SSL行:

    mysql> \s
    ...
    SSL: Not in use
    ...
    

    或者:

    mysql> \s
    ...
    SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256
    ...
    

    将加密连接配置为必需

    对于某些 MySQL 部署,使用加密连接不仅是可取的,而且是强制性的(例如,为了满足监管要求)。本节讨论使您能够执行此操作的配置设置。这些控制级别可用:

    您可以将服务器配置为要求客户端使用加密连接进行连接。

    您可以调用单个客户端程序来要求加密连接,即使服务器允许但不需要加密。

    您可以将单个 MySQL 帐户配置为仅可通过加密连接使用。

    要要求客户端使用加密连接进行连接,请启用 require_secure_transport系统变量。例如,将这些行放在服务器 my.cnf文件中:

    [mysqld]
    require_secure_transport=ON
    

    与require_secure_transport 启用,到服务器的客户端连接都需要使用某种形式的安全传输,而服务器只允许TCP / IP连接,使用SSL,或使用一个套接字文件(在Unix)连接或共享内存(在Windows上)。服务器拒绝非安全连接尝试,这些尝试失败并显示 ER_SECURE_TRANSPORT_REQUIRED 错误。

    调用的客户端程序,使得它需要加密的连接的服务器是否需要加密,使用 --ssl-mode的选项值 REQUIRED,VERIFY_CA或 VERIFY_IDENTITY。例如:

    mysql --ssl-mode=REQUIRED
    mysqldump --ssl-mode=VERIFY_CA
    mysqladmin --ssl-mode=VERIFY_IDENTITY
    

    要将 MySQL 帐户配置为仅可通过加密连接使用,请在CREATE USER创建帐户的语句中包含一个REQUIRE子句 ,在该子句中指定您需要的加密特性。例如,要要求加密连接并使用有效的 X.509 证书,请使用REQUIRE X509:

    CREATE USER 'jeffrey'@'localhost' REQUIRE X509;
    

    参考

    https://dev.mysql.com/doc/refman/5.7/en/using-encrypted-connections.html

    展开全文
  • SQL数据库管理—安全使用SSL加密连接 数据库远程管理时未使用加密连接,不可保证鉴别信息、建议采用加密连接方式保证通信过程中数据的完整性。MSSQL需要启用SSL,满足信息安全等保三级要求。 摘要 在SQL Server...

    SQL数据库管理—安全使用SSL加密连接

     

    数据库远程管理时未使用加密连接,不可保证鉴别信息、建议采用加密连接方式保证通信过程中数据的完整性。MSSQL需要启用SSL,满足信息安全等保三级要求。       

    1. 摘要

    SQL Server安全系列专题月报分享中,往期我们已经陆续分享了:如何使用对称密钥实现SQL Server列加密技术使用非对称密钥实现SQL Server列加密使用混合密钥实现SQL Server列加密技术列加密技术带来的查询性能问题以及相应解决方案行级别安全解决方案SQL Server 2016 dynamic data masking实现隐私数据列打码技术使用证书做数据库备份加密SQL Server Always Encrypted这八篇文章,直接点击以上文章前往查看详情。本期月报我们分享SQL Server SSL证书连接加密技术,实现网络上传输层连接加密。

    1. 问题引入

    SQL Server关系型数据库中,我们可以使用透明数据加密(TDE)、行级别加密(Row-level Security)、数据打码(Dynamic Data Masking)和备份加密(Backup Encryption)等技术来实现数据库引擎层的安全。但是,在网络传输层,客户端和服务端之前默认没有数据加密传输保护。因此,为了提高链路安全性,我们可以启用SSLSecure Sockets Layer)加密,SSL在传输层对网络连接进行加密,能提升数据通道的安全性,但同时会增加网络连接响应时间和CPU开销。

    1. 准备工作

    为了方便观察,我们使用Microsoft Network Monitor 3.4(以下简称MNM)工具来观察网络传输层事件,如果您已经安装MNM,请跳过该准备工作部分。
    首先,我们从微软官网下载MNM,根据需要下载对应的版本,我们这里下载64 bit版本,NM34_x64.exe
    接下来,安装MNM,直接执行NM34_x64.exe,然后按照向导完成安装。
    最后,重启OS

    1启用SSL证书之前

    在启用SSL证书加密之前,客户端和SQL Server服务端的网络传输层默认没有加密保护的,我们可以通过如下步骤验证。
    n 创建测试表
    n 新建MNM抓取
    n 连接查询测试
    n MNM中检查
    n 动态视图查看加密状态

    2创建测试表

    为了测试方便,我们首先创建测试表CustomerInfo,存入三个客户敏感信息,包含客户名称和客户电话号码。

    USE [TestDb]

    GO

    IF OBJECT_ID('dbo.CustomerInfo', 'U') IS NOT NULL

        DROP TABLE dbo.CustomerInfo

    CREATE TABLE dbo.CustomerInfo

    (

    CustomerId        INT IDENTITY(10000,1)    NOT NULL PRIMARY KEY,

    CustomerName    VARCHAR(100)            NOT NULL,

    CustomerPhone    CHAR(11)                NOT NULL

    );

     

    -- Init Table

    INSERT INTO dbo.CustomerInfo

    VALUES ('CustomerA','13402872514')

    ,('CustomerB','13880674722')

    ,('CustomerC','13487759293')

    GO

    3新建MNM抓取

    打开MNM,点击New Capture,然后Start,启动网络层时间抓取。

    4连接查询测试

    从客户端,连接上对应的SQL Server,执行下面的查询语句,以便观察MNM抓取情况。

    USE [TestDb]

    GO

    SELECT * FROM dbo.CustomerInfo WITH(NOLOCK)

    执行结果如下:

    5MNM中检查

    我们仔细观察MNM中的事件,发现在客户机和SQL Server服务端的网络传输层,使用的明文传输,如下截图:



    从图中右下角红色方框中,我们可以清清楚楚的看到了这三个客户的姓名和对应的手机号码,我们使用MNM看到数据在网络传输层以明文传送,并未做任何加密,可能会存在数据被窃听的风险。

    6动态视图查看连接状态

    当然,您也可以从SQL Server的连接动态视图看出,连接并未加密:

    MNMSQL Server动态视图我们可以得出相同的结论是:客户端和SQL Server服务端数据在网络传输层默认以明文传送,并未加密传输,可能会存在数据被窃听的风险。那么,我们可以启动SSL证书来加密数据传输,以达到更为安全的目的。

    1. 启用SSL证书

    启动SSL证书,分为以下几个部分:
    n 证书申请
    n 强制所有连接使用SSL
    n 加密特定客户端连接

    1证书申请

    Start –> 输入:mmc.exe -> File -> Add/Remove Snap-ins -> Certificate -> add -> Computer account -> Next -> Local Computer -> Finish -> OK



    展开Certificates -> 右键 Personal -> 选择 All Tasks -> 选择Request New Certificate -> 点击 Next -> 选中 Computer -> 点击Enroll -> 点击Finish
    右键点击对应证书 -> 选中All Tasks -> 选择Manage Private Keys… -> 授予 read 权限给本地账号NT ServiceMSSQLSERVER

    1. 强制所有连接使用SSL

    1强制所有连接加密

    SQL Server服务器上,Start -> Run -> sqlservermanager13.msc -> 右键点击Protocols for MSSQLSERVER -> Flags中将Force Encryption设置为Yes -> Certificate选项卡中选择证书 -> OK

    2重启SQL Service

    强制所有连接设置完毕后,如果想要立即生效,请重启SQL Service 
    注意:
    这里需要特别注意,如果是目前线上正常运行的应用,请慎重测试后,打开强制所有连接使用SSL

    1. 加密特定客户端连接

    当然,您也可以不用打开强制所有的连接使用SSL,转而使用加密特定的客户端连接,这里以SSMS连接工具为例。

    1客户端导入证书

    Start -> Run -> 输入:certmgr.msc -> 右键选择Trusted Root Certification Authorities -> All Tasks -> Import

    选择SQL Server服务端生成的证书文件

    Next -> Finish -> OK

    2SSMS启用加密连接

    SSMS连接服务端界面 -> 选择Options

    然后选择Encrypt connection

    然后,参照连接查询测试中方法进行连接测试。同样在连接管理视图中查看,我们可以看到连接已经加密:

    至此,使用SSL证书加密加密客户端和SQL Server服务端连接的实验成功。

    1. 注意事项

    由于使用了SSL证书来加密客户端和SQL Server服务端连接,在提升数据通信的安全性同时,加密解密操作也会导致网络连接响应时间增加和CPU使用率上升,对业务系统有一定的性能影响。因此,建议您仅在外网链路有加密需求的时候启用SSL加密,内网链路相对较安全,一般无需对链路加密。

    1. 最后总结

    本期月报我们分享了如何启用SSL证书,来加密客户端和SQL Server服务端连接,提升网络传输层通信安全,使得数据在传输过程中被加密后,以密文传送,最大限度保证了链路安全。

     

     

                    

    展开全文
  • Outlook添加网易邮箱账号提示"服务器的加密连接不可用"的解决方法发布日期:2018-12-10outlook邮件服务器的加密连接不可用该怎么办?outlook邮箱经常添加其他邮箱的账户,但是,最近在添加的时候出现一个提示,设置...
  • Mysql8.0默认采用了新的caching_sha2_password的身份验证方式,此方式并不兼容...为了继续维持我们常见的web连接的mysql身份验证方式,我们需要将默认的连接方式及root账户的连接方式恢复为旧的mysql_native_pass...
  • Proficy Webspace 使用56-bit DES加密连接方法 Proficy Webspace 使用56-bit DES加密连接方法 Proficy Webspace 使用56-bit DES加密连接方法 阿云SSL证书 PEM证书格式
  • oracle 加密连接

    千次阅读 2017-06-23 10:55:37
    Database Advanced Security...网络传输加密即将客户端也server段之间传输的数据进行加密: Oracle提供了很多加密方法来实现这一功能, 完整性校验也同样依赖这些加密算法来实现   实施:  1.首先看一下,你当
  • Office365配置Outlook客户端报错到服务器的加密连接不可用如何处理? ©Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者博客:https://blog.51cto.com/lander IT Helpdesk 工程师实战培训...
  • mybatis入门-数据库配置密码加密连接

    千次阅读 2018-05-12 21:10:36
    但在一些重要数据存在时,在大数据横行时期,数据就相当重要了,... 因此,在这提供俩个密码加密连接的方法。 第一种:直接重写BasicDataSource接口的setPassword方法; 数据源,我用的是com.alibaba.druid.pool.D...
  • 加密连接数据库明文密码

    千次阅读 2017-11-11 18:51:02
    加密连接数据库密码
  • 明文按64位进行分组,密钥长64位,密钥事实上是56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位, 使得每个密钥都有奇数个1)分组后的明文组和56位的密钥按位替代或交换的方法形成密文组的加密方法。...
  • Android开发wifi加密连接

    热门讨论 2015-12-28 09:35:44
    本文是【Android开发】wifi开关与wifi连接(密码连接)【地址:http://blog.csdn.net/jingleye/article/details/50416890】博文的demo,这个demo包含了wifi的开关,wifi信息的获取,wifi扫描,wifi有无密码的连接
  • 主要介绍了C#加密app.config中连接字符串的方法,涉及C#配置文件加密的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • 加密连接数据 加密数据连接配置文件 软件 将配置文件的连接字符串和密码进行加密
  • Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署...
  • EMQ 启用 SSL/TLS 加密连接

    千次阅读 2019-09-09 10:34:31
    EMQ 启用 SSL/TLS 加密连接 使用加密连接的时候选择wss协议,并使用域名连接:绑定域名-证书之后,必须使用域名而非 IP 地址进行连接,这样浏览器才会根据域名去校验证书以在通过校验后建立连接。 在 EMQ 上配置 ...
  • Tomcat配置数据库连接加密访问
  • sqlite 加密连接

    2020-10-15 12:54:47
    加密 SQLiteConnection cnn = new SQLiteConnection($"Data Source = {sqliteFilePath}")...连接加密数据库 //System.Data.Sqlite uses a non standard encryption files encrypted by it are only read by system.data
  • EMQX 启用 SSL/TLS 加密连接

    千次阅读 2022-03-12 18:06:22
    EMQX启用SSL/TLS加密连接
  • 当我远程桌面这台服务器进行维护时一直提示正在加密远程连接很久很慢才能连接得上。 最后我发现开了外网给服务器远程桌面一下子就能连接得上了。原因是:在使用安全网站或发送与接收安全电子邮件时要用到证书。...
  • 对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧
  • 详细讲解tomcat 连接池数据库解密加密方法以及过程。
  • 前方人员反馈在Horizon环境中交付桌面前,验证过程中,使用Horizon client登录错误报:无法建立安全加密链路连接,如下图所示: UAG软件版本:3.9 二、分析处理 1、检查客户端SSL配置选项,如下图: 2、检查租户...
  • Kafka-Tool通过SASL加密连接Client

    千次阅读 2019-08-23 11:35:18
    Kafka-Tool工具通过SASL加密连接Client
  • 邮件推送SSL/TLS加密连接

    千次阅读 2019-06-10 12:19:20
    邮件服务器使用的是未加密连接,使用未加密网络发送敏感信息可能会被恶意攻击者通过拦截网络通信读取并修改信息。邮件发送加密通道分为SSL和TLS两种方式,SSL“安全套接层”协议,TLS“安全传输层”协议,都属于是...
  • 从数据加密到PostgreSQL SSL认证连接

    千次阅读 2021-05-31 19:22:33
    为了保证数据库连接的安全性能,PostgreSQL允许使用SSL证书的方式去连接数据库,这无疑大大加强了数据访问的安全性能。 在讲解PostgreSQL中SSL的使用前,我们先来了解下什么是SSL证书。 1、数据加密 首先我们先来聊...
  • 使用AES256加密技术实现tomcat7对连接池数据库密码加密解密,资源中包含加密小程序,小程序实现加密,tomcat中实现解密,方便客户自己修改数据库密码且是密文!支持多操作系统如:linux mac os 文件太多分成两部分请...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 437,143
精华内容 174,857
关键字:

加密连接