1. 程式人生 > >Netty5使用自簽證書實現SSL安全連線

Netty5使用自簽證書實現SSL安全連線

這次使用的Netty是最新的5.0 Alpha2版本,下載地址是:http://dl.bintray.com/netty/downloads/netty-5.0.0.Alpha2.tar.bz2,釋出時間是2015年3月,到現在快一年了,咋還不更新呢?有些奇怪……

製作一張自簽證書(jks格式)

#keytool -genkey -keysize 2048 -validity 365 -keyalg RSA -dnam e "CN=gornix.com" -keypass 654321 -storepass 123456 -keystore gornix.jks

keytool為JDK提供的生成證書工具

  • -keysize 2048 金鑰長度2048位(這個長度的金鑰目前可認為無法被暴力破解)
  • -validity 365 證書有效期365天
  • -keyalg RSA 使用RSA非對稱加密演算法
  • -dname "CN=gornix.com" 設定Common Name為gornix.com,這是我的域名
  • -keypass 654321 金鑰的訪問密碼為654321
  • -storepass 123456 金鑰庫的訪問密碼為123456(其實這兩個密碼也可以設定一樣,通常都設定一樣,方便記)
  • -keystore gornix.jks 指定生成的金鑰庫檔案為gornix.jks

完了之後就拿到了gornix.jks這個金鑰庫檔案了,把它放到自己的home目錄下,比如:/home/guogangj/gornix.jks

在程式初始化的時候生成SSLContext

keyStore ks = KeyStore.getInstance("JKS");
InputStream ksInputStream = new FileInputStream("/home/guogangj/gornix.jks");
ks.load(ksInputStream, "123456".toCharArray());
keyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, 
"654321".toCharArray()); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(kmf.getKeyManagers(), null, null);

這個過程在整個程式週期只需要做一次,最好try-catch一下,以便檢查異常,好了之後儲存好sslContext,後面用到。

在ChannelInitializer的initChannel中

@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
SSLEngine sslEngine = sslContext.createSSLEngine();
sslEngine.setUseClientMode(false); //伺服器端模式
sslEngine.setNeedClientAuth(false); //不需要驗證客戶端
socketChannel.pipeline().addLast("ssl", new SslHandler(sslEngine)); //搞定
//...
}

sslContext就是前面生成的那個sslContext,通常可以用引數的形式傳入到ChannelInitializer中。還有,記得把SslHandler放在其它Handler的前面。

完成

搞定了,easy?可見SSL也沒什麼神祕的,就是在普通的TCP連線基礎上包了一層處理而已(但如果要自己實現這層處理那可是相當複雜的),這層處理體現在Netty中就是一個SslHandler,把這個SslHandler加入到TCP連線的處理管線中即可。這篇文章並不是一篇完整的教程,本來我打算把它寫得完整一點,但這得花費較長的時間和篇幅,Netty雖然大大簡化了Java的網路程式的開發,但要從頭到尾講清楚,也蠻有難度的,學習Netty目前主要有這兩本書:國內作者寫的《Netty權威指南》和國外作者寫的《Netty in Action》,英文好的當然推薦看後者,但兩本書都不是針對最新的Netty 5.0所寫,所以想深入的話還得看看Netty的原始碼和官方文件(個人覺得也不太完善)。以後看看有沒有時間,有的話再寫些完整的教程出來。

相關推薦

Netty5使用簽證實現SSL安全連線

這次使用的Netty是最新的5.0 Alpha2版本,下載地址是:http://dl.bintray.com/netty/downloads/netty-5.0.0.Alpha2.tar.bz2,釋出時間是2015年3月,到現在快一年了,咋還不更新呢?有些奇怪…… 製作一張自簽證書(jks格式) #k

創建CA簽證及發證

ca創建所需要的文件。cd /etc/pki/CA目錄中,在此目錄中 touch index.txt文件echo 01 > serialCA自簽證書(umask 077;openssl genrsa -out private/cakey.pem 2048)這一步是建立私鑰,openssl req -ne

簽證的創建與導入

echo sub username ice tool key keystore web rck 1.創建根秘鑰 openssl genrsa -out ca.key 20482.創建根證書 openssl req -new -x509 -days 36500

填坑:Windows下使用OpenSSL生成簽證(很簡單,一個晚上搞明白的,讓後來者少走彎路)

vat 都是 環境 csr 過程 環境變量 crypt 報錯 out 最近在學習中發現openssl 中有個坑,所有的教程都是openssl genrsa -des3 -out private.key 1024,但是產生的證書,npm start 之後就報錯如下: erro

基於OpenSSL實現安全連線

   Web伺服器為了支援https訪問,通常會使用第三方庫openssl實現,而且為了高效能採用非同步事件驅動模型,因此連線套接字被設為非阻塞型別,本文在nginx ssl模組的基礎上,簡化提取它的核心框架,使用面向物件的方式描述,從握手、讀寫和關閉3個方面進行了分析,由於這3個操作都是非同步的

使用SSL安全連線MySQL資料庫

當使用非加密方式連線MySQL資料庫時,在網路中傳輸的所有資訊都是明文的,可以被網路中所有人擷取,敏感資訊可能被洩露。在傳送敏感資訊(如密碼)時,可以採用SSL連線的方式。 一、配置MySQL服務端支援SSL連線 1. MySQL 5.7.6以前版本的配置方法: a.

