SQLServer 自签证书配置SSL连接

一、安装SQLServer数据库

此处忽略SQLServer的安装,这里需要注意两点

1. 开启SQLServer的远程TCP/IP连接功能
打开随SQLServer一并安装的Sql Server Configuration Manager配置软件

2. 防火墙,如果是云上,可能还需要配置相关VPC以及安全组等网络配置,保证客户端所在机器可以连通SQLServer所在服务器
可以在客户端所在机器,利用命令 curl -kv {ip}:{port} 检验是否连通

二、自签证书生成

SQLServer的证书校验机制使用到了证书的扩展字段SAN(Subject Alternative Name)来确定连接主体的是否可信,所以生成的证书可以包含SAN字段,用以包含所以可能的SQLServer用到的IP以及域名(比如NAT场景下)

1. 准备openssl配置文件req.conf

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = {国家}
ST = {省}
L = {市}
O = {组织}
OU = {组织单元}
CN = {证书主体唯一标识}
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = {可能使用的SAN-1:IP/域名}
DNS.2 = {可能使用的SAN-2:IP/域名}
DNS.3 = {可能使用的SAN-3:IP/域名}

2. 生成Certificate Signing Request(CSR,证书签名请求)以及私钥

openssl req -new -out company_san.csr -newkey rsa:2048 -nodes -sha256 -keyout company_san.key.temp -config req.conf

可以通过命令验证生成的证书请求是否符合预期

openssl req -text -noout -verify -in company_san.csr

 3. 将PKCS#8格式的私钥文件company_san.key.temp转换成RSA格式

openssl rsa -in company_san.key.temp -out company_san.key

 4. 生成带有SAN扩展字段的证书文件

openssl x509 -req -days 999999 -in company_san.csr -signkey company_san.key -out company_san.crt -extensions v3_req -extfile req.conf

 5. 将私钥和证书一起打包成PKCS#12格式,用pfx或者p12作为后缀即可

openssl pkcs12 -export -out company_san.p12 -inkey company_san.key -in company_san.crt  -password pass:123456

 6. 利用 keytool 将pfx格式证书转换成jks格式,方便jdbc连接

keytool -importkeystore -srckeystore company_san.p12 -srcstoretype PKCS12 -srcstorepass 123456 -destkeystore company_san.jks -deststoretype JKS -deststorepass 123456 -destkeypass 123456

三、将证书导入SQLServer所在服务器

 win + r -> 运行 -> 打开 certlm.msc

在个人证书下 -> 所有任务 -> 导入

 按照提示,

 

 

四、SQLServer的证书配置

 打开随SQLServer一并安装的Sql Server Configuration Manager配置软件,选择属性

 

 选择Certificate选项页

 这时候可以选择下拉列表,如果生成的证书的CN信息中包含计算机名的话,可以在这里找到。

或者利用Import功能进行导入

五、测试连接SSL连接是否配置成功

1.在需要连接的windows主机上面,将之前生成的company_san.p12证书导入可信根证书目录中

2.打开SQL Server Management Studio Management(SSMS), 在"连接到服务器"中,填写正确的信息,

注:这里的ip地址,192.168.9.120 已经在上面生成的证书SAN信息中了

 3. 点击选项,在“连接属性”中勾选“加密连接”,这里不勾选“信任服务器证书”,保证使用的上面配置的证书,要不然会使用SQLServer服务启动内部自生成的证书,点击连接

 4.确认连接成功后,执行SQL,确定当前连接时加密的

SELECT encrypt_option
FROM sys.dm_exec_connections where session_id = @@SPID;

六、参考链接

How to Create a CSR and Key File for a SAN Certificate with Multiple Subject Alternate Names

Configure SQL Server Database Engine for encrypting connections

通义千问生成证书相关操作命令

posted @ 2024-06-27 14:44  MarshWinter  阅读(22)  评论(0编辑  收藏  举报