Así que he estado haciendo mi investigación y no he encontrado nada lo suficientemente específico para mi problema. Como indica el título de la pregunta, quiero hacer una CSR solo con la clave pública. Lo que he podido hacer es generar un CSR con la información de mi elección junto con un nuevo par de llaves. Y luego use algo como esto para obligarlo a usar la clave pública que quiero al hacer el certificado.
openssl x509 -req -in mycsr.pem -force_pubkey mypubkey.pem -CA dumyCA.pem -CAkey -dumyCA.pem -out mycert.pem
Después de esto, tomo el certificado emitido y cambio sus atributos para asociarlo con una clave privada. Todo esto funciona muy bien. El problema con esto es que si tomara el csr mencionado y lo enviara a una CA, me devolverían un certificado que usaba la clave que se generó cuando se genera el csr. Por eso mi pregunta.
EDITAR: Así que tengo un par de claves, pero mi clave privada está en un módulo HSM que no tiene capacidades de exportación. Puedo obtener un archivo .pem de la clave pública. Y después de realizar el certificado con el comando que di, lo ejecuto a través de un programa que lo asocia con la clave privada. Entonces, mi nueva pregunta es: ¿usando la API openssl podré crear mi propio csr? Así que puedo firmarlo con la clave privada sin tener que tenerla en un archivo y asociarla con la clave pública que tengo.