Skip to content

Instantly share code, notes, and snippets.

@ixqbar
Last active September 10, 2018 01:48
Show Gist options
  • Save ixqbar/b5332a5336e248fb0687ac861486d835 to your computer and use it in GitHub Desktop.
Save ixqbar/b5332a5336e248fb0687ac861486d835 to your computer and use it in GitHub Desktop.
openssl使用

###产生1024位RSA私匙,用3DES加密它,口令为trousers,输出到文件rsaprivatekey.pem

openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024

###从文件rsaprivatekey.pem生成的公钥匙输出到文件rsapublickey.pem

openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem

###用公钥匙rsapublickey.pem加密文件plain.txt,输出到文件cipher.txt

openssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt
  • 公钥加密

###使用私钥匙rsaprivatekey.pem解密密文cipher.txt,输出到文件plain.txt

openssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt
  • 私钥解密

###用私钥匙rsaprivatekey.pem给文件plain.txt签名,输出到文件signature.bin

openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin
  • 私钥签名

###用公钥匙rsapublickey.pem验证签名signature.bin,输出到文件plain.txt

openssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain
  • 公钥验证私钥签名合法性

###从X.509证书文件cert.pem中获取公钥匙,用3DES加密mail.txt 输出到文件mail.enc

openssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem

S/MIME[Secure Multipurpose Internet Mail Exchange]
S/MIME应用于安全邮件交换,可用来认证和加密,是PGP的竞争对手。与PGP不同的是,它需要一套公匙体系建立信任关系,而PGP只需直接从某个地方获取对方的公匙就可以。然而正因为这样,它的扩展性比PGP要好。另一方面,S/MIME可以对多人群发安全消息,而PGP则不能。 命令smime可用来加解密、签名、验证S/MIME v2消息(对S/MIME v3的支持有限而且很可能不工作)。对于没有内置S/MIME支持的应用来说,可通过smime来处理进来(incoming)和出去(outgoing)的消息。

###从X.509证书文件cert.pem中获取接收人的公钥匙,用私钥匙key.pem解密S/MIME消息mail.enc,结果输出到文件mail.txt

openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt

###cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,证书被包含在S/MIME消息中,输出到文件mail.sgn

openssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn

###验证S/MIME消息mail.sgn,输出到文件mail.txt签名者的证书应该作为S/MIME消息的一部分包含在mail.sgn中

openssl smime -verify -in mail.sgn -out mail.txt
@ixqbar
Copy link
Author

ixqbar commented Nov 21, 2016

https

openssl genrsa -out client.key 2048
openssl req -new -x509 -key client.key -out client.pem -days 3650

查看证书

openssl x509 -in server.pem -inform pem -noout -text

test

package main

import (
	"flag"
	"fmt"
	"io"
	"io/ioutil"
	"net/http"
	"os"
)

func httpServer(w http.ResponseWriter, req *http.Request) {

	for k, v := range req.Header {
		fmt.Printf("%s: %s\n", k, v)
	}
	fmt.Printf("Host: %s\n", req.Host)
	fmt.Printf("URL: %s\n", req.URL.String())
	fmt.Printf("Content-Length: %d\n", req.ContentLength)
	fmt.Println()
	if req.ContentLength > 0 {
		var content, err = ioutil.ReadAll(req.Body)
		if err == nil {
			fmt.Print(string(content))
		} else {
			fmt.Print(content)
		}
	}

	io.WriteString(w, "OK\n")
}

func main() {
	var port = flag.Int("port", 8000, "port default 8000")

	flag.Parse()

	fmt.Printf("running at port %d", *port)

	http.HandleFunc("/", httpServer)
	err := http.ListenAndServeTLS(fmt.Sprintf(":%d", *port), "server.pem", "server.key", nil)
	checkError(err)
}

func checkError(err error) {
	if err != nil {
		fmt.Println("Fatal error ", err.Error())
		os.Exit(1)
	}
}

@ixqbar
Copy link
Author

ixqbar commented Sep 10, 2018

生成nginx ssl

openssl req -newkey rsa:2048 -nodes -keyout server.key -x509 -days 365 -out server.crt

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment