源码时代Java干货分享|手把手教你SpringBoot配置ssl证书
本文旨在分享源码时代上关于Java的干货,重点介绍如何在SpringBoot中配置SSL证书。
首先,前往阿里云获取免费SSL证书。下载证书后,确保将其放置在项目resource路径下的黑马操盘线源码指定位置。注意区分key-store与key-store-password,避免因错误配置导致的问题。
对于直接部署在服务器上的项目,通过证书后应能实现HTTPS访问。然而,若使用HTTP访问,则因HTTP默认端口为而HTTPS默认端口为,需调整访问方式。在启动类中编写代码实现HTTP自动跳转至HTTPS,git for android 源码防范HTTP请求。
若希望将本地服务映射至公网访问,可以利用免费工具sunny-ngrok进行辅助。通过域名管理中心解析域名,然后启动ngrok服务。输入域名时,即便输入HTTP链接,微三云 源码也会自动重定向至HTTPS,这是因为启动类中已配置了重定向功能。
手把手教你为基于Netty的IM生成自签名SSL/TLS证书
本文指导你如何为基于Netty的即时通讯(IM)系统生成自签名SSL/TLS证书,旨在提升安全性。Netty作为高性能的Java NIO网络通信框架,常用于构建IM系统。然而,锁屏 android源码市面上关于如何生成适用于Netty的SSL/TLS证书的文章参差不齐,往往导致证书在Netty环境下的不可用性。以下步骤将帮助你顺利生成并应用证书,覆盖Android、iOS、Java桌面端、H5端等多个场景。网站视频分享源码 生成过程分为以下几步:1. 准备
在开始生成证书前,请确保对IM系统有所了解,推荐先阅读《零基础IM开发入门(一):什么是IM系统?》系列文章。对于Netty的入门,可以参考《史上最通俗Netty框架入门长文:基本介绍、环境搭建、动手实战》。更多进阶知识请查阅《新手入门一篇就够:从零开发移动端IM》和《基于Netty,从零开发IM》等文章。此外,《基于Netty的IM聊天加密技术学习:一文理清常见的加密概念、术语等》也能为你提供理论支撑。2. 生成SSL/TLS证书
生成证书流程如下:创建私钥证书:
openssl genrsa -des3 -out netty/netty-key.pem
注意,使用“-des3”参数以确保Netty能正确读取私钥。
将私钥转为pk8格式:
openssl pkcs8 -innetty/netty-key2.pem -topk8 -out netty/netty-key2.pk8
确保使用密码保护私钥。
创建证书请求:
openssl req -new -out netty/netty-req2.csr -key netty/netty-key2.pem
在Common Name中指定你的域名或IP。
生成公钥证书:
openssl x -req -inca/ca-req2.csr -out netty/netty-cert2.crt -signkey netty/netty-key2.pem -days
3. 实战应用
在服务端,配置SSL/TLS证书以实现加密传输。以下示例代码展示了如何在Netty服务端使用证书:javascript
// 导入证书文件
InputStream certChainFile = ServerLauncherImpl.class.getResourceAsStream("certs/netty-cert2.crt");
InputStream keyFile = ServerLauncherImpl.class.getResourceAsStream("certs/netty-key2.pk8");
// 创建SslContext对象
SslContext sslCtx = SslContextBuilder.forServer(certChainFile, keyFile, "").clientAuth(ClientAuth.NONE).build();
客户端同样需要配置SSL/TLS支持以连接服务端。以下是Android、iOS、Java桌面端和H5端的具体实现:Android端
java
SslContext sslContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();
iOS端
objective-c
[socket startTLS:settings];
Java桌面端
java
SslContext sslContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();
H5端
仅需将WebSocket连接url由“ws”更改为“wss”。4. 参考资料
请参考MobileIMSDK开源工程源码、Netty基础入门文章、IM加密技术学习资源等。有Person表,结构如下: (求大神发下java源代码)
实体类package dao;public class Person {
private Integer personid;
private String personname;
private String degree;
private String birth;
private Integer sal;
public Person() {
}
public Person(Integer personid, String personname, String degree, String birth, Integer sal) {
super();
this.personid = personid;
this.personname = personname;
this.degree = degree;
this.birth = birth;
this.sal = sal;
}
public Integer getPersonid() {
return personid;
}
public void setPersonid(Integer personid) {
this.personid = personid;
}
public String getPersonname() {
return personname;
}
public void setPersonname(String personname) {
this.personname = personname;
}
public String getDegree() {
return degree;
}
public void setDegree(String degree) {
this.degree = degree;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public Integer getSal() {
return sal;
}
public void setSal(Integer sal) {
this.sal = sal;
}
@Override
public String toString() {
return "Person [personid=" + personid + ", personname=" + personname + ", degree=" + degree + ", birth=" + birth
+ ", sal=" + sal + "]";
}
}
2. dao
package dao;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class PersonDao {
static Connection conn = null;
static {
// 修改成自己的数据库
String url = "jdbc:mysql://.0.0.1:/test?serverTimezone=UTC&useSSL=false";
String user = "root";
String password = "root";
try {
// 记得导入 驱动包
// 驱动名称:com.mysql.jdbc.Driver (指的是驱动版本:5.7版本的)
// com.mysql.cj.jdbc.Driver (8.0版本)
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
// TODO Auto-generated catch block
conn = null;
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
conn = null;
e.printStackTrace();
}
}
/
*** 查找所有的数据
* @return List集合
* @throws SQLException
*/
public List<Person> findAll() throws SQLException{
List<Person> list = null;
if(conn != null) {
list = new ArrayList<>();
String sql = "select * from person";
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
Person temp = new Person();
temp.setPersonid(rs.getInt("personid"));
temp.setPersonname(rs.getString("personname"));
temp.setDegree(rs.getString("degree"));
temp.setBirth(rs.getString("birth"));
temp.setSal(rs.getInt("sal"));
list.add(temp);
}
}
return list;
}
public Person findById(int personId) throws SQLException {
Person temp = null;
if(conn != null){
String sql = "select * from person where personid =?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, personId);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
temp = new Person();
temp.setPersonid(rs.getInt("personid"));
temp.setPersonname(rs.getString("personname"));
temp.setDegree(rs.getString("degree"));
temp.setBirth(rs.getString("birth"));
temp.setSal(rs.getInt("sal"));
}
}
return temp;
}
/
*** 通过id来删除一条记录
* @param personId
* @throws SQLException
*/
public void deleteById(int personId) throws SQLException {
if(conn != null) {
String sql = "delete from person where personid = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, personId);
ps.execute();
}else {
System.out.println("无法建立连接");
}
}
// 其他的可以自己试试来写!模板都是一样的,除了sql语句不同
}
2024-11-13 09:53
2024-11-13 09:25
2024-11-13 08:46
2024-11-13 07:59
2024-11-13 07:26