HTTPS-HTTPSプロキシをサポートするプロキシを作成しています。 Pythonをメインのプログラミング言語として使用する前に、今はnode.jsに興味があるので、移行の準備をします。
私が直面している最大の問題は、node.jsでCAおよびその他のサーバー証明書を生成する方法がわからないことです。 Pythonには、素晴らしいpyOpenSSLがあります。今までnode.jsに似たようなものは見つかりません。
たぶん、openssl-forkメソッドを使用する必要がありますか?しかし、opensslでの対話型操作の処理方法。
ありがとうございました。
誰かがdoesnode.jsからプログラムでCSRを作成したい場合、私は nodejsモジュールを作成 opensslを使用して作成します秘密鍵とCSR。
編集:代わりに pem を使用します。より完全で、おそらくより信頼性があります。
編集2:実際には、pemはopensshの単なるラッパーでもあります。純粋なjs実装については、 forge を調べてください。
証明書にシェルを使用:
openssl genrsa -out server-key.pem 1024
openssl req -new -key server-key.pem -out server-csr.pem
openssl x509 -req -in server-csr.pem -signkey server-key.pem -out server-cert.pem
次に、node.jsでそれらを使用します
var https = require('https');
https.createServer({
key: fs.readFileSync('server-key.pem'),
cert: fs.readFileSync('server-cert.pem')
},
function (req,res) {
...
})
編集:
NPMでこのプロジェクトを試すこともできます。 https://npmjs.org/package/openssl-wrapper
NPMリポジトリを検索していることがわかりました: https://npmjs.org/search?q=openssl
私は自分で試したりチェックしたりしませんでしたが、ノードを使用して証明書を生成する方法のように見えます。これは元の質問です。
var openssl = require('openssl-wrapper');
var password = 'github';
return openssl.exec('genrsa', {des3: true, passout: 'pass:' + password, '2048': false}, function(err, buffer) {
console.log(buffer.toString());
});
フィードバックに興味があります。 ;)
node-forgeはそれを可能にします。これ以上言うことはありません。内部でopensslシェルコマンドを使用しません。
必要なオプションをサポートしているノードライブラリはないため、openssl
実行可能ファイルを使用します。
import { execSync } from 'child_process'
import fs from 'fs'
import tempy from 'tempy'
const extHeader = `authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
`
const Shell = cmd => execSync(cmd, { stdio: 'pipe' })
const writeCert = (extFile, outfile) => {
const cmd = [
`openssl`,
`x509`,
`-req`,
`-in ssl/my.csr`,
`-CA ssl/root-ca.pem`,
`-CAkey ssl/root-ca.key`,
`-CAserial ssl/root-ca.srl`,
`-out ssl/${outfile}`,
`-days 1825`,
`-sha256`,
`-extfile ${extFile}`,
`-passin pass:mypassphrase`
]
Shell(cmd.join(' '))
}
const createCert = domains => {
const sans = domains.map((d, i) => `DNS.${i + 1} = ${d}`)
const ext = extHeader + sans.join('\n')
const extFile = tempy.file()
fs.writeFileSync(extFile, ext, 'utf-8')
writeCert(extFile, 'out.crt')
}
依存関係: