如何使用自签名证书进行https请求

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 如何使用自签名证书进行https请求

1.生成自签名证书

  1. 生成私钥
openssl genrsa -out private.key
  1. 生成自签名证书
openssl req -new -key private.key -out ca.csr
openssl x509 -req -days 365 -in ca.csr -signkey private.key -out ca.pem

365为天数

  1. 第一条命令只需填Common Name(域名), 如下:
❯ openssl req -new -key private.key -out ca.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:
State or Province Name (full name) []:
Locality Name (eg, city) []:
Organization Name (eg, company) []:
Organizational Unit Name (eg, section) []:
Common Name (eg, fully qualified host name) []:*.kq-qzj.cn
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:

2.配置nginx

将生成的private.keyca.pem放入/etc/nginx/cert

配置nginx

server {
    listen 30443 ssl;
    server_name *.kq-qzj.cn;
    ssl_certificate  /etc/nginx/cert/ca.pem;
    ssl_certificate_key /etc/nginx/cert/private.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {
      root /etc/nginx/conf.d;
    }
}

3. Java客户端跳过SSL和配置DNS解析

自定义DNS解析

import org.apache.http.conn.DnsResolver;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
 * @author Zijian Liao
 * @since 2.9.0
 */
@Component
public class HisResolver implements DnsResolver, InitializingBean {
    private Map<String, InetAddress[]> dnsMap = new ConcurrentHashMap<>();
    @Override
    public InetAddress[] resolve(String host) throws UnknownHostException {
        final InetAddress[] resolvedAddresses = dnsMap.get(host);
        if(resolvedAddresses != null){
            return resolvedAddresses;
        }
        return InetAddress.getAllByName(host);
    }
    // 初始化
    @Override
    public void afterPropertiesSet() throws Exception {
        this.refreshAddress();
    }
    // 定时刷新
    @Scheduled(fixedRateString = "PT5M")
    public void refreshTask() throws UnknownHostException {
        this.refreshAddress();
    }
    private void refreshAddress() throws UnknownHostException {
        // 模拟查询数据库
        Map<String, InetAddress[]> dnsMap = new ConcurrentHashMap<>();
        InetAddress[] inetAddress = InetAddress.getAllByName("127.0.0.1");
        dnsMap.put("a.kqqzj.cn", inetAddress);
        dnsMap.put("b.kqqzj.cn", inetAddress);
        dnsMap.put("c.kqqzj.cn", inetAddress);
        dnsMap.put("d.kqqzj.cn", inetAddress);
        this.dnsMap = dnsMap;
    }
}

跳过SSL

import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.ssl.TrustStrategy;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
/**
 * @author Zijian Liao
 * @since 2.9.0
 */
