IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 关于使用SSL证书 -> 正文阅读

[网络协议]关于使用SSL证书

证书的申请

这里以阿里云为例
阿里云盾
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
根据系统下载合适的就可以了

使用

·

tomcat中的使用

在这里插入图片描述
首先进入tomcat根目录,然后创建文件夹cert将刚才下载的两个文件导入进去
接着我们移动到配置文件
tomcat安装目录下执行

 nano ./conf/server.xml

方式一:
找到配置端口号的<Connector/>标签,将默认配置注销掉
修改配置为

<Connector port="443"   #port属性根据实际情况修改(HTTPS默认端口为443)。如果使用其他端口号,则您需要使用https://domain name:port的方式来访问您的网站。
    protocol="HTTP/1.1"
    SSLEnabled="true"
    scheme="https"
    secure="true"
    keystoreFile="Tomcat安装目录/cert/xxxxxx.pfx" #证书名称前需加上证书的绝对路径,请使用您证书的文件名替换xxxxxxx。
    keystoreType="PKCS12"
    keystorePass="证书密码"  #请替换为密码文件pfx-password.txt中的内容。
    clientAuth="false"
    SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3"
    ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>

方式二:

<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="Tomcat安装目录/cert/domain name.pfx" keystorePass="证书密码"
           clientAuth="false" sslProtocol="TLS"/>

可选:配置web.xml文件,开启HTTP强制跳转HTTPS。
在文件后添加以下内容:

<login-config>  
    <!-- Authorization setting for SSL -->  
    <auth-method>CLIENT-CERT</auth-method>  
    <realm-name>Client Cert Users-only Area</realm-name>  
</login-config>  
<security-constraint>  
    <!-- Authorization setting for SSL -->  
    <web-resource-collection >  
        <web-resource-name >SSL</web-resource-name>  
        <url-pattern>/*</url-pattern>  
    </web-resource-collection>  
    <user-data-constraint>  
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>  
    </user-data-constraint>  
</security-constraint>

Springboot内置tomcat的使用

首先将两个证书文件移动到resource中(在其他地方也行,只是这里方便而已)
在这里插入图片描述
然后我们编辑配置文件

#端口号,这里配置成443可以直接使用https省略端口
server.port=17241
#你生成的证书名字
server.ssl.key-store=classpath:xxxxxxx.pfx
#密钥库密码
server.ssl.key-store-password=xxxxxxx
#加密方式,可以从tomcat版配置里看到
server.ssl.keyStoreType=PKCS12
#是否启动
server.ssl.enabled=true

然后我们添加配置类解决无法同时开启http和https的问题

@Configuration
public class SSLConfig {

    //下面是2.0的配置,1.x请搜索对应的设置
    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
        return tomcat;
    }

    private Connector createHTTPConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        //同时启用http(8080)、https(3036)两个端口
        connector.setScheme("http");
        connector.setSecure(false);
        connector.setPort(8080);
        connector.setRedirectPort(3036);
        return connector;
    }
}

添加配置类http自动跳转https

@SpringBootApplication
public class SpringbootmyApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootmyApplication.class, args);
    }

    /**
     * it's for set http url auto change to https
     */
    @Bean
    public EmbeddedServletContainerFactory servletContainer(){
        TomcatEmbeddedServletContainerFactory tomcat=new TomcatEmbeddedServletContainerFactory(){
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint=new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");//confidential
                SecurityCollection collection=new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(httpConnector());
        return tomcat;
    }

    @Bean
    public Connector httpConnector(){
        Connector connector=new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080);
        connector.setSecure(false);
        connector.setRedirectPort(8443);
        return connector;
    }

}

此处 是1.x的解决办法2.x版本中省去了postProcessContext方法的实现

@Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(httpConnector());
        return tomcat;
    }

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(80);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(443);
        return connector;
    }

此处来源:https://blog.csdn.net/qq_41170102/article/details/105837477

然后此时项目就可以通过[https://域名] | [https://域名:端口] 访问了

Nginx中的使用

依然是刚才的位置,这次我们下载nginx版的证书
在这里插入图片描述
接着我们把他移动到我们服务器专门用来放证书的位置(大家视情况而定),

这里由于我是使用的docker安装ngixn,所以我移动到了之前挂载到docker的一个目录在里面新建了以恶搞cert目录用以存放证书,把容器看作是另一个系统,不挂载过去是无法访问的
在这里插入图片描述
在这里插入图片描述
容器里成功看到文件目录,挂载成功

然后回到我们挂载的目录。编辑配置文件。找到http片段(或者新建一个文件夹编辑server然后进行导入)

yourdomain.com:替换成证书绑定的域名。
如果您购买的是单域名证书,需要修改为单域名(例如www.aliyundoc.com);如果您购买的是通配符域名证书,则需要修改为通配符域名(例如*.aliyundoc.com)。

使用docker时千万注意证书路径的填写,需要填写的是容器内部的地址

#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    listen 443 ssl;
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    server_name yourdomain.com; #需要将yourdomain.com替换成证书绑定的域名。
    root html;
    index index.html index.htm;
    ssl_certificate cert/cert-file-name.pem;  #需要将cert-file-name.pem替换成已上传的证书文件的名称。
    ssl_certificate_key cert/cert-file-name.key; #需要将cert-file-name.key替换成已上传的证书私钥文件的名称。
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的加密套件的类型。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型。
    ssl_prefer_server_ciphers on;
    location / {
        root html;  #站点目录。
        index index.html index.htm;
    }
}

配置好以后

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name cctv.cn www.cctv.cn;
    root html;
    index index.html index.htm;
    #证书地址这里有个坑,记住他是以ngin根目录为基准的相对路径,由于这里我挂载了conf.d所以文件在conf.d的cert中,所以配置如下
    ssl_certificate conf.d/cert/67_cctv.cn.pem;#这里是证书
    ssl_certificate_key conf.d/cert/67_cctv.cn.key;#这里是证书
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    location / {
    #注意ip地址,宿主机和容器相当于内网,所以内网ip和公网ip都可以,不能是回环地址
        proxy_pass http://47.243.67.238:8080;
        proxy_http_version 1.1;
        #下面就是做转发前的端口ip记录配置了
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_cache_bypass $http_upgrade;
    }
}
server{
监听80端口所有cctv.cn域名来的请求转发到https;
           listen 80;
           server_name cctv.cn;
           location / {
           return 302 https://$server_name$request_uri;
           }

}
server{
#这里是80端口的api服务
          listen 80;
           server_name api.xxx.cn;
           location / {
           proxy_pass http://47.23.167.238:10080;
           }
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 09:12:21  更:2021-11-26 09:12:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:46:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码