OpenSSL生成證書詳解 如何使用OpenSSL生成簽證 轉載

原文:http://my.oschina.net/fajar/blog/425478 使用OpenSSL生成自簽證書(親測)     一,前言             讀過我部落格的小夥伴兒都知道,我一般在前言裡面會提到為什麼寫這篇部落格,這次的理由是:公司讓我寫個

openssl 生成簽證及檢視證書細節

生成X509格式的CA自簽名證書 # openssl req -new -x509 -keyout ca.key -out c

Ubuntu 18.04使用OpenSSL簽證(證書支援多IP及多域名,谷歌瀏覽器無警告)

前言 在HTTPS資料傳輸的過程中,需要用SSL/TLS對資料進行加密和解密,以保證網路傳輸過程中資料的機密性。HTTPS協議可以大致分為兩個部分:其一是協商金鑰,首先當Client向Web Server發起請求時,Web Server向Client返回一個包含Server端公鑰的證書,然

CSS實現適應不同大小螢幕的背景大圖的兩種方法(轉

CSS實現自適應不同大小螢幕的背景大圖的兩種方法 一張清晰漂亮的背景圖片能給網頁加分不少,設計師也經常會給頁面的背景使用大圖,我們既不想圖片因為不同解析度圖片變形,也不希望當在大屏的情況下,背景有一塊露白,簡而言之,就是實現能自適應螢幕大小又不會變形的背景大圖,而且背景圖片不會隨著

Java中使用JSSE實現SSL/TLS安全協議

一、簡介 SSL/TLS協議是安全的通訊模式,而對於這些底層協議,如果要每個開發者都自己去實現顯然會帶來不必要的麻煩,正是為了解決這個問題Java為廣大開發者提供了Java安全套接字擴充套件——JSSE,它包含了實現Internet安全通訊的一系列包的集合,是SSL和TLS

JDK1.6 連線Sqlserver2008R2 驅動程式無法通過使用安全套接字層(SSL)加密與 SQL Server 建立安全連線

問題背景:由於專案中必須得用JDK6來作為Java環境,於是連線SQLServer 2008R2時出現了com.microsoft.sqlserver.jdbc.SQLServerException: 驅動程式無法通過使用安全套接字層(SSL)加密與 SQL Server 建立安全連線。錯誤:“Java.la

安全技術】Java 實現加密資料庫連線

一、前言在很多專案中,資料庫相關的配置檔案內容都是以明文的形式展示的,這存在一定的安全隱患。在開發和維護專案時,不僅要關注專案的效能,同時也要注重其安全性。二、實現思路我們都知道專案啟動時,Spring 容器會載入配置檔案並讀取檔案中的內容,那麼我們可以下邊步驟操作:1) 通

com.microsoft.sqlserver.jdbc.SQLServerException: 驅動程式無法通過使用安全套接字層(SSL)加密與 SQL Server 建立安全連線。錯誤:“java

九月 06, 2016 9:59:29 上午 com.microsoft.sqlserver.jdbc.TDSChannel enableSSL 資訊: java.security path: C:\Program Files\Java\jdk1.8.0_101

Tomcat啟用SSL導致Firefox出現“安全連線失敗”錯誤的解決方法

今天升級了Firefox,發現之前一個可以訪問的網站被攔截,提示“連線10.0.0.5時發生錯誤。在伺服器金鑰交換握手資訊中SSL收到了一個弱臨時Diffie-Hellman金鑰。(錯誤碼:ssl_error_weak_server_ephemeral_dh_key),如下

Tomcat 配置阿里的ssl安全證書,實現https訪問

        要做微信小程式,必須要能https訪問,做下安全協議。好吧,只能實現了。最初始我用的是apache配置的,但是,按照他那個步驟,不行。也沒找到問題出現在哪。好吧,實在是沒有辦法了。只能用了tomcat。感覺很坑。 配置的話,總得需要知道屬性代表的意思。不然,

Akka-CQRS(10)- gRPC on SSL/TLS 安全連線

  使用gRPC作為雲平臺和移動前端的連線方式,網路安全應該是必須考慮的一個重點。gRPC是支援ssl/tls安全通訊機制的。用了一個週末來研究具體使用方法,實際上是一個週末的挖坑填坑過程。把這次經歷記錄下來與各位分享。 gRPC的ssl/tls的原理是在服務端安裝安全證書公用certificat

tomcat 分別在window 和 Linux上配置SSL-安全問題

win const 火狐 隱患 ati then proto constrain ssl協議 公司項目收尾後。通過壓力測試後的安全測試。安全測試後中,對於網絡傳輸中數據加密問題存在安全隱患。須要配置SSL。 簡

baidu地圖:實現多點連線渲染

off utf ntc ack -type navig center div tex <script type="text/javascript"> var points = [ {"Lng":120.17787645967861,"Lat":30.25

Nginx實現ssl一級、二級域名證書部署並用https訪問代理轉發服務器

www. log 所有 null rec write include cal direct 1. 規劃 域名 解析IP Nginx代理 htpps://www.devcult.com 47.88.10.155 htpps://auto.devcult.c