@Slf4j
@SpringBootTest
public class RestTemplateTest {
    @Resource
    private HisResolver hisResolver;
    private RestTemplate restTemplate;
    @BeforeEach
    public void init() throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
        // SSL
        TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true;
        SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
        SSLConnectionSocketFactory connectionSocketFactory = new SSLConnectionSocketFactory(sslContext,
                new NoopHostnameVerifier());
        HttpClient httpClient = HttpClientBuilder.create()
                .setDnsResolver(hisResolver)
                .setSSLSocketFactory(connectionSocketFactory)
                .build();
        ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
        this.restTemplate = new RestTemplate(requestFactory);
    }
    @Test
    public void testSsl(){
        System.out.println(restTemplate.getForObject("https://a.kq-qzj.cn:30443/a.html", String.class));
        System.out.println(restTemplate.getForObject("https://b.kq-qzj.cn:30443/a.html", String.class));
        System.out.println(restTemplate.getForObject("https://c.kq-qzj.cn:30443/a.html", String.class));
        System.out.println(restTemplate.getForObject("https://d.kq-qzj.cn:30443/a.html", String.class));
        System.out.println(restTemplate.getForObject("http://127.0.0.1:10000/a.html", String.class));
    }
}
目录
相关文章
|
5天前
|
网络协议 应用服务中间件 网络安全
免费泛域名https证书教程—无限免费续签
随着互联网安全意识提升,越来越多网站采用HTTPS协议。本文介绍如何通过JoySSL轻松获取并实现免费泛域名SSL证书的无限续签。JoySSL提供永久免费通配符SSL证书,支持无限制域名申请及自动续签,全中文界面适合国内用户。教程涵盖注册账号、选择证书类型、验证域名所有权、下载与安装证书以及设置自动续签等步骤,帮助网站简化SSL证书管理流程,确保长期安全性。
|
19天前
|
安全 算法 网络协议
ip地址https证书免费试用—政企单位专用
IP地址HTTPS证书为基于公网IP的服务提供加密保护,JoySSL等机构提供免费试用,帮助政企用户降低安全成本。用户需注册账号、申请证书、提交CSR并验证IP所有权,最后安装证书并测试。免费证书有效期短,但能有效保障数据安全,提升用户信任度及合规性。
|
15天前
|
安全 网络安全 数据安全/隐私保护
内网/局域网IP地址申请https证书方法
为内网/局域网IP地址申请HTTPS证书,可增强数据传输的安全性。首先确定固定的内网IP地址,选择可信的证书颁发机构,注册并申请免费或付费SSL证书,提交相关信息,支付费用(如有)。证书申请成功后,下载并配置于服务器,确保通过浏览器访问时显示为安全连接。注意定期更新证书,确保持续的安全保障。此过程适用于局域网内部通信加密,提升内网服务的安全水平。
|
23天前
|
安全 数据安全/隐私保护
IP地址https证书免费申请教程
本教程详细介绍如何免费申请IP地址HTTPS证书,涵盖准备、申请、审核、下载与部署阶段。从确认IP地址、选择CA、注册账户到验证控制权,最后完成证书部署,确保数据传输安全。注意证书有效期较短,需及时续签。
|
29天前
|
安全 物联网 数据建模
IP地址能否申请HTTPS证书?
IP地址可申请HTTPS证书,但需满足特定条件。首先,该IP须为公网IP,具备唯一性和可控性。证书类型限于DV或OV级别,不支持EV。申请过程包括所有权验证及端口开放。适用于服务器间通信及IoT设备等场景。申请时需注意成本、浏览器兼容性和安全性问题。
|
1月前
|
安全 应用服务中间件 网络安全
免费ip地址https证书申请方法
IP SSL证书用于保障IP地址与浏览器间的数据传输安全,多数需付费购买。JoySSL现提供免费试用版,申请流程包括:访问官网、注册账号(需输入特定注册码230922)、选择证书类型、填写申请信息、验证IP控制权、等待审核、下载及部署证书。确保IP地址独立可控,信息准确,及时续期。
|
1月前
|
安全 API 网络安全
使用OkHttp进行HTTPS请求的Kotlin实现
使用OkHttp进行HTTPS请求的Kotlin实现
|
1月前
|
安全 网络安全 数据安全/隐私保护
政务单位IP地址https证书
政务单位IP地址HTTPS证书是一种专为只有IP地址而无域名的政务网站设计的数字证书,用于加密通信、确保数据安全并提升用户信任度。申请流程包括选择证书颁发机构、提交申请并验证、部署证书等步骤。证书有效期通常为一年或多年,需定期更新以确保安全性。
|
1月前
|
算法 安全 网络安全
等保、密评使用的IP地址https证书
等保和密评是确保网络安全的重要环节。IP地址的HTTPS证书通过加密数据传输、符合等保密评要求、提升IP身份辨识度,起到关键作用。证书需国产化、支持国密算法,并建议采用OV或EV证书。申请流程包括准备、选择服务商、申请与验证、签发与部署、验证与测试。定期检查证书有效期,确保持续有效性。
|
2月前
|
安全 算法 量子技术
【HTTPS】中间人攻击和证书的验证
【HTTPS】中间人攻击和证书的验证
63 1